XSS
XSS (Cross-Site Scripting)跨站脚本攻击,缩写与CSS重叠因此叫XSS。跨站脚本攻击是指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的html或者js进行的一种攻击
跨站脚本攻击很有可能造成以下影响
- 利用虚假表单骗取用户信息
- 利用脚本窃取用户cookie,被害者在不知情的情况下,帮助攻击者发送恶意请求
XSS-反射型:url参数注入
http://127.0.0.1/?from=<script>alert(1)</script>
http://127.0.0.1/?from=<script src='localhost/cookie.js'></script>
XSS-存储型:存储到DB后读取时注入
常见于需要用户输入的地方
//评论
内容超级棒<script src="xxxx.js"></script>
XSS攻击危害(script能干啥就能干啥)
- 获取页面数据
- 获取Cookie
- 偷取网站数据,用户资料
防范手段
- 启用xss过滤
- CSP
内容安全策略,是一个附加的安全层,用于帮助检测和缓解某些类型的攻击,包括跨站脚本(xss)和数据注入等攻击,CSP本质上就是建立白名单,开发者明确告诉浏览器哪些外部资源可以加载和执行
//只允许加载本站资源
Content-Security-Policy:default-src 'self'
//只允许加载HTTPS协议图片
Content-Security-Policy: img-src https://*
//不允许加载任何来源框架
Content-Security-Policy: child-src 'none'
//ctx.set('Content-Security-Policy',"default-src 'self'")
// 尝试加载下http://127.0.0.1:8080/?form=<script src='xxxx.js'></script>
- 转义字符
- httpOnly Cookie
这是预防XSS攻击窃取用户Cookie的最有效的防御手段,web应用在设置cookie时,将其属性设为httpOnly,就可以薄面该网页的cookie被客户端恶意js窃取。
CSRF
跨站请求伪造,利用已登录的身份在用户不知情的情况下以用户的名义完成非法操作
CSRF攻击危害
- 利用用户登录状态,完成业务请求
防范手段
- 禁止第三方网站带Cookie(考虑兼容性)
- 检查Referer Check(https不发送referer)
- 验证码
点击劫持
点击劫持是一种视觉欺骗的攻击手段,攻击者将需要点击的网站通过iframe嵌套的方式嵌入到自己的网页中,并将iframe透明,
防范方式
- X-Frame-OPTIONS
X-FRAME-OPTIONS是一个http响应头,现代浏览器有很好的支持,这个http相应头就是为了防御用iframe嵌套的点击劫持
DENY:表示页面不允许通过iframe的方式展示
SMEORIGIN:表示页面可以在相同域名使用iframe展示
ALLOW-FROM:表示页面可以在指定来源的iframe中展示
ctx.set('X-FRAME-OPTIONS','DENY')
SQL注入
SELECT * FROM User WHERE username = `${params.username}` && password=`${params.password}`
防范方法
建议使用数据库提供参数化查询接口**,参数化的语句使用参数而不是将用户输入变量嵌入到sql中
了解OS注入
OS注入和SQL差不多,SQL注入针对数据库,OS注入针对操作系统,通过WEB应用执行非法的操作系统命令。只要在能调用shell函数的地方就能有存在被攻击的风险
const exec = require('xx').exec
let params = {用户输入}
https://github.com/xx.git && rm -rf *
请求劫持
DNS: dns服务器被篡改,修改了域名解析的结果,使得访问ip不是预期
http劫持:
了解DDOS
DDOS不是一种攻击,而是一大类攻击的总称,有几十种类型,网站运行的各个环节都可以是攻击目标,只要把一个环节突破,使得整个流程跑不起来,就达到了目的。 常见的攻击方式
- SYN Flood
次攻击通过向目标发送具有欺骗性源IP地址的大量TCP初始连接请求SYN数据包来利用TCP握手,目标及其响应每个连接请求,然后等待握手的最后一步,这一步从未发生,耗尽进程中的目标资源
- http flood
类似于同时在多个不同计算上反复按浏览器刷新,大量http请求泛滥
防范手段
备份网站,http请求拦截,高防IP
密码安全
- 严禁铭文存储
- 变换复杂度要求
- 加盐
人机验证与验证码
服务端随机生成抠图和带有抠图的背景图片,服务端保存随机抠图的位置 前端实现滑动,将抠图拼在阴影上,获取滑动的距离 将滑动的距离传入服务端,服务端校验差值是否在允许范围
session管理
对于cookie重要性不言而喻,特别是动态的web应用,如http这样的无状态协议的,需要使用cookie来维持状态
- secure 告诉浏览器,仅在请求时通过https传输时才传递cookie
- HTTPOnly禁止js脚本获取cookie