2012-06-10 104 views
0

我正在這個時候發表論壇。在將數據發送到mySQL之前,我如何清理數據?

我想在將數據發送到MySQL數據庫之前清理我的輸入數據(即來自用戶的帖子)。

我已經一直在尋找一些功能來做到這一點,但我不確定我是否已經使用了足夠的功能,以及它們是否足夠安全。歡迎任何建議。

這裏是我的代碼:

$message=$_POST['answer']; 
$message=nl2br($message); //adds breaks to my text 
$message=stripslashes($message); //removes backslahes (needed for links and images) 
$message=strip_tags($message, '<p><a><b><i><strong><em><code><sub><sup><img>'); //people can only use tags inside 2nd param 
$message = mysql_real_escape_string($message); //removes mysql statements i think (not sure) 

編輯:請告訴我,如果我要補充一些標籤來用strip_tags功能。也許我已經忘記了一些。

+2

[當數據庫插入(http://stackoverflow.com/questions/60174/best-way-to-prevent- sql-injection-in-php)以及[在頁面上顯示數據](http://php.net/manual/en/function.htmlspecialchars.php)。 – PeeHaa

+0

仍然允許XSS的屬性如'' – Gumbo

+2

由於你的評論說你不確定'mysql_real_escape_string()'做了什麼,你應該[閱讀它的文檔](http://php.net/manual/en/function。 mysql-real-escape-string.php),當你在這裏時,[閱讀關於SQL注入](http://en.wikipedia.org/wiki/Sql_injection)來理解爲什麼這是如此重要。 –

回答

2

請嘗試使用PDO。它具有很強的綁定功能,真正提高了安全性。以下是一些示例:http://php.net/manual/pl/pdostatement.bindvalue.php

PDO默認情況下是PHP5,所以這些日子幾乎到處都是。

+0

酷,但我有4.4.9 -.-; s –

+0

如果你使用php5.3 +編寫自己的應用程序。 –

+0

我使用的是主機服務器,但它來自我的朋友,所以我不能聯繫他們 –

-1

當您保存到數據庫:

$message=strip_tags($message, '<p><a><b><i><strong><em><code><sub><sup><img>'); //people can only use tags inside 2nd param 
$message = mysql_real_escape_string($message); //removes mysql statements i think (not sure) 

當你輸出:

$message=nl2br($message); //adds breaks to my text 
$message=stripslashes($message); //removes backslahes (needed for links and images) 

此外,使用htmlspecialchars當你寫到像texttextarea

OBS HTML輸入元素:唐不要重新發明輪子。學習一些PHP框架,如codeigniter,它提供了非常安全的方式來管理數據。 。

1

如果您想允許在論壇中使用有限的HTML(如您使用strip_tags()所示),請使用HTMLPurifier;否則你很容易在這些標籤的屬性中使用javascript。

順便說一句,現在你正在剝你已經添加了<br>標籤

相關問題