首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP保护自己免受SQL注入?

问PHP保护自己免受SQL注入?
EN

Stack Overflow用户
提问于 2009-03-15 18:42:12
回答 4查看 539关注 0票数 0

当我将");--从输入字段发送到本地主机PHP服务器时,它会自动将其转换为

“);--

这似乎很棒,只是我不知道这种行为有多值得信赖。虽然它似乎避免了SQL注入,但我的开发环境与生产环境不一样,我担心生产环境可能不会自动激活这种保护.

为什么PHP要这样做(不需要使用mysql_real_escape_string来转换输入)?它总是这样做,还是只使用某些扩展?依靠这种行为来防止SQL注入安全吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-03-15 18:44:33

您似乎已经启用了魔术引号。但您最好禁用此选项或还原它们。mysql_real_escape_string更安全。

票数 6
EN

Stack Overflow用户

发布于 2009-03-15 18:52:16

PHP的这个“特性”被称为“魔术引号”。尽管它们可能是“魔法”,但使用它们是非常糟糕的做法,因为它们只不过是给人一种虚假的安全感而已。谢天谢地,它们已经从PHP 6中删除(正在开发中)。

在这个维基百科文章中可以找到更详细的批评清单。

PHP手册描述了实现禁用魔术引号的各种方法。

票数 1
EN

Stack Overflow用户

发布于 2009-03-15 19:43:58

您可能希望使用像数据库这样的抽象层来与数据库进行对话。例如,如果通过实例化Zend_Db_Select创建select语句,则如下所示:

代码语言:javascript
复制
//$_GET['thing'] is automatically escaped 
$select = $zdb->select()->from('things')->where('name = ?',$_GET['thing']);
$result = $zdb->fetchRow($select->__toString());//__toString generates a really pretty, vendor independent query

//a plain vanilla query would look like this:
$result = $zdb->fetchRow('select * from things where name = ?', $zdb->quote($_GET['thing']);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/648307

复制
相关文章

相似问题

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