安全基础


注入攻击

注入攻击是应用违背了“数据与代码分离原则的”结果

注入攻击的两个条件

  1. 用户能够控制数据的输入
  2. 原本要执行的代码,拼接了用户的输入,把数据当做代码执行了

    SQL注入

  3. 要避免Web服务器开启错误回显,将错误信息直接返回
  4. 还可以盲注,比如注入 “and 1=2”
  5. Timing Attach,用BENCHMARK函数造成延迟,如果不为真,则该语句很快就执行完
  6. BENCHMARK()函数,可以让同一个函数执行若干次,使得结果返回的时间比平常要场,通过时间长短的变化,判断出注入语句是否执行成功。

防御SQL注入

要做的事情

  • 找到所有SQL注入漏洞

  • 修补这些漏洞

  • 使用预编译语句
    如使用?代替变量

  • 使用存储过程
    尽量避免在存储过程内使用动态的sql,如果无法避免,应该使用严格的输入过滤或者编码函数来处理用户的输入数据

  • 检查数据类型

  • 使用安全函数

  • 数据库应该使用最小权限原则,避免web应用直接使用root、dbowner等高权限账户直接连接数据库

XML注入

与HTML类似,对用书输入数据包含语言本身的保留字符进行转义

代码注入

多吗注入多见于脚本语言
JSP的动态include也能导致代码注入

CRLF注入

CR(\r),LF(\n)
\r\n:换行

通过注入CRLF可能会改变原有的语义,HTTP就是通过“\r\n”来分割的。如果服务器端没有过滤“\r\n”,又把用户输入的数据放在HTTP头中,则有可能导致安全隐患


文章作者: 彭峰
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 彭峰 !
  目录