目录
1、跨站脚本攻击(Cross Site Script Attack)--- XSS
2、跨站请求伪造(Cross-site request forgery)---CSRF
4、拒绝服务(Denial of Service) --- Dos
内容安全策略(Content Security Policy)--- CSP
前言
web 开发的安全问题一直都是重中之重的一环,当然安全问题在其他领域同样如此,在web 开发领域安全问题一旦出现问题,对用户可能是个人财产或隐私的造成损失、对公司可能造成巨额财产及客户的流失、同时也 关系到开发者工作的去留等一系列问题。分为两个方面:攻击和防御.
一、攻击篇
加入你是一个hacker
1、跨站脚本攻击(Cross Site Script Attack)--- XSS
常见攻击方式
-
开发者盲目信任用户的提交内容,将用户填写的字符串直接转换为DOM操作
XSS
的一些特点
-
通常难以从以
UI
上感知(XSS
攻击一般在暗地执行脚本) -
窃取用户信息(cookie/token)
-
绘制
UI
(例如弹窗),诱骗用户点击/填写表单
XSS
分类(性质)
-
恶意脚本被存在数据库中
-
访问页面 => 读数据 === 被攻击
-
危害最大,对全部用户可见
2、跨站请求伪造(Cross-site request forgery)---CSRF
特点:
-
在用户不知情的前提下
-
利用用户权限(cookie)
-
构造指定HTTP请求,窃取或者修改用户敏感性息
3、注入攻击(Injection)
(1)、SQL
Injection(最常见的注入攻击方式)
方式:
-
HTTP请求
SQL
参数被恶意注入 -
求其发送至服务端将
SQL
参数解析构建SQL
语句并运行SQL
代码 -
获取数据、修改数据、删除数据等一系列操作
(2)、其他注入方式
-
CLI
:命令行 -
OS command :系统命令
-
Server-Side Request forgery(
SSRF
) 服务端伪造请求(虽然不属于注入但是原理类似)
4、拒绝服务(Denial of Service) --- Dos
描述:通过某种方式(构造特定请求),导致服务器资源被显著小号,来不及相应更多请求,导致请求挤压,进而雪崩效应。
(1)、ReDos
:基于正则表达式的DOS
方式: 通过正则表达式的贪婪匹配,如果服务端在利用正则去匹配的时候,攻击者通过提交特定的信息,时服务待在进行正则匹配的时候需要通过不断回溯进行匹配。
结果: 响应时间增加、接口吞吐量下降。
(2)、DDoS
(Distributed)
描述: 短时间按内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法相应新请求。
特征: 简单粗暴、以量大达成目的
攻击特点:
-
直接访问
IP
-
任意
API
-
消耗大量带宽
5、中间人
描述:处于服务端与浏览器之间,接收来自浏览器或者服务器传过来的信息,可以对信息进行窃取、修改请求并返回等操作,处理后发送个服务器或者浏览器
原因:
-
明文传输
-
信息篡改不可知
-
对方身份为未验证
中间人身份可以是:恶意的webview
、路由器、ISP
等
二、防御篇
1、防御XSS
措施
-
永远不信任用户的提交内容
-
不要将用户提交内容直接转换为DOM
-
XSS
--- 现成工具
-
前端
-
主流框架默认防御
XSS
-
google-closure-library
-
-
服务端(Node)
-
DOMPurify
-
需要注意的几种需求
-
String--->DOM:渲染前进行扫描
-
需要添加
svg
图片时进行扫描,因为svg
里是可以添加script标签的 -
避免用户自定义跳转行为,如无法避免应进行校验
-
允许用户自定义样式需额外注意
内容安全策略(Content Security Policy)--- CSP
功能
-
判断那些源(域名)被认为是安全的
-
来自安全源的脚本可以执行,否则直接抛错
-
对内联script标签直接报错
2、CSRF
的防御
请求头部
-
if 伪造请求 === 异常来源
-
then 限制请求来源 ----- > 限制伪造请求
-
Origin
-
同源请求中,GET+HEAD 不发送
-
-
Referer
token
先有页面,后有请求
-
if (请求来自合法页面)
-
then (服务求接收过页面请求)
-
then (服务器可以表示)
anti-pattern
GET !== GET + POST
get请求和post请求按照其使用场景严格区分,避免因使用逻辑问题所造成的用户信息泄露
SameSite Cookie(避免用户信息被携带)
场景:CSRF
攻击利用用户权限进行攻击,然而请求访问并不携带Cookie ,是用户的页面只能由用户本人所使用,避免了跨站伪造请求的行为
限制内容:
-
Cookie domain
domain表示的是cookie所在的域,默认为请求的地址
-
页面域名
3、Injection的防御
方法:
-
找到项目中查询
SQL
的地方 -
使用prepared statement
注意事项:
-
最小权限原则
-
简历允许名单 + 过滤
-
对URL类型参数尽心协议、域名、ip等限制
4、DOS的防御
(1)、Redex
Dos
方法:
-
Code Review(避免使用贪婪匹配的方式)
-
代码扫描 + 正则性能测试
-
禁止使用用户提供的正则
(2)、DDOS
方法:
-
流量治理
-
负载均衡
-
API
网关 -
CDN
-
-
快速自动扩容
-
非核心服务降级
5、中间人的防御(传输层)
对于利用中间人进行防御从HTTPS
出发
HTTPS
部分特性
-
可靠性:使用加密避免铭文传输
-
TLS
的四次握手
-
-
完整性:使用MAC验证,防止篡改
-
传输: 加密信息 + 加密信息的hash值
-
接收:重新计算并比对依次为校验信息是否被篡改
-
-
不可抵赖性: 数字签名