2011-02-13 63 views
2

我有一個2 textareas表單;第一個允許用戶發送HTML代碼,第二個允許發送CSS代碼。如果語言正確,我必須使用PHP函數進行驗證。驗證代碼語言的PHP函數

如果語言是正確的,爲了安全起見,我必須檢查是否沒有PHP代碼或SQL注入或其他。

您認爲如何?有沒有辦法做到這一點 ? 我在哪裏可以找到這種功能?

「HTML Purifier」http://htmlpurifier.org/是一個很好的解決方案嗎?

+0

你是怎麼驗證的?不可能在沒有看到一些代碼的情況下回答 – 2011-02-13 14:52:24

+2

@Pekka對我來說這似乎很清楚。用戶輸入假定的HTML和CSS代碼。程序必須驗證輸入實際上是HTML和CSS,並且不包含非HTML或CSS的內容,包括PHP代碼。 – 2011-02-13 14:55:09

+0

@Dan但他沒有回答他正在使用什麼函數來做到這一點 - 以及PHP代碼或SQL注入的存在實際上是否會成爲問題 – 2011-02-13 14:56:10

回答

0

是的。 htmlpurifier是一個很好的工具,可以清除惡意腳本並驗證您的HTML。 不要以爲它會做CSS。 顯然它也適用於CSS。謝謝Briedis。

0

對於可以使用正則表達式的某些原語,但應該注意使用解析器來完全排除所有可能性。

/(<\?(?:php)?(.*)\?>)/i 

實施例:http://regexr.com?2t3e5(在表達式改變&lt;<,它會工作(由於某種原因,rexepr改變其到HTML格式))

EDIT

/(<\?(?:php)?(.*)(?:\?>|$))/i 

這可能會更好,所以他們不能在文檔的末尾放置php(因爲PHP實際上並不需要終止字符)

0

HTMLPurifier是推薦用於清理HTML的工具。幸運的是,它也包含CSSTidy,並且可以淨化CSS。

......沒有PHP代碼或SQL注入等等。

你是基於錯誤的前提你的問題。雖然可以清除HTML,但這並不能防範其他漏洞攻擊。 PHP「標籤」最有可能被過濾掉。如果你正在做一些神祕的東西(包括-ING或部分EVAL-ING的內容),這是沒有真正的幫助。
和SQL漏洞只能通過meticously使用適當的數據庫逃生功能來防止。沒有什麼神奇的解決方案。

1

如果你有驗證日期在將它們插入到數據庫 - 那麼你只需要到數據庫插入之前使用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 
0

好的,謝謝大家。

實際上,我意識到我需要人工驗證。用戶可以發佈HTML + CSS,我可以在PHP中驗證語言的語法是否正確,但是它不會避免人們發佈iframe,html重定向或大黑色的div來接受所有屏幕。

:-)