0

我正在做一个论坛。

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

4

3 回答 3

2

尝试改用 PDO。它具有强大的绑定功能,真正提高了安全性。这里有一些例子: http: //php.net/manual/pl/pdostatement.bindvalue.php

PDO 在 PHP5 中是默认的,现在几乎无处不在。

于 2012-06-10T14:41:20.293 回答
1

如果您想允许在论坛中使用有限的 HTML(如您使用 strip_tags() 的方式所见),请使用HTMLPurifier;否则,您在这些标签的属性中很容易受到 javascript 的攻击。

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

于 2012-06-10T19:51:44.187 回答
-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)

此外,当您写入 html 输入元素时使用htmlspecialcharstexttextarea

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

于 2012-06-10T14:43:03.863 回答