首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这行PHP代码足够防止MySQL注入吗?

问这行PHP代码足够防止MySQL注入吗?
EN

Stack Overflow用户
提问于 2010-07-29 17:39:04
回答 4查看 985关注 0票数 3

我有以下代码,它通过PHP向我的MySQL数据库添加一条记录: Contact只是一个普通字符串。

代码语言:javascript
复制
$contact = mysql_real_escape_string(stripslashes($_POST["contact"]), $con); 
$sql="INSERT INTO custom_downloads (contact) VALUES ('$contact')";

这足以防止任何类型的SQL注入攻击吗?我还能做些什么来清理数据呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-07-29 18:01:35

bluebit,您的代码在防止注入方面是安全的,但在防止SQL (跨站点脚本)之类的事情时就不安全了。这是将 Javascript 传递到此字段的能力,然后当您输出它时,您就是在输出Javascript。

要避免这种情况,您可以通过条带标签()www.php.net/_strip_tags()运行您的输入。这将从您的输入中删除所有标签,从而消除

下面是一个很好的函数,您可以对从$_POST接收并希望保护的所有输入进行重用

代码语言:javascript
复制
$cleanInput = cleanPost($_POST['contact']);

function cleanPost($item) {
    return mysql_real_escape_string(strip_tags(stripslashes($item)));
}

在PHP中还有一个名为filter_var()的内置函数,它允许您指定是否要删除等,就像strip_tags()一样

希望你能意识到你需要防范SQL注入和XSS。

票数 3
EN

Stack Overflow用户

发布于 2010-07-29 17:41:00

是的,mysql_real_escape_string将正确地对字符串进行转义,因此这是安全的。

票数 4
EN

Stack Overflow用户

发布于 2010-07-29 17:42:14

您永远不能确定contact是否为普通字符串--它来自"out there",这会自动使其不安全。你永远不应该相信不安全的输入,因此参数化查询是唯一的办法。

参见this article。诚然,它涵盖了一个不常见的情况,但最好是安全的,而不是遗憾。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3361097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档