ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 参数预编译方式防止SQL注入的原理: 参数化查询:数据库先完成SQL指令的编译,然后才套用参数运行。此时SQL语句的格式已经是规定好了的,需要查的数据也设置好了,缺的只是几个查询的数据。恶意参数难以生效 # mybatis框架环境下最容易出现SQL注入的场景及防御手段: * 模糊查询:这种场景可以采用预编译的机制,便面SQL语句拼接的问题,从根源上防止SQL注入漏洞的产生 * in之后的函数:使用自带循环指令解决 * order by之后的参数:在java层面做映射 # 在研发阶段通过技术手段避免SQL注入: * 参数预编译 * 正则表达式过滤传入参数 * 字符串过滤 * 横向渗透 # 如何感知到SQL注入漏洞正在被利用: * 对数据库监测:对数据库进行操作室,自动对执行的SQL语句进行语义分析,并划分威胁等级,根据划分的威胁等级进行不同的处理 * 创建蜜罐数据库:当对蜜罐数据库进行操作时,直接出发劲爆并阻断该IP的访问(蜜罐哎,放着看看人家的操作又怎么了!) # 如何高效扫描SQL注入漏洞: * 扫描速度:多线程,高并发,分布式 * 扫描结果准确度:收集cms注入漏洞的POC,在扫描时通过指纹识别和POC相结合 # 其他: * Prestatement和statement的区别:前者对批量处理可以提高效率,后者每次执行SQL语句都需要编译 * 预编译能完全防止SQL注入吗:一般情况下,能(但是生活中的情况的复杂度,呵呵) * order by举例:查询文章标题为“安全”的文章并根据阅读量或者ID排序,select * from article where title = '安全' order by # asc,这里readVolume不是查询参数,无法使用预编译机制,只能这样拼接select * from article where title = '安全' order by $ asc。针对这种情况研发人员可以在java层面做映射进行解决。如当在根据阅读量或者ID排序时,我们可以限制用户只能输入0和1,当用户输入0时,我们在代码层面将其映射为readVolume,当用户输入1时,将其映射为id。当用户输入0和1以外的内容时,可以将其转换为默认排序方式。 # 其他链接: * http://www.anyun.org/a/jishuguanzhu/wangluoanquan/2017/0602/8685.html