我一直在使用:

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()应该摆脱所有这些?

有什么建议么?我当时正在考虑做一个函数,可以通过几个不同的步骤为我完成所有字符串清洗。但是,如果有一种方法可以确保一步之遥,那就太好了。

最佳答案

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

关于php - mysql的安全表单数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5329525/

10-14 13:06
查看更多