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