我一直在使用:
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/