前端安全
一、 XSS 攻击
Cross Site Script, 跨站脚本攻击。
是指攻击者注入恶意脚本对客户端网页进行篡改,从而在用户浏览网页时,控制浏览器或者获取用户隐私数据。
- 容易发生的场景
数据从一个不可靠的链接进入到一个web应用程序。 - XSS攻击的共同点
将一些隐私数据如cookie、session发送给攻击者,将受害者重定向到一个由攻击者控制的网站,进行恶意操作。 - XSS攻击的类型
- 反射型(非持久型)
该攻击方式通常诱使用户点击一个恶意链接,或者提交一个表单, 此时,向用户访问的网站注入恶意脚本。 - 存储型(持久型)
把用户输入的数据(带有恶意脚本)存储在服务器端。当浏览器请求数据时,服务器返回脚本并执行。
常见的场景是: 攻击者在社区或论坛上写下一篇包含恶意 js代码的评论。发表后,所有访问该评论的用户,都会在他们的浏览器中执行这段恶意代码。 - 基于DOM
修改页面的DOM结构。这是纯粹发生在客户端的攻击。
- XSS攻击的防范
- 浏览器内置CSP
通过 Content-Security-Policy HTTP头来开启CS,建立白名单,规定只能执行特定来源的代码:
只允许加载本站资源: default-src ‘self’
只允许加载HTTPS协议图片: img-src https://* - HttpOnly
通过JavaScript的 Document.cookie API来设置 HttpOnly 标记。对于设置了HttpOnly属性的cookie,js脚本将无法读取到cookie信息,窃取cookie内容,这样就增加了cookie的安全性 - XSS Filter
检查用户输入的数据中是否包含 <,>,script 等特殊字符,若存在,则对器过滤或编码。
二、 CSRF 攻击
Cross Site Request Forgery, 伪造跨站请求。
利用用户的登录态发起恶意请求,从而在未授权的情况下,执行在权限保护下的操作。
这个攻击过程是借助受害者的 Cookie 骗取服务器的信任。但并不能拿到 Cookie,也看不到 Cookie 的内容。而对于服务器返回的结果,由于浏览器同源策略的限制,攻击者也无法进行解析。
因此,攻击者无法从返回的结果中得到任何东西,只能给服务器发送请求,执行描述的命令,在服务器端修改数据,而非窃取服务器中的数据。
- CSRF攻击的防范
验证码
CSRF攻击通常是在用户不知情的情况下发起了网络请求。而验证码会保证用户必须与应用进行交互,才能完成请求。请求地址添加token验证
在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器验证它,如果请求中没有 token 或者 token 内容不正确则拒绝该请求。
对于GET请求,Token将附在请求地址之后。
对于 POST 请求来说,要在 form 的最后加上<input type=”hidden” name=”csrftoken” value=”tokenvalue”/>
当用户从客户端得到了Token,再次提交给服务器的时候,服务器需要判断Token的有效性samesite 属性 设置为lax
Cookie 的SameSite属性用来限制第三方 Cookie,从而减少安全风险。
它可以设置三个值:
- Strict 只允许同站请求携带 Cookie,即 只有当前网页的 URL 与请求目标一致,才会带上 Cookie
- Lax 大多数情况也是不发送第三方 Cookie,但是导航到目标网址的 Get 请求除外
导航到目标网址的 GET 请求,只包括三种情况:链接,预加载请求,GET 表单 - None 显示关闭SameSite属性,将其设为None。
不过,前提是必须同时设置Secure属性(secure 的作用是:Cookie 只能通过 HTTPS 协议发送),否则无效。
响应头中的 Set-Cookie,这个属于最常用的方式
CSRF 补充
由第三方网站引导发出的 Cookie,称为第三方 Cookie。
它除了用于 CSRF 攻击,还可以用于用户追踪。
比如,forum 在第三方网站插入一张看不见的图片。<img src="forum.com" style="visibility:hidden;">
浏览器加载上面代码时,就会向 forum 发出带有 Cookie 的请求,
从而 forum 就会知道你是谁,访问了什么网站。
三、HTTPS 中间人攻击
Man-in-the-middle attack
是一种网络攻击方法。
攻击者悄悄的躲在通信双方之间,窃听甚至篡改通信信息。而通信双方并不知道消息已经被截获甚至篡改了。
成功的中间人攻击主要有两个不同的阶段:拦截和解密。
拦截
攻击者在用户数据在到达目标设备前,进行拦截,并通过攻击者的网络。
被动攻击: 攻击者向公众提供免费的恶意 WiFi 热点,一旦有受害者连接了该热点,攻击者就能完全了解所有的在线数据交换。
主动攻击:
ARP 欺骗: 攻击者利用 ARP (Address Resolution Protocol) 的漏洞,通过冒充网关或其他主机,使得到达网关或其他主机的流量通过攻击者主机进行转发。
DNS 欺骗: 攻击者冒充域名服务器,将受害者查询的 IP 地址转发到攻击者的 IP 地址。解密
- SSL 劫持(伪造证书)
攻击者在 TLS 握手期间拦截到服务器返回的公钥后,将服务器的公钥替换成自己的公钥,并返回给客户端。
因为是伪造的证书,所以客户端在校验证书过程中会提示证书错误,若用户仍选择继续操作,此时中间人便能获取与服务端的通信数据。
- SSL 剥离
攻击者拦截到用户到服务器的请求后,攻击者继续和服务器保持 HTTPS 连接,并与用户降级为不安全的 HTTP 连接。
服务器可以通过开启 HSTS(HTTP Strict Transport Security)策略,
告知浏览器必须使用 HTTPS 连接。但是有个缺点是用户首次访问时因还未收到 HSTS 响应头而不受保护。
- MITM 攻击的防范
- 对开发者:
- 支持 HTTPS。
- 开启 HSTS 策略。
- 默认情况下,cookie不会带secure选项,故http或 https传输都会携带cookie传给服务器。
当请求是HTTPS或者其他安全协议时,包含 secure 选项(即:设置secure=true)的 cookie ,才能被发送至服务器。
- 对用户:
- 避免连接不知名的 WiFi 热点。
- 不忽略不安全的浏览器通知。
- 不下载来源不明的证书。
- 本文作者:JSZ
- 本文链接:blog.vampuck.com/2022/06/16/xss_csrf/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!