首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sprintf()如何防止SQL注入?

sprintf()如何防止SQL注入?
EN

Stack Overflow用户
提问于 2011-07-11 14:58:01
回答 4查看 16.3K关注 0票数 6

我听说sprintf()可以防止SQL注入。是真的吗?如果是这样的话,是怎么做的?

为什么人们推荐写这样的查询:

代码语言:javascript
复制
$sql = sprintf('SELECT * FROM TABLE WHERE COL1 = %s AND COL2 = %s',$col1,$col2);
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-11 15:03:42

sprintf不会保护你!它只是取代了%s

您必须mysql_real_escape_string so:

代码语言:javascript
复制
$sql = sprintf('SELECT * FROM TABLE WHERE COL1 = "%s" AND COL2 = "%s"',
mysql_real_escape_string($col1),
mysql_real_escape_string($col2));

是更安全的注射

注意:我建议您看看PDO,它是我喜欢用于DBconections和查询的工具

票数 10
EN

Stack Overflow用户

发布于 2011-07-11 15:01:11

这不会有任何保护作用。使用sprintf使代码更具可读性,然后在字符串中插入和删除,以便在每个变量…上运行mysql_real_escape_string但是,该示例不会逃脱最后的变量,因此失去了优势。

如果你想要像样的保护,使用提供bound parameters的东西。

票数 9
EN

Stack Overflow用户

发布于 2011-07-11 15:04:32

使用sprintf可以防止数值字段的SQL注入:

代码语言:javascript
复制
$sql = sprintf("SELECT * FROM table WHERE col1 = %i", $col1);

通过以这种方式使用$col1,您可以确保将sprintf转换为整数--尽管如果它不是真正的整数,它可能会生成错误或警告。

防止SQL注入的正确方法是检查所有输入值,然后进行转义。但这在其他问题中涉及得更透彻,所以我不会在这里详细介绍。

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

https://stackoverflow.com/questions/6646731

复制
相关文章

相似问题

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