防止注射的参数?够了吗?以及应该在每个查询中使用它
Parameters to prevent injection? is it enough? and should it be used in each query?
经过长期的研究,我发现防止注入的参数是一种很好的做法,但我应该在每个查询中使用它,还是只在登录页面中使用它??以及为什么
非常感谢
代码应该始终使用SQL的参数绑定
数据来自何处并不重要;跳过它可能导致二阶SQL注入,或者出现"我忘记更新代码"的情况。只需始终使用SQL参数即可。
只有的一般例外是当无法做到这一点时,例如当需要更改查询本身中的非数据时(例如表名)-在这种情况下,有其他技术可以减轻SQL注入。
虽然参数绑定是一个重要的基石,但"还不够"。
根据定义,正确使用查询参数可以防止所有"经典"SQL注入,但不能保证查询是安全的。
SQL注入是一种代码注入技术,用于攻击数据驱动的应用程序,其中恶意SQL语句被插入条目字段以执行。。
也就是说,虽然以下内容是SQL注入的免费,因为查询形状无法更改但仍不能保证查询是"安全"或"安全"的。
$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,而不会更改查询形状。因此,应该始终使用,否则代码将自身设置为失败。
我意识到"总是"answers"只有"是绝对的极端,但我还没有在通用代码中找到违反这些规则的例子。如果底层驱动程序使用内部转义或真正的参数化查询,这也无关紧要——关键是使用参数(除了使查询更干净之外)以一致和可靠的方式消除这一责任。
- 如何将参数赋予作为查询参数的参数值给定的函数
- 具有可选'/'s和查询参数
- 如果没有Ember中的控制器,我如何更改查询参数
- 如何编码&在不是't是查询参数的一部分
- 如何在JavaScript中传递查询参数和重定向
- React 路由器和任意查询参数:页面在加载时无意中刷新
- MongoDB查找查询参数
- 布尔查询参数被 Sails.js 视为字符串
- jQuery脚本,它搜索现有的查询参数并且不添加“"如果存在
- 基于查询参数的可选承诺步骤
- 如何使用Backbone.Return捕获查询参数的更改
- 在iron router中使用查询参数修改模板
- 如何将查询参数设置为我的所有路线,当它改变时-在恩伯
- 如何使用查询参数在jQuery中生成url
- Javascript/jQuery URL查询参数解析
- Ember.js查询参数不尊重replace:true并使用replaceState
- jQuery将查询参数附加到当前哈希中,忽略重复项
- window.location.href未设置查询参数
- 如何在angular中访问URL中的查询参数(在hash之外,非html 5模式)
- 获取具有主干木偶查询参数的当前 URL