2012-04-11 68 views
1

我有一個簡單的問題。用戶提供URL到我的PHP腳本中,從URL獲取頁面並解析它並向用戶顯示一些片段。現在我想清理或更好地轉義URL,因此使用file_get_contents()來獲取它是安全的。如何安全地轉義要在file_get_contents中使用的用戶輸入的URL?

我的簡化代碼如下所示:

$url = $_POST['url']; 
$html = file_get_contents($url); 

什麼來到我的腦海裏的第一件事就是用正則表達式追趕邪惡的網址,但我不認爲它是有效的,更好的將是逃脫了整個URL。但是,我可以使用哪些PHP函數來轉義URL以便在file_get_contents()函數中使用?

+3

「逃離」是沒用在這裏。您正在尋找*驗證*。 – deceze 2012-04-11 08:12:15

回答

2

您可以簡單地要求網址以http://https://開頭。

幸運的是,PHP足夠聰明,不會跟隨重定向到file:// url。
但是,它確實跟隨重定向到ftp://網址,所以你最好確保你的服務器不能訪問任何內部的FTP服務器沒有身份驗證。

+2

最後的聲明應該更好地進行測試...... :) – deceze 2012-04-11 08:13:03

+0

@ThiefMaster請您爲您的答案提供一些參考鏈接(例如,PHP不在'file://'後面)嗎? – Frodik 2012-04-11 08:50:27

+1

@Frodik:我測試了它。 – ThiefMaster 2012-04-11 10:08:22

相關問題