Web安全漏洞原理及防御

SQL注入

未对用户输入进行检查,使得用户输入可以执行SQL语句

SQL注入可以分为报错注入,Union注入,时间盲注,布尔盲注,堆叠注入等。

注入步骤:

graph LR 寻找注入点--> 判断注入类型--> 猜解数据库名--> 猜解数据表名--> 猜解数据字段名

威胁

  • 猜解后台数据库,盗取网站的敏感信息
  • 绕过验证,登录网站后台
  • 借助数据库存储过程提权

防御

  • 严格的数据类型
  • 特殊字符转义
  • 使用预编译语句
  • 框架技术
  • 存储过程

命令注入

通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的。(攻击者可执行系统命令)

XSS跨站脚本攻击

在网页中嵌入客户端恶意脚本代码,当用户利用浏览器浏览被嵌入恶意代码的网站时,恶意代码将会在用户的浏览器上执行。

可以分为反射型XSS,存储型XSS,DOM型XSS。

CSRF跨站请求伪造

攻击者盗用用户的身份,在用户不知情的情况下,以用户的身份进行某些非法操作。

SSRF服务端请求伪造

服务端代码缺陷,导致用户可以控制服务端发起的网络请求。

SSRF漏洞一般位于远程图片加载与下载、图片或文章收藏功能、URL分享、通过URL在线翻译、转码等功能点处。

文件包含

文件包含是服务端程序在引用其他类库等文件时,未能有效控制参数,导致用户可以可控引入的文件。

为了开发方便,开发人员一般会把重复使用的功能写到单个文件中,当需要使用到该功能时直接调用此文件,这种文件调用的过程一般称为文件包含。

PHP中通过以下4中函数包含文件:

  • include(): 执行到include时才包含文件,找不到被包含文件时只会产生警告,代码会继续执行
  • include_once(): 功能同上,但文件中代码已被包含则不会再次包含
  • require(): 程序开始运行就预先包含文件,找不到被包含的文件时会产生致命错误,并停止运行
  • require_once(): 功能同上,但文件中代码已被包含则不会再次包含

可以分为本地包含和远程包含两种类型。

文件上传

服务端在控制上传时,未能有效校验上传文件内容及后缀,造成可以上传恶意脚本。

反序列化

后端程序在反序列化数据时,数据可控,导致可以注入恶意序列化内容。

XML实体注入

XML实体注入是后端程序在解析XML格式数据时,数据可被用户控制,后端未经过一定的校验,造成XML实体注入。

防御技巧

  • 从源头上解决——在漏洞最根源的代码层次解决
  • 通过过滤代码——在代码中使用通用Web安全漏洞过滤逻辑,对用户数据进行过滤或拦截。
  • 第三方防护程序——使用第三方或开源自建Web应用防护程序及WAF

Web安全漏洞原理及防御

上一篇:[练习9-1]定义一个能够表示负数的结构类型,一个负数包括实数与虚数部分。


下一篇:动态规划---到原点的路径