-
注入的本质是,把用户输入的数据当代码执行,这里有两个关键条件,第一个是用户能够控制输入;第二个是原本程序要执行的代码,拼接了用户输入的数据。
-
SQL注入
- SQL注入的过程中, 如果网站的Web服务器开启了错误回显,则会为攻击者提供极大的便利。
-
盲注
- 所谓盲注,就是在服务器没有错误回显时完成的注入攻击。
- 可以根据返回页面是否发生变化来判断语句是否得到执行。
-
timing attack
- mysql中benchmark()函数,可以让同一个函数执行若干次,使得结果返回的时间要比平时要长,通过时间长短的变化,可以判断出注入语句是否执行成功。
-
数据库攻击技巧
- 一般性技巧
-
命令执行
其实都可在mysql中学习 - 攻击存储过程
- 在MS SQL Server和Qracle数据库中,都有大量内置的存储过程,在注入攻击的过程中,存储过程将为攻击者提供很大的便利。
- 除了利用存储过程直接攻击外,存储过程本身也可能会存在注入楼哦对那个。
- 编码问题
- 要解决这种问题,需要统一数据库、操作系统、Web应用所使用的字符集,以避免各层对字符的理解存在差异。统一设置为UTF-8是一个很好的方法。
- 由于浏览器与服务器返回的字符编码不同,也可能会存在字符集攻击,解决办法就是在HTML页面的<meta>标签中指定当前页面的charset。
- SQL Column Truncation
-
正确地防御SQL注入
- sql注入的防御并不是一个简单的事情。开发者常常走入一些误区,比如只对用户输入做一些escape处理。
-
使用预编译语句
- 防御SQL注入的最佳方式,就是使用预编译的语句,绑定变量。
-
使用存储过程
- 我们还可以使用安全的存储过程对抗SQL注入。使用存储过程的效果和使用预编译类似,其区别就是存储过程需要先将SQL语句定义在数据库中。但需要注意的是,存储过程中也可能存在注入问题。因此应该尽量避免在存储过程内使用动态的SQL语句。
-
检查数据类型
- 检查输入数据的数据类型,在很大程度上可以对抗SQL注入。
- 使用安全函数
- 安全的编码函数,例如OWASP ESAPI中的实现。这个函数由安全专家编写,更值得信赖。
-
其他注入攻击
-
xml注入
- xml注入,也需要满足注入攻击的两大条件:用户能控制数据的输入;程序平凑了数据。在修补方案上,与HTML注入的修补方案也是类似的,对用户输入数据中包含的“语言本身的保留字符”进行转义即可。
-
代码注入
- 代码注入多见于脚本语言,有时候代码注入可以造成命令注入。
- 对抗代码注入、命令注入时,需要禁用eval()、system()等可以执行命令的函数,如果一定要使用这些函数,则需要对用户的输入数据进行处理。此外,在PHP/JSP中便面动态include远程文件,或者安全地处理它。
-
CRLF注入
- CRLF实际上是两个字符:CR是Carriage Return(ASCII 13,\r),LF是Line Feed(ASCII 10,\n).\r\n这两个字符是用于表示换行的,其十六进制编码分别为0x0d、0x0a
- CRLF注入并非仅能用于log注入,凡是使用CRLF作为分隔符的地方都可能存在这种注入,比如"注入HTTP头"。两次'\r\n'意味着HTTP头的结束。
-
xml注入
网友评论