使用 socket 做进程间通信的架构师属于什么水平

87 天前
 blackstack
我们是做安全产品的厂商,最近一个客户端程序,有 Androd 和 Windows 两个平台。

架构师原先是做 Java 的,负责 Android 端的开发,我负责 Windows 端开发。

因为需要和其他程序通信,所以他选定的是 socket ,用于本地进程的进程间通信,这里没有任何跨操作系统和跨设备的通讯需求。

我在 Windows 端用的是命名管道,现在强压我要改成 Socket 。

改 Socket 是没什么难度,但是被强制往自己的代码里糊屎非常难受。

Socket 他还没做任何权限认证,也就是本地的任何线程,不管是其他合法进程还是木马病毒,都可以给它的 Socket 端口发消息,只要格式正确它都会执行。

请问下,IPC 用 Socket 的多吗?是纯属他太菜,还是我水平不足??
14391 次点击
所在节点    程序员
137 条回复
liyafe1997
85 天前
个人也觉得在没有网络需求的情况下,在 Windows 上用 127.0.0.1 做进程间通信(或者说仅仅用来做进程间通信)是件很别扭的事情。哪怕在*nix 下也应该用 domain socket 。
建立把这个甩他脸上 https://learn.microsoft.com/zh-cn/windows/win32/ipc/interprocess-communications
让他给个不用 namedpipe 的理由,甚至在 Win10+上已经可以用 AF_UNIX 了。
tuiL2
85 天前
没看明白命名管道怎么就安全了?非法程序想连也可以连吧
siweipancc
85 天前
把我干哪来了?
yplam
85 天前
觉得架构师的技术选型没问题,团队开发用 socket 更容易测试与调试
moooxin
85 天前
可能,单纯的就是 ,其他的 他不会
zhazi
85 天前
从技术层面看
我觉得架构师的设计有问题。
从软件设计的角度看起码得有一个设计思想作为指导,
比如可重用性高、可读性强、可靠性高、灵活性好、可维护性强。起码得沾一样。

所有技术栈都是为了某种需求延申出来的,当前的技术栈可以满足当前需求,为什么要引入新的技术栈。
程序没有任何跨平台通讯的需求,使用一个为了网络通讯的技术,做本地通讯,提高了程序复杂度和可维护性。

从非技术层面我赞同 xavierchow
blackstack
85 天前
@tuiL2 命名管道至少可以知道哪个进程发来的数据,socket 就完全不知道了。命名管道在 windows 下也有基本的用户权限隔离,socket 也没有。

在没做鉴权的情况下,其实都不算安全,但是我个人觉得命名管道还是好点。
blackstack
85 天前
@yplam 主要是就我和他两个人,一人负责一个客户端…

我说可以把我这边的输入输出格式和他统一,但是不同操作系统,没必要强求通讯方式一致,这没有意义。

但他还是要求改 tcp socket 。
ashuai
84 天前
你要么可以把他给干离职,否则这气没什么好生的。

自己抽象个数据收发层,socket 和 name pipe 全支持喽,顺手把 udp 也支持掉。做个数据包的校验,加个开关,默认不启用
djasdjds
84 天前
😂op 的回答反而让我明白了来一个团队第一件干的事情就是先换成自己的人,干活听话
proxytoworld
84 天前
@blackstack 进程名可以伪造啊
lucasxu00
84 天前
@blackstack 话说命名管道也没有比 socket 更安全啊,同样可以被其他进程写数据
tuiL2
84 天前
听起来很鸡肋,他都连上来了,数据也写完了,即使名字有什么用。况且 socket 也可以通过端口号来获得进程名字啊。
blackstack
83 天前
@proxytoworld 进程名加进程路径判断,用户现场基本上不会重装程序或者把程序安装到其他地方。

不过最终还是要加身份认证比较稳妥。
blackstack
83 天前
@tuiL2 感谢指正,查了下资料,tcp socket 的确也是可以获取到的,就是比较绕。

命名管道还有一个好处是可以通过设置安全描述符来实现用户权限隔离,这个据我所知在 tcp socket 上做不到。
blackstack
83 天前
@lucasxu00 命名管道有一个好处是可以通过设置安全描述符来实现用户权限隔离,这个据我所知在 tcp socket 上做不到。
blackstack
83 天前
@ashuai 已经这么做了,他是异地,偶尔过来,他提方案,后面实现如果有坑他都不管的,得我自己来填,否则我也懒得管这么多。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1075187

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX