在我的SQL查询中,我从用户填写的表单中提交数据,如here所示,不可能使用PDO对我的列名进行参数化。这很重要,因为查询中的列名是根据表单中的字段名称动态插入的。
我可以非常容易地验证$ _POST数组中提交的列名,方法是将它们从数据库中拉出来,然后抛出任何不匹配的列名。这对于避免SQL注入是一件好事,或者仅仅是浪费系统资源(因为它有效地将依赖于数据库的任何请求的执行加倍)?提交SQL查询时是否需要验证列名?
0
A
回答
1
这是一个很好的事情,以避免SQL注入
号
或仅仅是系统资源的浪费
号
它不是一个浪费,因为它只是一个简单的选择从sys技术表。
但是,当用户不被允许进入某些领域时,它仍然可以是某种注射。假设,如果网站管理员填写了一个(虚拟)字段“user_role”,并且用户可以在POST中定义它,他们可以改变他们的访问权限。
因此,硬编码(白名单)允许的字段是唯一可靠的方法。
,因为它有效地加倍依赖于数据库
男人的任何请求的执行。数据库打算被查询。这是他们唯一的目的。无法维持简单的选择查询的数据库是无稽之谈。查询是不同的。插入一个比10个选择更重。您必须按质量区分查询,而不是数量。
查询中的列名将根据表单中的字段名动态插入。
尽管对于插入/更新查询来说,这是非常正确的,对于SELECT来说,它是坏设计的大标志。我可以在WHERE/ORDER BY子句中使用可变字段名称,但是如果您必须在表名称子句的字段集中运行,那么您的数据库设计肯定是错误的。
0
您可以对列名进行硬编码以使其更快。您还可以缓存所拉取的表格描述,以便每次更改表格模式时都不需要更新代码。
1
除了硬编码列的列表,你可以通过你要允许从列查询数据库中的另一个表建立的列清单,如
QuerableSources
SrcTable SrcColumn DescriptToUser
SomeTable SomeColumn Column used for
AnotherTable AnotherColumn Something Else
etc.
然后,你建立例如为用户选择“DescriptionToUser”内容以便于阅读的组合框,并且您控制有效的列和表格源。
至于他们正在搜索的VALUE,DEFINITELY Scrub /清理它以防止SQL注入。
相关问题
- 1. 验证是否需要TCP?
- 2. SQL查询需要时间
- 3. 验证是否存在提交
- 4. 在提交按钮点击时需要验证
- 5. 是否需要验证函数参数?
- 6. 需要提高sql查询的性能
- 7. Sql查询需要
- 8. jQuery验证未验证提交事件是否正确
- 9. 提交验证错误时发生N + 1查询
- 10. 是否需要独特的自定义验证器名称?
- 11. 是否需要同时运行交叉验证的随机森林
- 12. 检查多个存储库中是否需要推送/提交
- 13. php mail:检查服务器是否需要验证?
- 14. C#WebRequest检查页面是否需要HTTP身份验证
- 15. 我是否需要加入查询的交易?
- 16. 验证mysql查询是否为NULL
- 17. 在PL/SQL中运行循环时,是否需要事后提交?
- 18. 需要很长时间的SQL查询
- 19. 需要时间的SQL Server查询
- 20. 在SQL查询时需要帮助
- 21. 在SQL查询时需要帮助
- 22. SQL查询验证器
- 23. 需要提交
- 24. html5表单验证(无需提交)
- 25. SQL查询/子查询需要帮助
- 26. 需要使用SQL查询
- 27. SQL查询需要帮助
- 28. SQL插入查询需要
- 29. 需要SQL Server查询
- 30. 需要一个SQL查询
大概应该已经更清楚了,我的SELECT查询不使用动态字段名称。正如你所说,那将是愚蠢的。 – hamalnamal 2012-04-12 18:02:17