2011-10-26 73 views
0

我使用「乾淨」的網址是這樣的(相結合的清潔網址查詢字符串) (2)等...PHP的安全建議

但是,有些時候我認爲我需要將它們與查詢字符串結合起來。 例如:如果我需要一個包含路徑參數值與幾個斜線,如:

http://localhost/controller/action/param?mypath=foo/bar/qux.jpg 

我這樣做,因爲這將是一個有點難以實現,如果用乾淨的URL來完成。

現在的問題是,在合併乾淨的URL與查詢字符串,我只打算讓這個人物類:

[.&=a-z0-9\/_-] 

我不知道會不會有任何安全問題呢?我是否應該禁止某些角色?

+3

我認爲你不必擔心斜槓和字符,更多的是關於你如何處理這條路徑。如果我將路徑變量更改爲../../../etc/passwd,該怎麼辦?查找路徑消毒 – Ashley

+1

你將如何處理查詢參數的值?字符串本身不會構成安全風險。 – millimoose

+0

@Inerdia在上面的例子中,mypath的值將被unlink()刪除; – IMB

回答

0

不介意字符串格式化,但請驗證通過的路徑......在上例中,「在上例中,mypath的值將被unlink();」刪除,如果不在最壞的情況下驗證它可以刪除服務器的文件系統上的任何文件...;)

所以不要擔心用正則表達式驗證字符串,但驗證字符串的內容並使它對你的環境是安全的...... :)

+0

這足夠嗎?如果(strpos($ _ GET ['mypath'],'foo/bar')=== false)die('invalid');' – IMB

+0

取決於你想做什麼,但這是一個開始;) – Napolux

+0

您提到我不應該打擾使用正則表達式進行驗證,但是如果我堅持使用乾淨的URL而不使用任何查詢字符串,那麼使用正則表達式驗證會是一個好主意,還是仍然沒用? – IMB