首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止注射的参数?够了吗?应该在每个查询中使用它吗?

防止注射的参数?够了吗?应该在每个查询中使用它吗?
EN

Stack Overflow用户
提问于 2015-03-26 04:32:31
回答 1查看 48关注 0票数 0

通过长期的研究,我发现防止注入的参数是一个很好的实践,但是我应该在每个查询中还是仅仅在登录页面中使用它呢?为什么?

非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-26 05:09:01

代码应该始终使用为SQL.使用参数绑定。

数据来自何处并不重要;跳过这会导致http://en.wikipedia.org/wiki/SQL_injection#Second_Order_SQL_Injection SQL注入,或者出现“我忘记更新代码”的情况。只要一直使用SQL参数即可。

唯一的一般例外是当不能这样做时,例如当需要更改查询本身中的非数据时(例如。(表名)-在这种情况下,还有其他技术可以减轻SQL注入。

虽然是重要的基石,但参数绑定是“不够”的

根据定义,正确使用查询参数会阻止所有http://en.wikipedia.org/wiki/SQL_injection,但并不保证查询是安全的。

SQL注入是一种代码注入技术,用于攻击数据驱动的应用程序,其中恶意SQL语句被插入到入口字段中执行。

也就是说,虽然以下内容没有SQL注入,因为查询形状无法更改,但仍然不能保证查询是“安全的”或“安全的”。

代码语言:javascript
复制
$name_from_user = $_GET['name'];
prepare('SELECT nuke_code FROM secrets WHERE name = :name');
execute(array('name' => $name_from_user));

这显然是潜在的安全性(fsvo)风险,因为它在查询中使用了未使用/未验证的数据。在这种情况下,只信任来自服务器的数据或在执行查询之前由服务器验证的数据。

此外,SQL注入(因此也包括参数)不涵盖违反业务规则的行为。这些应该与“SQL的清理/验证”分开执行。希望代码使用DAL/BLL,这样逻辑就不会散落在几十个PHP文件中。

在回答基本问题时需要记住的是,使用SQL参数可以确保所提供的数据在不改变查询形状的情况下进入SQL。因此,应该始终使用它们--否则代码本身就会设置为失败。

我意识到“总是”和“只有”是绝对极端的,但我还没有在一般代码中找到这样的例子。如果底层驱动程序使用内部转义或真正的参数化查询,那么它也是无关紧要的--重点是使用参数(除了使查询更清晰),以一致和可靠的方式消除这一责任。

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

https://stackoverflow.com/questions/29271155

复制
相关文章

相似问题

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