[ Web安全 | 青训营笔记]

99 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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)、数字签名-不可抵赖