禁用mysql的union select查询

pgky5nke  于 2021-06-23  发布在  Mysql
关注(0)|答案(3)|浏览(592)

是否可以完全禁用 UNION SELECT 通过配置选项查询?
除了清理入口参数,我想避免使用 UNION 因为在它的帮助下,它很容易实现 SQL injection 表格格式:

SELECT * FROM users where username = '1' OR 1=1 
UNION 
SELECT * FROM users -- ' AND password='something'
gtlvzcf8

gtlvzcf81#

即使用简单的方法也很容易做到 SELECT 查询,它与 UNION 完全。此外,据我所知,没有这样的选择来禁用 UNION 除非你可能是采取开放源码和修改它自己。

vi4fp9gy

vi4fp9gy2#

避免sql注入的最佳[经验证的]解决方案是,通过将字符串与来自最终用户界面(或其他不安全源)的值连接起来,避免汇编sql语句。
更安全的做法是使用“prepared statements”并对其应用参数,而不是串联那些参数。
将sql块连接到语句中仍然有空间,主要是在使用动态sql时,但我认为这超出了您的问题范围。简单地说:在生成sql语句时,不要将值串接为字符串。

plicqrtu

plicqrtu3#

直截了当地回答你的问题:
不,mysql中没有选择禁用的选项 UNION .
在一些非常特殊的情况下,可以使用sqlu模式来更改语法的含义,比如使用双引号和 || 接线员。看到了吗https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html
但一般来说,您不能禁用sql关键字或子句,除非您跳出代码编辑器并修改mysql的sql解析器代码,然后构建mysql的自定义示例。
我同意其他评论者的观点,即没有必要禁用 UNION 如果您使用已知的实践编写应用程序代码以避免sql注入漏洞。

相关问题