(一)xss脚本注入——插入恶意脚本
1. 什么是xss
- Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击。
- 攻击者通过在目标网站上注入恶意脚本(比如在url中输入、在评论框中输入HTML代码和客户端脚本js等),使之在用户的浏览器上运行,然后引导其他用户点击某链接或浏览页面,实现对用户游览器的控制。
- 利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。
2. XSS预防:
- cookie加密
- 字符串长度验证
- 对用户输入的敏感符号做过滤或转码
- 定期检查数据库内容是否包含敏感代码
- 所有打印输出的语句,都要进行html转码过滤,把字符转换成 转义字符
- 常见转码为:
<编码为<>编码为>&编码为&'编码为'"编码为"- 空格 编码为
(二)CSRF跨域请求伪造——隐式身份验证机制,模仿用户的操作
1. 什么是csrf?
- 一般习惯上把通过 XSS 来实现的 CSRF 称为 XSRF。
- CSRF攻击是源于Web的隐式身份验证机制!
Web的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,但却无法保证该请求是用户批准发送的。 - CSRF攻击者在用户已经登录目标网站之后
诱使用户访问一个攻击页面,利用目标网站对用户的信任,以用户身份在攻击页面对目标网站发起伪造用户操作的请求,达到攻击目的。
(在未退出A网站的前提下访问B,B使用A的cookie去访问服务器)
2.csrf 攻击原理⭐⭐⭐⭐
- 跨域请求伪造
用户登录了 A 页在不退出登录的情况下,访问了 危险网站B 页,这个时候 B 页带着 A 页的 cookie 向 A 的服务端发起请求,会让服务端认为这个是可信任用户,从而达到攻击的目的 - 实现方式: 在 B 页中可以使用一个隐藏的 iframe 来向 A 页发起请求,只要用户没有登出 A 网站,临时 cookie 一直保存在内存中,这个时候就可以危险网站B就可以拿着 cookie 为所欲为了
- 防御方式
添加token
3.CSRF预防:
- CSRF攻击的一般是由服务端解决。
- 使用验证码或者
token验证,每次提交表单时需要带上 token(伪造者访问不到),如果 token 不合法,服务器拒绝请求 - 通过 host+origin 来判断是否为非法用户
- 给 Cookie 设置 SameSite属性,来限制第三方 Cookie,里面有三个值 strict、lax、none
SameSite属性值 strict 最严格,完全禁止第三方的 cookie;但是体验不好,如果当前有一个 github 链接,点击跳转就不会携带任何 cookie,跳转过去一直是未登录状态的 lax 稍微放宽了一些,大多不发送 cookie,但除了 get 请求(只包括三种情况:链接、预加载请求、get 表单)以外 none 关闭该设置
3.CSRF举例:
(三)点击劫持
- 点击劫持是指利用 iframe+css 的 opacity 把危险网址设置为透明覆盖到安全的网址上面,使用户误以为在安全网址下操作。
- 防范:
在 http 中配置 X-frame-options 设置为 deny 可以禁止被 iframe 嵌入
[ 问题回顾 ]
- 1.什么是xss?什么是csrf?⭐⭐⭐⭐⭐