PHP 执行 shell 有哪些潜在风险?

2016-10-28 19:14:05 +08:00
 xiaoz

PHP 提供exec()/system()等函数去执行 shell ,那么 PHP 通过这些函数执行 shell 的时候会存在哪些风险,又该如何避免呢?有什么好的解决方案吗?

3836 次点击
所在节点    PHP
34 条回复
ids
2016-10-28 19:21:05 +08:00
不用安全
EDDYCJY
2016-10-28 19:23:02 +08:00
其他语言也存在的问题
xiaoz
2016-10-28 19:27:31 +08:00
@ids 但是最打算写个 php 程序可能需要执行系统的 shell 命令,因此请教下有没有其它好的解决方案?
nfroot
2016-10-28 19:36:29 +08:00
和 sql 一样防止注入
a15819620038
2016-10-28 19:37:52 +08:00
php 执行 shell 没什么问题。

不安全的是怕你的 php 脚本有漏洞,被别有用心的人利用了,后果严重程度不一。
HarveyDent
2016-10-28 19:40:08 +08:00
应该有其他方案吧,不建议这么搞
minbaby
2016-10-28 19:46:41 +08:00
执行的命令写死,不接受外界接受动态参数,做好过滤
invalidtoken
2016-10-28 19:53:08 +08:00
外部程序漏洞被利用然后提权?
Kokororin
2016-10-28 19:57:49 +08:00
如果参数写死的话没有问题
slixurd
2016-10-28 20:02:21 +08:00
不要用 root 跑 php 。
kfll
2016-10-28 20:02:28 +08:00
能写 extension 就写 extension
billlee
2016-10-28 20:06:11 +08:00
主要是要防止
I. 任意命令执行
II. 利用被执行的程序进行攻击

任意命令执行也可以分两种情况
1. 直接从外界接受命令名,这是一定要避免的
2. shell 语言注入。理想情况下,如果能直接用 execve 搞定的事情,就不要调用 shell, 这样就不会有注入问题。我写 python 的时候也是这样做的。可 php 这智障没有 execve 接口,只能调用 shell. 一定要调用就做好 escape 啦。

第 II 点就是说,你调用的外部程序可能设计和编写的时候没考虑那么多安全问题。尤其是 DOS 攻击,面向本地用户的程序是不会考虑这个问题的。
xiaoz
2016-10-28 20:15:06 +08:00
@slixurd 用的 www 跑 PHP ,但是 php 执行 shell 的时候我加了 sudo
xiaoz
2016-10-28 20:15:58 +08:00
@billlee 感谢您的耐心解答,非常有帮助。顺便再请教下 escape 是什么意思?
xiaoz
2016-10-28 20:16:29 +08:00
@minbaby 好的,谢谢。就调用一个 shell 命令,都是写死的。
billlee
2016-10-28 20:19:38 +08:00
@xiaoz 转义,把 | 换成 \|, $ 换成 \$ 等。我记得 php 里面自带了转义函数,但具体效果怎么样不清楚

另外看到你上面说用 root 执行外部程序,最好不要这样做,很危险。除非你的 php 程序就是用来修改系统配置的(如路由器的 web 配置界面)
xiaoz
2016-10-28 20:29:50 +08:00
@billlee 服务器上会去读一个 json 文件, php 修改这个 json 后我需要服务器去重启某个服务重新载入 json 生效。
loveyu
2016-10-28 21:08:28 +08:00
最近要用 root 执行些脚本!然后没辙,只能 php 了
gouchaoer
2016-10-28 21:17:57 +08:00
你需要用 php-cli 去重启服务,不用在 php-fpm 里执行 shell
gouchaoer
2016-10-28 21:18:41 +08:00
在 cron 里面定期调用 php-cli 脚本。。。或者你 php-cli 做成一个 daemon 也行啊

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

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

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

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

© 2021 V2EX