ProxySQL SQL 注入引擎
ProxySQL 2.0.9 引入了 libsqlinjection 作为识别可能的 SQL 注入攻击的机制。
启用 SQL 注入检测
要启用 SQL 注入检测,只需要启用变量 mysql-automaticdetectsqli
SQL 注入检测和防火墙白名单
即使启用了变量 mysql-automaticdetectsqli,SQL 注入引擎也不会检查所有的查询操作。因为,SQL 注入引擎不会检查防火墙白名单允许的操作。因为它已经是被认为是安全的,所以就不会检查。
换句话说,如果启用了 SQL 注入的自动检测(mysql-automaticdetectsqli=1):
如果防火墙白名单是关闭的,SQL 注入引擎会分析所有的操作。
如果防火墙白名单是启用的,SQL 注入引擎只会分析白名单之外的操作,并且会以"DETECTING"模式为用户执行,实际上: - 模式为"OFF"的用户,所有的操作都被认为是白名单上的。 - 模式为"PROTECTING"的用户,不在白名单的操作会被拒绝。
表 mysqlfirewallwhitelistsqlifingerprints
libsqlinjection 解析查询,生成查询的指纹,并确定该指纹是已知的 SQL 注入攻击还是可能的攻击。
尽管 libsqlinjection 能够检测到很多 SQL 注入,但是不幸的是,它还会产生很多误报。
将 SQL 注入检测与防火墙白名单结合使用可以大大减少误报(所有列入白名单的查询都不会由 SQL 注入引擎处理),这是减少误报数量的最佳方法。
减少误报数量的另一种方法是将 libsqlinjection 生成的某些指纹列入白名单。可以在表中将指纹列入白名单 mysqlfirewallwhitelistsqlifingerprints:
CREATE TABLE mysql_firewall_whitelist_sqli_fingerprints (
active INT CHECK (active IN (0,1)) NOT NULL DEFAULT 1,
fingerprint VARCHAR NOT NULL,
PRIMARY KEY (fingerprint) )
active:定义是否为活动
fingerprint:是 libsqlinjection 生成的指纹,我们希望(暂时)禁用它,允许查询与指定的指纹匹配
目前获取指纹的唯一方法是通过错误日志,ProxySQL 会将打印指纹和失败的查询。例如:
2019-11-28 16:17:23 MySQL_Session.cpp:3323:handler(): [ERROR] SQLinjection detected with fingerprint of 'Eoknk' from client pinkys_dbu@192.168.56.104 . Query listed below:
SELECT * FROM users WHERE username='asdsad' AND password='e2a521bc01c1ca09e173bcf65bcc97e9'
如果觉得这是正常的查询,那么可以使用 mysqlfirewallwhitelist_rules 将其加入白名单
INSERT INTO mysql_firewall_whitelist_sqli_fingerprints VALUES (1, \'Eoknk\');
mysqlfirewallwhitelistsqlifingerprints 是防火墙的一部分,因此,使用跟防火墙白名单一样的命令,将其载入到当前运行时:
LOAD MYSQL FIREWALL TO RUNTIME
mysqlfirewallwhitelistsqlifingerprints 对应运行时使用的表为
runtimemysqlfirewallwhitelistsqli_fingerprints 。
ProxySQL SQL 注入引擎的更多相关文章
- 参数命令化 防止Sql注入
1.先在数据库中完成储存过程 create proc usp_selectStudent ) as select * froom student where StudentName=@studentN ...
- Java程序员从笨鸟到菜鸟之(一百零二)sql注入攻击详解(三)sql注入解决办法
sql注入攻击详解(二)sql注入过程详解 sql注入攻击详解(一)sql注入原理详解 我们了解了sql注入原理和sql注入过程,今天我们就来了解一下sql注入的解决办法.怎么来解决和防范sql注入, ...
- 防止SQL注入的,网站安全的一些常用解决方案
--------------------------------------------------------过滤URL中的一些特殊字符,动态SQL语句使用PrepareStatement.. -- ...
- Statement和PreparedStatement的区别; 什么是SQL注入,怎么防止SQL注入?
问题一:Statement和PreparedStatement的区别 先来说说,什么是java中的Statement:Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接 ...
- SQL注入技术专题—由浅入深【精华聚合】
作者:坏蛋链接:https://zhuanlan.zhihu.com/p/23569276来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 不管用什么语言编写的Web应用 ...
- 预处理prepareStatement是怎么防止sql注入漏洞的?
序,目前在对数据库进行操作之前,使用prepareStatement预编译,然后再根据通配符进行数据填值,是比较常见的做法,好处是提高执行效率,而且保证排除SQL注入漏洞. 一.prepareStat ...
- web安全之sql注入原理
sql注入的原理: 将(恶意)的SQL命令注入到后台数据库引擎执行的能力,把信息返回到页面 sql注入产生的原因: 过滤不严谨,导致产生的sql注入. sql注入产生的地方: ...
- 防止SQL注入攻击的一些方法小结
SQL注入攻击的危害性很大.在讲解其防止办法之前,数据库管理员有必要先了解一下其攻击的原理.这有利于管理员采取有针对性的防治措施. 一. SQL注入攻击的简单示例. statement := &quo ...
- SQL 注入
我们的团队项目中有课程名称输入框,其中的内容会拼接到类sql查询语句中. 所以可能会产生类sql注入的问题,我们团队采用了利用正则表达式判断输入内容的形式来规避这类注入. 下面简单介绍一下sql注入 ...
随机推荐
- HashMap中的哈希函数分析
首先我们要知道,在理想情况下的哈希表中,哈希函数生成的哈希值是value在数组中的下标,其范围是分布于负无穷到正无穷的整个实整数轴的.而在现实情况下,是不可能存在这么大的一个数组的.接下来分析Hash ...
- springboot java -jar指定启动的jar外部配置文件
Limited Setting Effect 中文描述 Java 8 -Xbootclasspath:<path> Sets the search path for bootstrap c ...
- [Java学习笔记] Java异常机制(也许是全网最独特视角)
Java 异常机制(也许是全网最独特视角) 一.Java中的"异常"指什么 什么是异常 一句话简单理解:异常是程序运行中的一些异常或者错误. (纯字面意思) Error类 和 Ex ...
- day06 Java_数组_方法_参数
精华笔记: 数组: 复制: System.arraycopy(a,1,b,0,4); int[ ] b = Arrays.copyOf(a,6); 排序: Arrays.sort(arr); //升序 ...
- kube-shell安装
1.开源项目kube-shell可以为kubectl提供自动的命令提示和补全,对于初学kubernetes比较友好. https://github.com/cloudnativelabs/kube-s ...
- FPGA开发流程(创建工程,选择芯片,变量位置,文件命名,reg和wire数据类型,开发流程)
开发流程(以二选一选择器为例) 1.设计定义:设计一个可以从两个输入端中选择其中一个并输出的逻辑电路 2.设计输入 2.1.逻辑抽象:三个输入端,一个用来选择,记sel,另两个被选择,记a,b,加上一 ...
- javaweb 02: servlet
Servlet对象的生命周期 什么是Servlet对象生命周期? Servlet对象什么时候被创建. Servlet对象什么时候被销毁. Servlet对象创建了几个? Servlet对象的生命周期表 ...
- 基于SqlSugar的开发框架循序渐进介绍(13)-- 基于ElementPlus的上传组件进行封装,便于项目使用
在我们实际项目开发过程中,往往需要根据实际情况,对组件进行封装,以更简便的在界面代码中使用,在实际的前端应用中,适当的组件封装,可以减少很多重复的界面代码,并且能够非常简便的使用,本篇随笔介绍基于El ...
- 如何使用Solidity和Hardhat构建你自己的NFT以及NFT交易市场
目录 目录 目录 1.ERC721的基础知识 1.1.什么是不可替代代币? 1.2.什么是 ERC-721? 1.3.什么是元数据 1.4.如何在链上保存NFT的图像 2.HardHat 3.创建项目 ...
- Ray类定义
定义光线,书中已经有原理. 类声明: #ifndef __RAY_HEADER__ #define __RAY_HEADER__ #include "geometry.h" cla ...