这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天
一、web安全-攻击篇
1、Cross-Site Scripting(XSS)
跨站脚本攻击:攻击人将恶意脚本注入网站,网站由于盲目信任用户的提交内容,执行了恶意脚本对其它用户造成损害。
注入方式:
document.write
element.innerHTML = anrString
SSR(user_data)//伪代码
XSS特点:难以从UI上感知(暗地执行脚本)、窃取用户信息(cookie/token)、绘制UI(例如弹窗),进而诱骗用户点击/填写表单;
XSS类型
(1)Stored XSS 存储型XSS 恶意脚本被存入数据库中。每当用户访问页面时,需要从数据库读取数据,就会被攻击,危害最大,对所有用户都可见
(2)Reflected XSS 不涉及数据库、从URL上攻击; 在url上的param参数注入恶意脚本;
(3)DOM-based XSS 不需要服务器的参与 恶意攻击的发起 + 执行,全在浏览器完成 与Reflected XSS的区别:完成注入脚本的地方不同,一个是浏览器、一个是服务器。
(4)Mutation-based XSS 利用了浏览器渲染DOM的特性(独特优化) 不同浏览器,会有区别(按浏览器进行攻击)
2、Cross-site request forgery(CSRF)
跨站请求伪造:在用户不知情的前提下,利用用户权限(cookie)构造指定HTTP请求,窃取或修改用户敏感信息,
3、SQL Injection
SQL注入:发送请求时携带恶意注入的SQL参数,服务器获取参数,并执行SQL代码,导致被恶意用户获取、修改、删除数据
4、Denial of Service(DoS)
拒绝服务攻击:通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而雪崩效应。
5、Distributed DoS(DDoS)
分布式拒绝服务攻击:短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新的请求。
SYN洪泛:攻击者发送大量TCP第一次握手的SYN报文,但不响应服务端的SYN,使服务端连接不能被释放,知道最大连接数
6、中间人攻击 一些恶意的路由器、ISP作为中间人窃取信息、修改请求并返回。
二、web安全防御篇
1、XSS防御
(1)永不信任用户的提交内容,不要将用户提交的内容直接转换为DOM(当作string对待) (2)防御工具:reactive、vue框架默认防御XSS, 服务端有npm包:DOMPurify
(3)若用户需求为动态生成,则需要注意 string -> DOM: 将string转义; 扫描svg;不让用户自定义跳转;
CSP内容安全策略:开发者可自定义哪些源(域名)被认为是安全的,来自安全源的脚本可以执行,否则直接抛错。
同源
2、CSFR防御
限制请求来源:
(1)在Origin和Referer字段中检查同源
(2)token跟用户绑定,设置token过期时间
浏览器请求页面 ——>服务器返回页面 + token ——> 浏览器请求API + token ——> 服务器验证token + 数据
(3)对于iframe攻击(iframe同源) X-Frame-Options: DENY/SAMEORIGIN
(4)避免用户信息被携带: SameSite Cookie 限制cookie域名和页面域名是否匹配
3、SQL注入防御
找到项目中查询SQL的地方,使用prepared statement
最小权限原则:建立白名单并过滤、对URL类型参数进行协议域名ip等限制
4、DoS 防御
(1)代码review
(2)代码扫描+正则性能测试
(3)警惕用户提供的正则
5、DDoS防御
流量治理-过滤:负载均衡、API网关
抗量:CDN、快速自动扩容、非核心业务降级
6、防御中间人
使用HTTPS:可靠性-加密、完整性-MAC验证(数据不被修改、对比hash)、数字签名-不可抵赖