2010-11-23 29 views
0

我正在構建一個評論網站,允許用戶提交將存儲在MySQL數據庫中的評論。評論將由我手動審查內容,然後顯示在我的網站上。這裏是我的清洗數據的自定義功能(表單上的每個項目傳遞給此功能):對我的表單安全性的意見提交/顯示

function cleanDataForDB($data) { 
$data = trim(htmlentities(strip_tags($data))); 

if (get_magic_quotes_gpc()) 
    $data = stripslashes($data); 

$data = mysql_real_escape_string($data); 

return $data; 

}

一旦被批准我沒有寫腳本來顯示評論但是我打算只是通過html_entity_decode()函數從我的MySQL表中傳遞所有字段並將它們寫入我的頁面的HTML。

有沒有人在這個計劃中看到任何明顯的安全漏洞?這對我來說似乎很安全,但這是我建立的第一個允許用戶提交數據的站點,所以我想確保我不會讓自己變得脆弱。

謝謝!

+0

魔術引號更正應該在一箇中心位置進行一次。有關`if(get_magic_quotes_gpc()){$ _POST = array_map(「stripslashes」,$ _POST); $ _GET ...}` – mario 2010-11-24 00:42:06

回答

1

在將數據放入數據庫之前,應該對數據進行數據庫轉義,並在將數據拉出時進行HTML轉義。這樣,你可以在將來處理用戶帖子中的HTML,而不會發現「哎呀,我把它弄壞了」。

轉義插入數據的最佳方法是使用PDO。

對於顯示數據,htmlentities可能就足夠了。

+0

`htmlspecialchars`通常更好,但也取決於*正確的字符集參數是有效的。 – mario 2010-11-24 00:44:31

+0

我不熟悉PDO,而且php.net手冊對這個主題不是很有幫助。你說這是我應該使用的東西,除了我已經使用的自定義功能?我認爲PDO以某種方式提供更強大的安全性? – Chris 2010-11-24 00:59:57

0

我同意Borealid,但是想補充一點,您可能希望使用preg_replace()來完全刪除任何JavaScript腳本,而不是僅僅從中剝離標籤。