2012-03-19 79 views
2

當輸入存儲在會話cookie中時,我是否需要做特殊的事情來保護自己免受來自textarea的用戶輸入?針對用戶textarea輸入的保護

我賣的產品可以刻有自定義文本。用戶「假定」輸入他們想要刻在textarea中的文本,並且該文本與他們選擇的項目一起存儲在會話cookie中,其他一些數據。

現在,我在使用nl2br將其存儲在會話cookie中,然後在將其顯示回頁面時使用了反斜槓。

我是否需要做其他事情來保護自己免受惡意代碼(即流行性等)的侵害?

感謝您的輸入(沒有雙關語意!)

+0

那麼只要你沒有遇到問題,你爲什麼要問?你知道你在做什麼,是嗎? – hakre 2012-03-19 18:33:38

+0

它的工作原理,我只是不知道是否讓我自己打開任何黑客攻擊等。 – JROB 2012-03-19 18:34:59

+1

你怎麼可能?如果您通過某些字符串,雕刻機可能會存在安全問題。你在使用哪種模式? – hakre 2012-03-19 18:36:33

回答

4

驗證輸入,如果你只想允許某些字符,如az 0-9。如果你不想像<>這樣的字符,那麼驗證。

作爲一般的經驗法則,存儲輸入時的輸入,並在打印到頁面或其他介質之前進行任何處理。通過處理,我的意思是運行它通過nl2br()htmlentities()

通常最好將數據存儲爲中性格式,即未針對HTML等進行處理,因爲您可能希望將數據輸出爲其他格式,如XML,Web服務,在這種情況下,需要將數據處理不同。

將它存儲在會話變量中,而不是cookie。會話變量存儲在服務器上,不能被瀏覽器或任何其他人訪問。如果您將其存儲在cookie中,則可能會被篡改,並且每次您想要訪問時都必須重新驗證輸入,因爲它可能已更改。

如果最終將數據存儲在數據庫中,則需要將其轉義以進行SQL注入。它的方法將根據使用哪個庫來與數據庫進行交互而有所不同,但參數化查詢或預準備語句是可取的。

+0

「以中立形式存儲​​數據」 - 偉大的一點! +1 – Philip 2012-03-19 19:16:07

+0

以中性形式存儲數據確實意味着每個顯示該數據的人都必須a)意識到數據可能是惡意的,並且b)每次都要執行安全權限。但之前我已經處理過爲HTML處理過的數據,我認爲你是對的。 – Noumenon 2017-01-31 19:52:25

2

攻擊的第一個最明顯的機會將是直接的HTML輸入。想象一下,有人在您的textarea中輸入<script src="http://malicious.com/ddos.js" />。您的PHP代碼是否會以可以運行.js代碼的方式輸出?

二,數據如何到達雕刻機?最常見的情況是將其存儲在數據庫中供以後使用,或者通過電子郵件發送給雕刻機的工作隊列。

如果您要將數據庫放入數據庫,您需要查看可處理清潔輸入的PDO等包裝。

如果您通過電子郵件發送給自己或其他人,那麼您需要注意避免將危險信息放在那裏。我相信PHP的mail()函數將自動保持$message不會更改標題。 http://www.php.net/manual/en/function.mail.php

如果您有其他方法,請告訴我們並且可能存在其他問題。

1

在顯示textarea框中的變量之前,您應該運行htmlspecialchars()

這將確保可能邪惡的HTML代碼安全地顯示在textarea內部而不是被執行。

您顯示變量的所有其他地方,例如。在電子郵件或管理界面中,您還應該在其上運行htmlspecialchars()

同樣,如果要保存到數據庫中,還記得要將變量轉義出來,這樣人們就不會惹惱你的數據庫查詢。

(一種可供選擇的方法做在顯示器htmlspecialchars(),將運行在用戶的輸入strip_tags()它存儲在會話變量之前。但顯示上消毒輸入如上建議的是一種思維更健壯的方式,恕我直言。)