是否可以完全禁用 UNION SELECT
通过配置选项查询?
除了清理入口参数,我想避免使用 UNION
因为在它的帮助下,它很容易实现 SQL injection
表格格式:
SELECT * FROM users where username = '1' OR 1=1
UNION
SELECT * FROM users -- ' AND password='something'
是否可以完全禁用 UNION SELECT
通过配置选项查询?
除了清理入口参数,我想避免使用 UNION
因为在它的帮助下,它很容易实现 SQL injection
表格格式:
SELECT * FROM users where username = '1' OR 1=1
UNION
SELECT * FROM users -- ' AND password='something'
3条答案
按热度按时间gtlvzcf81#
即使用简单的方法也很容易做到
SELECT
查询,它与UNION
完全。此外,据我所知,没有这样的选择来禁用UNION
除非你可能是采取开放源码和修改它自己。vi4fp9gy2#
避免sql注入的最佳[经验证的]解决方案是,通过将字符串与来自最终用户界面(或其他不安全源)的值连接起来,避免汇编sql语句。
更安全的做法是使用“prepared statements”并对其应用参数,而不是串联那些参数。
将sql块连接到语句中仍然有空间,主要是在使用动态sql时,但我认为这超出了您的问题范围。简单地说:在生成sql语句时,不要将值串接为字符串。
plicqrtu3#
直截了当地回答你的问题:
不,mysql中没有选择禁用的选项
UNION
.在一些非常特殊的情况下,可以使用sqlu模式来更改语法的含义,比如使用双引号和
||
接线员。看到了吗https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html但一般来说,您不能禁用sql关键字或子句,除非您跳出代码编辑器并修改mysql的sql解析器代码,然后构建mysql的自定义示例。
我同意其他评论者的观点,即没有必要禁用
UNION
如果您使用已知的实践编写应用程序代码以避免sql注入漏洞。