我有以下代码,它通过PHP向我的MySQL数据库添加一条记录: Contact只是一个普通字符串。
$contact = mysql_real_escape_string(stripslashes($_POST["contact"]), $con);
$sql="INSERT INTO custom_downloads (contact) VALUES ('$contact')";这足以防止任何类型的SQL注入攻击吗?我还能做些什么来清理数据呢?
发布于 2010-07-29 18:01:35
bluebit,您的代码在防止注入方面是安全的,但在防止SQL (跨站点脚本)之类的事情时就不安全了。这是将 Javascript 传递到此字段的能力,然后当您输出它时,您就是在输出Javascript。
要避免这种情况,您可以通过条带标签()www.php.net/_strip_tags()运行您的输入。这将从您的输入中删除所有标签,从而消除
下面是一个很好的函数,您可以对从$_POST接收并希望保护的所有输入进行重用
$cleanInput = cleanPost($_POST['contact']);
function cleanPost($item) {
return mysql_real_escape_string(strip_tags(stripslashes($item)));
}在PHP中还有一个名为filter_var()的内置函数,它允许您指定是否要删除等,就像strip_tags()一样
希望你能意识到你需要防范SQL注入和XSS。
发布于 2010-07-29 17:41:00
是的,mysql_real_escape_string将正确地对字符串进行转义,因此这是安全的。
发布于 2010-07-29 17:42:14
您永远不能确定contact是否为普通字符串--它来自"out there",这会自动使其不安全。你永远不应该相信不安全的输入,因此参数化查询是唯一的办法。
参见this article。诚然,它涵盖了一个不常见的情况,但最好是安全的,而不是遗憾。
https://stackoverflow.com/questions/3361097
复制相似问题