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