我有一個2 textareas表單;第一個允許用戶發送HTML代碼,第二個允許發送CSS代碼。如果語言正確,我必須使用PHP函數進行驗證。驗證代碼語言的PHP函數
如果語言是正確的,爲了安全起見,我必須檢查是否沒有PHP代碼或SQL注入或其他。
您認爲如何?有沒有辦法做到這一點 ? 我在哪裏可以找到這種功能?
「HTML Purifier」http://htmlpurifier.org/是一個很好的解決方案嗎?
我有一個2 textareas表單;第一個允許用戶發送HTML代碼,第二個允許發送CSS代碼。如果語言正確,我必須使用PHP函數進行驗證。驗證代碼語言的PHP函數
如果語言是正確的,爲了安全起見,我必須檢查是否沒有PHP代碼或SQL注入或其他。
您認爲如何?有沒有辦法做到這一點 ? 我在哪裏可以找到這種功能?
「HTML Purifier」http://htmlpurifier.org/是一個很好的解決方案嗎?
是的。 htmlpurifier是一個很好的工具,可以清除惡意腳本並驗證您的HTML。
不要以爲它會做CSS。
顯然它也適用於CSS。謝謝Briedis。
對於可以使用正則表達式的某些原語,但應該注意使用解析器來完全排除所有可能性。
/(<\?(?:php)?(.*)\?>)/i
實施例:http://regexr.com?2t3e5(在表達式改變<
回<
,它會工作(由於某種原因,rexepr改變其到HTML格式))
EDIT
/(<\?(?:php)?(.*)(?:\?>|$))/i
這可能會更好,所以他們不能在文檔的末尾放置php(因爲PHP實際上並不需要終止字符)
SHJS syntax highlighter for Javascript對於突出顯示的語言,有正則表達式http://shjs.sourceforge.net/lang/的文件 - 您可以檢查SHJS如何解析代碼。
HTMLPurifier是推薦用於清理HTML的工具。幸運的是,它也包含CSSTidy,並且可以淨化CSS。
......沒有PHP代碼或SQL注入等等。
你是基於錯誤的前提你的問題。雖然可以清除HTML,但這並不能防範其他漏洞攻擊。 PHP「標籤」最有可能被過濾掉。如果你正在做一些神祕的東西(包括-ING或部分EVAL-ING的內容),這是沒有真正的幫助。
和SQL漏洞只能通過meticously使用適當的數據庫逃生功能來防止。沒有什麼神奇的解決方案。
如果你有驗證日期在將它們插入到數據庫 - 那麼你只需要到數據庫插入之前使用mysql_real_escape_string()函數。
//Safe database insertion
mysql_query("INSERT INTO table(column) VALUES(".mysql_real_escape_string($_POST['field']).")");
如果你想將數據輸出到最終用戶爲純文本 - 那麼你必須用htmlspecialchars逃避所有的HTML字符敏感()。如果你想以HTML格式輸出,你必須使用HTML Purify工具。
//Safe plain text output
echo htmlspecialchars($data, ENT_QUOTES);
//Safe HTML output
$data = purifyHtml($data); //Or how it is spiecified in the purifier documentation
echo $data; //Safe html output
好的,謝謝大家。
實際上,我意識到我需要人工驗證。用戶可以發佈HTML + CSS,我可以在PHP中驗證語言的語法是否正確,但是它不會避免人們發佈iframe,html重定向或大黑色的div來接受所有屏幕。
:-)
你是怎麼驗證的?不可能在沒有看到一些代碼的情況下回答 – 2011-02-13 14:52:24
@Pekka對我來說這似乎很清楚。用戶輸入假定的HTML和CSS代碼。程序必須驗證輸入實際上是HTML和CSS,並且不包含非HTML或CSS的內容,包括PHP代碼。 – 2011-02-13 14:55:09
@Dan但他沒有回答他正在使用什麼函數來做到這一點 - 以及PHP代碼或SQL注入的存在實際上是否會成爲問題 – 2011-02-13 14:56:10