2012-02-28 99 views
1

我有這樣一個頁面。用戶在表單中寫入URL並提交。一旦URL被提交,我用CURL連接那個頁面,搜索一個字符串。如果找到該字符串,它會將URL添加到我們的數據庫中。如果不是,則會給用戶一個錯誤。PHP:使用CURL時的安全性?

我使用htmlspecialchars()也是一個正則表達式來清理URL,以允許A-Z,1-9,:/ - 。符號。我也用htmlspecialchars()來清理從其他網站檢索的內容。

我的問題是,他們可以輸入一個URL像; www.evilwebsite.com/shell.exe或shell.txt

PHP會運行它,還是隻是尋找HTML輸出?它是否安全?如果不是,我該怎麼辦?

謝謝。

Ps。 allow_url_fopen被禁用。這就是爲什麼我使用捲曲。

回答

5

我不明白爲什麼htmlspecialchars或正則表達式在這裏是必要的,你不需要這些。此外,PHP不會「自動」解析使用cURL檢索的內容。所以是的,這是保存(除非你輸出像eval這樣的東西)。

但是,稍後處理檢索到的內容時,請注意輸入是用戶提供的,需要相應處理。

+0

實際上,我對檢索到的內容所做的唯一工作就是進行基本的正則表達式掃描。例如,如果檢索到的內容在任何地方都包含「Hello」文本,則會將該URL插入到數據庫中。如果不是,則會出現用戶錯誤,如「在該頁面中找不到Hello text」。在掃描「Hello」文本時,我應該採取哪些步驟? – Aristona 2012-02-28 03:23:12

+0

@AnılÜnal:不,這非常安全。但是你仍然應該放棄這種不必要的消毒,它可能會破壞某些URL並導致拒絕服務。 – 2012-02-28 03:24:59

+0

htmlspecialchars()並不能拯救你從eval的眼睛:-)我認爲他的觀點是爲了防止XSS。 – 2013-02-11 13:50:02

1

curl發出請求並向服務器發送回數據。如果在Web服務器上有一個可執行文件,則會返回該文件的二進制文件。除非您將文件寫入磁盤並執行,否則應該沒有問題。這個意義上的安全不應該成爲問題。

+0

除非您發現服務器正在使用的cURL版本或PHP腳本解析它的一些漏洞,此時您可以完全控制數據傳輸(如果您託管提供的URL) – 2012-02-28 03:19:51

+0

那麼您如何處理數據可能會導致安全漏洞,但cURL不應該。我能想到的唯一漏洞是緩衝區溢出,但PHP處理和防止這種漏洞。你在想什麼樣的漏洞? – 2012-02-28 03:23:46

+0

@Patrick:PHP處理和防止這種情況?這對我來說是新聞。此外,還存在其他類型的漏洞,特別是在像PHP這樣的軟件中。但是這與問題實際上沒有關係,因爲在沙盒裝你的網絡服務器之前,你無法對付這種風險。 – 2012-02-28 03:26:45