嗨,我打算讓用戶能夠提交一些代碼段(php,java,javascript C++等等......他們想要的任何我的意思)。使用戶能夠提交代碼在php中替換什麼?
因此,任何人都可以建議我最好的做法,以使其對我的網站安全嗎? :))
我的意思是哪些標籤/字符/字符串在PHP中一次逃脫提交代碼字符串?
嗨,我打算讓用戶能夠提交一些代碼段(php,java,javascript C++等等......他們想要的任何我的意思)。使用戶能夠提交代碼在php中替換什麼?
因此,任何人都可以建議我最好的做法,以使其對我的網站安全嗎? :))
我的意思是哪些標籤/字符/字符串在PHP中一次逃脫提交代碼字符串?
在查詢中使用佔位符,您甚至不必轉義輸入。 佔位符,綁定和準備好的語句絕對是首選的方法。
對於超過1個查詢的任何事情都會更快,因爲您可以重複使用這些句柄並更改輸入。
更安全。該字符串不會被查詢...解釋過。你存儲的是你得到的。
我需要知道更多的關於您的目標SQL給相關的例子,但這裏的一些鏈接:
PDO風格結合:http://docs.php.net/pdo.prepared-statements
mysqli的風格結合:http://docs.php.net/manual/en/mysqli-stmt.bind-param.php
當你讀回來,用
htmlspecialchars($string, ENT_QUOTES);
ENT_QUOTES選項確保單曲和雙曲otes得到逃脫。
如果您的目的是在屏幕上顯示代碼,則在將其存儲到數據庫(如果您打算存儲它)之前,不需要轉義或替換任何東西。當然,這並不適用於通過諸如mysql_real_escape_string()
之類的數據庫(或您的RDBMS的等效清理例程)轉義數據庫插入。這一步仍然是絕對必要的。
當顯示的代碼,只要確定:
你不通過eval()
或系統調用評估任何提交的代碼。
將代碼顯示回瀏覽器時,請使用htmlspecialchars()
進行轉義。永遠不要顯示它,否則你會引入跨站點腳本漏洞。
如果你不打算自動運行它,你不需要轉義任何東西(除了通常的mysql衛生)。
我不是專家(我昨天才知道這件事),但至少對於HTML,你可以嘗試使用htmlentities(請看this)。 使用htmlentities轉換了某些內容後,它會變成純文本,所以如果在瀏覽器中打開它,您將看到標籤和所有內容(例如,它將寫入<a href="blah blah">
),如果將其寫入日誌或其他內容,然後打開在基於文本的編輯器中,您將會使用一些代表html實體的符號和標籤。
如果您需要轉換回來,您可以使用html_entity_decode函數,我想,但我會下注猜測並假定您不需要轉換回來。
對於其他語言,我不知道你應該做什麼。
你想用該代碼做什麼?你會運行它嗎? – kapa
顯示...對不起:P – sbaaaang