首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止PHP执行shell命令?

如何防止PHP执行shell命令?
EN

Server Fault用户
提问于 2011-02-17 08:19:39
回答 3查看 7.4K关注 0票数 2

如何防止apache执行bash脚本?任何php脚本都无法在bash中执行命令(例如,添加到我的php和html文件的链接的命令)。有办法吗??

编辑:我想到了任何bash命令,不仅仅是.sh文件

EN

回答 3

Server Fault用户

回答已采纳

发布于 2011-02-17 08:50:04

您可能需要查看open_basedir配置参数。对你的问题不是一个真正的答案,但它是相关的。设置每个站点的basedir是个好主意,比如"/var/www/ site :/usr/share/php:/tmp“。(在每台机器上/usr/share/php可以是不同的)。

要真正回答您的问题:您也可以将其放在.htaccess中:

代码语言:javascript
复制
<Files *.sh>
  ForceType 'text/plain; charset=UTF-8'
</Files>
票数 2
EN

Server Fault用户

发布于 2011-03-03 13:35:10

您可以使用disable_functions指令在php.ini中禁用对特定函数的访问,例如:

disable_functions = exec,system,print

或者,如果您希望阻止PHP编辑其他文本文件的内容(如您的注释中所述),您可以使用文件系统权限来保护它们--使之使webserver用户(或PHP执行的用户)不具有对这些文件的写权限。

参考文献:

http://www.cyberciti.biz/faq/linux-unix-apache-lighttpd-phpini-disable-functions/

http://www.webhostgear.com/319.html

票数 4
EN

Server Fault用户

发布于 2011-03-03 07:45:53

Apache本身不能“执行”bash脚本或命令。我认为您真正要问的问题是,“如何防止PHP执行shell命令?”

不幸的是,这里的另外两个答案是不正确的,为实现这一点提供了不充分的解决方案。

open_basedir只影响哪些文件可以通过PHP打开,例如通过fopen()打开。您可以测试仍然可以使用以下简单代码执行shell命令:

代码语言:javascript
复制
<?php
ini_set('open_basedir', '/tmp');
system('ls');

要真正限制PHP能执行什么样的shell命令,您必须使用安全模式。但是,您应该知道,PHP5.3中不推荐使用安全模式,并且肯定会在以后的版本中删除。启用安全模式限制对“不安全”功能的数目的访问,特别是exec()system()passthru()

然而,您应该再次意识到,安全模式的使用是非常不鼓励的。

一旦删除了安全模式,您将不再拥有限制PHP可以执行哪些命令的手段。

票数 3
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/236627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档