注入
注入(inject)攻击由于应用系统使用了未被信任的用户输入并且执行所致。
#
注入类型- NoSQL
- SQL
- HTML/JavaScript/CSS
- JPA
- 操作系统
- XML: External Entity attack
- XPath
- LDAP
#
防止注入的方法- 输入验证 + 输出过滤
- 如果要与操作系统进行交互,使用语言提供的 API,而非自己创建。
#
SQL 注入SQL 注入是未经检查的用户输入数据在拼接 SQL 语句的过程中,超越了数据本身,成为了 SQL 语句查询逻辑的一部分从而导致产生了预期之外的执行结果。
#
注入示例#
防范措施查询参数化(Query Parameterization),即通过数据库提供的 SQL 语句的预编译和查询参数绑定功能,在 SQL 语句中放置占位符'?',执行时将用户输入的数据作为执行的参数传入。这样数据库不会将参数的内容视为 SQL 指令的一部分来处理,而是在数据库完成 SQL 指令的编译后,才套用参数运行,因此就算参数中含有破坏性的指令,也不会被数据库所运行。
#
NoSQL 注入NoSQL 注入
' " \ ; $
#
HTML/JavaScript/CSS 注入HTML/JavaScript/CSS 注入是未经检查的用户输入数据在重新在浏览器显示的时候成为了逻辑的一部分从而导致产生了预期之外的执行结果。其中 JavaScript 注入危害性最大。
#
注入示例以 JavaScript 注入为例,看如何窃取用户的 cookies。
#
防范措施输入验证 + 输出转意。