一、注入
1.名词解释
2.编译器与解释器的区别
二、易受攻击注入
1.易受注入原因
2.ORM查询
3.面向对象的语言与关系型数据库不对应的原因
三、防止注入
1.防止注入原理
2.防止注入方法
3.注意事项
一、注入
1.名词解释:攻击者向解释器发送恶意数据
2.编译器与解释器的区别:
3.注入漏洞发现:通过扫描器和模糊测试工具
二、易受攻击注入
1.易受注入原因
2.ORM查询:对象关系映射,使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系型数据库中。本质上将数据从一种数据转换为另一种形式。
3.面向对象的语言与关系型数据库不对应的原因:面向对象的语言将方法独立出来,因此数据将分散在不同的表中,但是对象作为一个整体,数据应该存储在一张表中。比如:将汽车看成一个对象,开车、踩油门、刹车等行为就是方法,当你去车库停车也就是存车时,你可能某些地方放油门阀、某些地方放方向盘。这就是面向对象语言和关系型数据库无法对应的原因,所以需要ORM。
三、防止注入
1.防止注入原理:
将数据、命令语句和查询语句分隔开来。
2. 防止注入方法:
a.使用安全的API,完全避免使用解释器
b.提供参数化界面的结构
c.迁移到ORM
d.实体化框架
e.规范化输入验证方法
f.解释器的转义语法转义
g.查询中使用LIMIT和其他SQL控件,防止SQL注入时大量地公开记录
3.注意事项:
a.参数化也不能完全防止SQL注入,比如PL/SQL或T-SQL将查询和数据连在一起;或者执行带有立即执行或者exce()的恶意数据
b.规范化输入不是一个完全防御,比如某些文本框在输入中确实需要特殊字符
c.解释器转移中,表名、列名等无法转义,所以用户提供的结构名非常危险