2014-02-12 84 views
0

我正在考虑实施差异化的不同方法。这可以是我可以在PHP中从头开始编写wdiff,也可以在wdiff上运行shell_exex(),并使用两个文件返回字符串,解析它的标记并进行相应的替换。我只是担心允许在shell上执行代码的安全性,就像我已经解释的那样。假设所有传递给wdiff的字符串都是用户输入,在任何规范下都不可信任。PHP shell_exec - 它是否安全?

现在,我知道我可以使用像FineDiff这样的库,但老实说,我宁愿使用UNIX原生wdiff,但担心shell_exec总是容易受到任意代码注入,shell代码执行等的影响。使用?

+0

“允许在shell上执行代码的安全性”---您不执行任意代码,而是执行具有2个参数的已知命令。你需要的仅仅是验证/清理路径。 – zerkms

+0

你确实执行了任意代码。两个参数(两个不同的字符串)在理论上是用户输入的,所以你现在看到了这个问题? –

+0

我没有看到问题,因为它们不是任意字符串,而是文件系统路径。你只要检查它是否是一个文件,它是可读的,你很好,是吗? – zerkms

回答

0

如果可以,请阻止shell_exec()

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

shell_exec("wdiff params[1] params[2]"); 
//can be translate to 
shell_exec("wdiff /file1 /file2;echo /etc/passwd"); 
+0

任何更好的替代? –

+0

添加正确的转义特殊字符或限制输入正则表达式''[A-ZA-Z0-9]'' –