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

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

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

3715 次点击
所在节点    PHP
34 条回复
justyy
2016-10-28 21:21:19 +08:00
escapeshellarg + esacepshellcmd
greenskinmonster
2016-10-28 21:27:28 +08:00
用 inotify 监控文件更新,符合条件就重启服务好了。
xiaoz
2016-10-28 21:48:19 +08:00
@gouchaoer 感谢提供的思路,这个方案似乎可行。
billlee
2016-10-28 21:50:17 +08:00
@xiaoz 把那个配置文件的 group 改成运行 php 的 group, 权限改成 0664 。然后另外用 inotify 监视文件,重启服务就好了。不需要给 php 用户 sudo 权限。
xiaoz
2016-10-28 21:50:36 +08:00
@gouchaoer 这个方案不错
XiaoxiaoPu
2016-10-28 22:03:55 +08:00
@xiaoz 另一个思路:写一个 setuid 程序专门去执行重启服务的操作,这样就不需要 sudo 了
xiaoz
2016-10-28 22:08:59 +08:00
@gouchaoer 您看我这样的思路可行吗?
写一个 1.php 文件去检测 abc.json 文件是否更新,如果有更新的话,就通过 system()函数去重启服务,这个 php 文件不对外访问。然后 crontab 使用 php-cli 每隔 5 分钟执行 1.php
falcon05
2016-10-28 22:12:27 +08:00
@xiaoz 然后你发现一堆僵尸进程,我试过
Tink
2016-10-28 22:14:31 +08:00
我就在微信公众号上直接用 php 执行 shell 了,没啥问题
moult
2016-10-28 22:19:46 +08:00
1 、如果你执行 system(sprint_f("rm -rf %s", $_GET['path'])) 肯定是存在安全隐患的,类似 SQL 注入一样
2 、如果你执行 system('/sbin/service restart nginx') 那一般不会有安全问题的,但是一般情况下你 PHP 肯定执行在非 root 用户下面吧,所以其实这个根本执行不了,所以你要加上 sudo ,然后把这条命令加到 sudo 的白名单就好了。千万不要把 php 所在的整个用户加到白名单!
moult
2016-10-28 22:22:37 +08:00
@moult #30 的 sprint_f 改成 sprintf 。。不小心按到了下划线。
xiaoz
2016-10-28 23:35:18 +08:00
@falcon05 这个思路有什么不妥吗?
fuxkcsdn
2016-10-29 00:46:16 +08:00
@xiaoz 按照你这思路的话,根本不需要用到 php , shell+cron 就能搞定了,而且还简单

以前写过个类似的,不过脚本在老家的移动硬盘上…
fuxkcsdn
2016-10-29 00:53:38 +08:00
https://linux.die.net/man/1/inotifywait

Example 2

A short shell script to efficiently wait for httpd-related log messages and do something appropriate.
#!/bin/sh
while inotifywait -e modify /var/log/messages; do
if tail -n1 /var/log/messages | grep httpd; then
kdialog --msgbox "Apache needs love!"
fi
done
参考这例子写一个就 OK 了

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

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

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

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

© 2021 V2EX