【Web安全攻防从入门到精通】Web安全入门
Web安全入门
漏洞分类
- SQL注入
- XSS漏洞
- CSRF漏洞
- SSRF漏洞
- XXE漏洞
- 反序列化漏洞
- 文件上传漏洞
- 任意文件下载漏洞
- 远程代码执行漏洞
- 越权漏洞
SQL注入漏洞
原理
没有对浏览器提交的参数进行严格的过滤和判断。用户可以修改构造参数,提交sql语句,并传递到服务端,获取敏感信息,甚至执行危险代码或系统命令
危害
- 获取敏感信息
- 修改信息
- 数据库备份
- 上传webshell
- 执行命令
防御
- 参数化查询
- 使用安全的API
- 使用白名单来规范化输入验证方法
- 输入的字符进行Escape转义处理
XSS漏洞
原理
通过破坏HTML结构,注入JavaScript代码执行恶意命令
类型
- 反射型
- 存储型
- DOM型
防御
- 对用户输入的数据进行合法性检查
- 使用filter过滤敏感字符或者进行编码转义
- 支队特定类型数据进行格式检查
- 对输出内容进行编码转义
CSRF漏洞
原理
让受害者在不知情的情况下做出攻击者期望的操作。在已经登陆A的情况下,访问恶意网站B,带着A的Cookie进行操作。
防御
- 验证请求的Referer是否来自本网站,但可被绕过
- 请求中加入不可伪造的Token,在服务端检查Token是否一致或者正确,不正确则丢弃拒绝服务
SSRF漏洞
原理
Web提供了获取外网资源的功能,并且URL可控。攻击者能够通过修改URL获取服务器内的敏感信息,对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息,也可以利用file协议读取本地文件
防御
- 禁止跳转
- 限制协议
- 内外网限制
- URL限制
XXE漏洞原理
原理
属于注入类,注入的是XML语句。弱配置的XML解析器处理包含对外部实体引用的XML输入时,就会发生此攻击。可能会导致泄露机密数据、拒绝服务、SSRF,以及从解析器所在的计算机角度进行端口扫描等系统影响。
防御
- 打开php的libxml_disable_entity_loader(true),不允许加载外部实体
- 过滤用户提交的xml数据,如ENTITY、SYSTEM
反序列化漏洞
原理
序列化是为了减少传输内容大小的一种压缩方法。反序列化就是将含有类信息序列化过的字符串“解压缩”还原成类。而当Web应用对反序列化对应的输入没有做严格限制,就会产生反序列化漏洞。
防御
禁止把用户的输入或用户可控的参数值直接放入反序列化的操作中
文件上传漏洞
原理
网站没有对可上传文件类型做阉割的检查,或者存在中间件配置问题,又或者是检查代码写的不够严格,导致攻击者可以上传恶意脚本,借以植入后门进入服务器
防御
- 配置白名单限制文件后缀名和文件类型
- 限制上传文件的大小
- 对上传文件进行重命名操作
任意文件下载漏洞
原理
网站提供文件下载功能,但没有对用户下载的文件做限制,则恶意用户能够查看或下载任意敏感文件
防御
- 过滤../等敏感字符,使用户在URL中不能回溯上级目录
- 文件下载时判断输入的路径,最好的方法是文件应该在数据库中进行一一对应,避免通过输入绝对路径来获取文件
- php.ini配置open_basedir限制文件访问范围
远程代码执行漏洞
原理
在Web应用上执行自己的恶意代码达到攻击效果。有时为了Web效果的灵活性,会在代码中使用exec、system等函数,如果过滤不当,就会产生此漏洞。
防御
- 尽量少用执行命令的函数或者直接禁用
- 参数值尽量使用引号包括,并在拼接前调用addslashes函数进行转义
- 在使用动态函数之前,确保使用的函数是指定的函数之一
越权漏洞
原理
- 水平越权:统计用户的越权操作,如查看用户信息
- 垂直越权:低等级执行高等级操作,如增删改。
只要对权限的检测不到位,就有可能发生越权漏洞
防御
- 前后端同时对用户输入信息进行校验,设置双重验证机制
- 执行关键操作前必须验证用户身份,验证用户是否具备操作数据的权限
- 直接引用对象的加密资源ID,防止攻击者枚举ID,敏感数据特殊化处理