【发布时间】:2012-06-13 17:34:03
【问题描述】:
我正在做一个论坛。
我想在将输入数据(即来自用户的帖子)发送到 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 函数添加一些标签。也许我忘记了一些。
【问题讨论】:
-
在
<img onerror="…">等属性中仍然允许XSS -
既然你的评论说你不确定
mysql_real_escape_string()做了什么,你应该read its documentation 并且当你在它的时候,read about SQL injection 来理解为什么这很重要。 -
@jannesbraet 刚刚阅读了我发布的链接
-
nl2br() 用于帮助控制输出到 HTML 块。 stripslashes() 基本上没有真正的价值,它有助于“撤消”(坏的)输出转义,以前可能已经应用过(对 Javascript 块中的字符串最有用)。 strip_tags() 是一种试图避免跨站点脚本的穷人方式,它只在一个特定的 HTML 输出上下文中有效。这三个功能都与数据库无关,只会破坏您的数据。
标签: php mysql security sanitization