我现在正在建立一个论坛。
我希望在将输入数据(即用户的帖子)发送到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函数中添加一些标签。也许我已经忘记了一些。
答案 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)
此外,在写入text
或textarea
OBS:不要重新发明轮子。学习一些像codeigniter这样的PHP框架,它提供了非常安全的数据管理方法。