这是我参与⌈第四届青训营⌋笔记创作活动的第8天。Web安全问题很常见,会危害到用户、公司和程序员。从攻击者的角度看,web安全指攻击;从开发者的角度是指防御。
攻击篇
-
跨站脚本攻击【Cross-Site Scripting(XSS)】
XSS攻击是一种经常出现在Web应用中的计算机安全漏洞,也是Web攻击中最主流的攻击方式。恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,添加一些代码嵌入到Web页面中去,当用户访问页面时,这些脚本也会被执行完成攻击。
XSS特点:①通常难以从UI上感知(暗地执行脚本)②窃取用户信息(cookie/token)③绘制UI(例如弹窗),诱骗用户点击/填写表单。
分类
- Stored XSS(存储型):恶意脚本被存在数据库中;危害最大,对全部用户可见
- Reflected XSS(反射型):不涉及数据库,从URL上攻击
- DOM-based XSS(基于DOM):不需要服务器的参与;恶意攻击的发起与执行均在浏览器完成
- Mutation-based XSS(基于XSS):利用了浏览器渲染DOM的特性(独特优化);按浏览器进行攻击,不同的浏览器会有区别。
-
跨站伪造请求【Cross-site request forgery(CSRF)】
攻击者盗用用户身份发送恶意请求,如模拟用户行为发邮件、发消息以及支付、转账等。XSS是利用站点内的信任用户,CSRF则通过伪装来自受信任用户请求来利用受信任的网站,更具危险性。
CSRF特点:①在用户不知情的前提下②利用用户权限(cookie)③构造指定http请求,窃取或修改用户敏感信息。
GET请求、构造HTML表单等
-
SQL Injection(SQL注入攻击)
SQL注入是比较常见的网络攻击方式之一,主要是通过把SQL命令插入到Web表单递交、输入域名或页面请求的查询字符串,实现无账号登录,甚至篡改数据库。
-
服务拒绝【Denial of Service(DoS)】
通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求积压,进而雪崩效应。
分类
- ReDoS(基于正则表达式的DoS)
- DDoS【Distributed DoS】:来自大量僵尸设备的请求流量,服务器不能完成全部请求,导致请求堆积。特点:直接访问IP;任意API;消耗大量带宽(耗尽)。
-
中间人攻击
明文传输、信息篡改不可知、对方身份未验证会导致中间人攻击。
防御篇
-
针对XSS
永远不信任用户的提交内容、永远不要将用户提交内容直接转换成DOM(当成字符串来对待)。 防御XSS攻击的现成工具:前端有主流框架默认防御XSS、google-closure-library;服务器端有DOMPurify
注意:①string生成DOM需要进行转义 ②上传svg文件时进行扫描 ③自定义跳转链接时进行过滤 ④留意用户自定义样式
-
内容安全策略【Content Security Policy(CSP)】
-
防御CSRF攻击
CSRF——iframe攻击:利用iframe进行同源请求
CSRF anti-pattern:将更新和获取逻辑放到同一个GET接口,可能导致用户隐私泄露甚至数据被篡改。
-
SameSite Cookie——避免用户信息被携带
-
防御注入攻击
找到项目中查询SQL的地方,使用prepared statement。
最小权限原则;建立允许名单+过滤;对URL类型参数进行协议、域名、IP等限制。
-
防御DoS
代码扫描+正则性能测试;拒绝使用用户提供的正则。
-
防御DDoS
- 过滤:负载均衡、API网关(流量治理)
- 抗量:CDN、快速自动扩容、非核心服务降级
-
防御中间人
HTTPS
HSTS:将http请求主动升级到https
-
SRI【SubResource Integrity】 防御静态资源被劫持篡改。