Web安全漏洞原理及防御
SQL注入
未对用户输入进行检查,使得用户输入可以执行SQL语句
SQL注入可以分为报错注入,Union注入,时间盲注,布尔盲注,堆叠注入等。
注入步骤:
威胁
- 猜解后台数据库,盗取网站的敏感信息
- 绕过验证,登录网站后台
- 借助数据库存储过程提权
防御
- 严格的数据类型
- 特殊字符转义
- 使用预编译语句
- 框架技术
- 存储过程
命令注入
通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的。(攻击者可执行系统命令)
XSS跨站脚本攻击
在网页中嵌入客户端恶意脚本代码,当用户利用浏览器浏览被嵌入恶意代码的网站时,恶意代码将会在用户的浏览器上执行。
可以分为反射型XSS,存储型XSS,DOM型XSS。
CSRF跨站请求伪造
攻击者盗用用户的身份,在用户不知情的情况下,以用户的身份进行某些非法操作。
SSRF服务端请求伪造
服务端代码缺陷,导致用户可以控制服务端发起的网络请求。
SSRF漏洞一般位于远程图片加载与下载、图片或文章收藏功能、URL分享、通过URL在线翻译、转码等功能点处。
文件包含
文件包含是服务端程序在引用其他类库等文件时,未能有效控制参数,导致用户可以可控引入的文件。
为了开发方便,开发人员一般会把重复使用的功能写到单个文件中,当需要使用到该功能时直接调用此文件,这种文件调用的过程一般称为文件包含。
PHP中通过以下4中函数包含文件:
- include(): 执行到include时才包含文件,找不到被包含文件时只会产生警告,代码会继续执行
- include_once(): 功能同上,但文件中代码已被包含则不会再次包含
- require(): 程序开始运行就预先包含文件,找不到被包含的文件时会产生致命错误,并停止运行
- require_once(): 功能同上,但文件中代码已被包含则不会再次包含
可以分为本地包含和远程包含两种类型。
文件上传
服务端在控制上传时,未能有效校验上传文件内容及后缀,造成可以上传恶意脚本。
反序列化
后端程序在反序列化数据时,数据可控,导致可以注入恶意序列化内容。
XML实体注入
XML实体注入是后端程序在解析XML格式数据时,数据可被用户控制,后端未经过一定的校验,造成XML实体注入。
中间人攻击
中间人攻击(MIMT)是指攻击者与通信的两端分别建立独立的连接,并交换其收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。
中间人攻击是一个缺乏相互认证的攻击,SSL协议可以验证参与通讯得的一方或双方使用的证书是否是由权威的受信任的数字证书认证机构颁发,并且能执行双向身份认证。
防御技巧
- 从源头上解决——在漏洞最根源的代码层次解决
- 通过过滤代码——在代码中使用通用Web安全漏洞过滤逻辑,对用户数据进行过滤或拦截。
- 第三方防护程序——使用第三方或开源自建Web应用防护程序及WAF