2014-02-12 117 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]'' –