Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP shell_exec-安全吗?_Php - Fatal编程技术网

PHP shell_exec-安全吗?

PHP shell_exec-安全吗?,php,Php,我正在考虑实现差异的不同方法。要么我可以用PHP从头开始编写wdiff,要么我可以用两个文件运行wdiff,返回字符串,解析它的标记并适当替换。我只是担心允许代码在shell上执行的安全性,正如我所解释的。假设将传递给wdiff的所有字符串都是在任何情况下都不可信的用户输入 现在,我知道我可以使用FineDiff之类的库,但老实说,我宁愿使用UNIX本机wdiff,但我担心shell_exec总是容易受到任意代码注入、shell代码执行等的攻击。使用它安全吗?如果可以,请防止shell_exec

我正在考虑实现差异的不同方法。要么我可以用PHP从头开始编写wdiff,要么我可以用两个文件运行wdiff,返回字符串,解析它的标记并适当替换。我只是担心允许代码在shell上执行的安全性,正如我所解释的。假设将传递给
wdiff
的所有字符串都是在任何情况下都不可信的用户输入

现在,我知道我可以使用FineDiff之类的库,但老实说,我宁愿使用UNIX本机wdiff,但我担心shell_exec总是容易受到任意代码注入、shell代码执行等的攻击。使用它安全吗?

如果可以,请防止
shell_exec()

如果输入未转义或消毒。这可能是造成问题的原因。 例如


那么我们也不应该在网络上有表单,因为,嘿,用户也可能会用这些表单做错事

关键是,如果您有足够的信心使用字符串转义来允许HTML表单,那么在使用命令行之前,您还必须知道自己在做什么:

消毒-这是最重要的问题;支持限制可能的值范围

回声-此处的有效点,可通过
ob\u start
功能处理

删除、重命名和执行其他程序——如果这是一个问题,那么您会遇到更深层次的问题,因为php系统用户应该限制其功能


但是,同样,如果您可以编写代码来清理用户表单,那么您也可以清理您的输入。

“允许在shell上执行代码的安全性”-您不会执行任意代码,而是执行具有2个参数的已知命令。您需要的只是验证/清理路径。实际上,您确实执行任意代码。这两个参数(两个不同的字符串)在理论上是用户输入,所以您现在看到问题了吗?我没有看到问题,因为它们不是任意字符串,而是文件系统路径。你只要检查一下它是否是一个文件,是否可读,然后你就没事了,不是吗?我首先要写两个文件。包含旧字符串且包含新字符串的字符串。是否存在发送到wdiff的不安全代码(字符串)的可能性,或者这完全超出了PHP?是否有更好的替代方法?为特殊字符添加适当的转义符,或者使用regexp
[a-Za-z0-9]
shell_exec("wdiff params[1] params[2]");
//can be translate to
shell_exec("wdiff /file1 /file2;echo /etc/passwd");