在将数据发送到mySQL之前,如何清理用户的数据?

时间:2012-06-10 14:28:35

标签: php mysql security sanitization

我现在正在建立一个论坛。

我希望在将输入数据(即用户的帖子)发送到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函数中添加一些标签。也许我已经忘记了一些。

3 个答案:

答案 0 :(得分:2)

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

PDO默认情况下是PHP5,所以现在几乎无处不在。

答案 1 :(得分:1)

如果您想允许在论坛中使用有限的HTML(正如您使用strip_tags()所示),请使用HTMLPurifier;否则你很容易在这些标签的属性中使用javascript。

顺便说一句,您现在正在剥离您添加的<br>代码

答案 2 :(得分:-1)

保存到DB时:

$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)

此外,在写入texttextarea

等html输入元素时,请使用htmlspecialchars

OBS:不要重新发明轮子。学习一些像codeigniter这样的PHP框架,它提供了非常安全的数据管理方法。