安全的mysql表单数据

时间:2011-03-16 17:51:18

标签: php mysql

我一直在使用:

if ($_POST['Comments']!=""){
  $comments = mysql_real_escape_string($_POST['Comments']);
}else{
  $comments = "";
}
自从用户添加并篡改他们的数据并且它破坏了我的sql语句以来。我认为这也同时保护了数据。但刚才我收到了一份提交内容,并在数据库的评论栏中看到:

 /r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r
<a href="http://seowebsite.com">seohelp</a>

当有人提交时,我收到的电子邮件中包含链接的文本实际上正在运行。

我认为mysql_real_escape_string()应该摆脱所有这些?

有什么建议吗?我正在考虑做一个功能,在几个不同的步骤中为我做所有的字符串清理。但是,如果有一种方法可以在一步中获得保障,那就太棒了。

1 个答案:

答案 0 :(得分:2)

mysql_real_escape_string()仅保护 * 免受SQL注入攻击,而不是针对跨站点脚本(XSS)。

* mysql_real_escape_string()SET NAMES一起使用时表现不正常,因为它不知道正在使用的字符集。请改用mysql_set_charset()


为了保护自己免受XSS攻击,您还必须在插入时(htmlentities()之前)或在显示时使用htmlspecialchars()mysql_real_escape_string()

$escaped = htmlspecialchars($string, ENT_QUOTES, 'UTF-8');

如果您想允许某些 HTML内容,请使用HTML Purifier以及您要允许的元素和属性的白名单。