XSS与CSRF攻击

一.XSS

1.什么是XSS

XSS 全称是 Cross Site Scripting(即跨站脚本),为了和 CSS 区分,故叫它XSS。XSS 攻击是指浏览器中执行恶意脚本(无论是跨域还是同域),从而拿到用户的信息并进行操作。

  • 窃取Cookie。
  • 监听用户行为,比如输入账号密码后直接发送到黑客服务器。
  • 修改 DOM 伪造登录表单。
  • 在页面中生成浮窗广告。

2.XSS 攻击的实现有三种方式——存储型、反射型和文档型

  • 存储型

存储型的 XSS 将脚本存储到了服务端的数据库,然后在客户端执行这些脚本,从而达到攻击的效果。 例如:留言评论区提交一段脚本代码

  • 反射型

反射型XSS指的是恶意脚本作为网络请求的一部分/参数。经过服务器,然后再反射到HTML文档中,执行解析。和存储型不一样的是,服务器并不会存储这些恶意脚本

攻击者可以直接通过 URL 
(类似:https://xxx.com/xxx?default=<script>alert(document.cookie)</script>
  • 文档型

文档型的 XSS 攻击并不会经过服务端,而是作为中间人的角色,在数据传输过程劫持到网络数据包,然后修改里面的 html 文档! 这样的劫持方式包括WIFI路由器劫持或者本地恶意软件等。

如何防御

  • 利用CSP

CSP 本质上就是建立白名单,开发者明确告诉浏览器哪些外部资源可以加载和执行。我们只需要配置规则,如何拦截是由浏览器自己实现的。我们可以通过这种方式来尽量减少 XSS 攻击。
具体来说可以完成以下功能:
1.限制其他域下的资源加载。
2.禁止向其它域提交数据。
3.提供上报机制,能帮助我们及时发现 XSS 攻击。

通常可以通过两种方式来开启 CSP:
1.设置 HTTP Header 中的 Content-Security-Policy
2.设置 meta 标签的方式 <meta http-equiv="Content-Security-Policy">


例如:只允许加载本站资源
Content-Security-Policy: default-src 'self'
  • 利用httpOnly

很多 XSS 攻击脚本都是用来窃取Cookie, 而设置 Cookie 的 HttpOnly 属性后,JavaScript 便无法读取 Cookie 的值。这样也能很好的防范 XSS 攻击。

  • 转义字符:建立白名单

二.CSRF

什么是CSRF

CSRF(Cross-site request forgery), 即跨站请求伪造,指的是黑客诱导用户点击链接,打开黑客的网站,然后黑客利用用户目前的登录状态发起跨站请求。

如何防御

  • 利用Cookie的SameSite属性
SameSite可以设置为三个值,Strict、Lax和None。
a. 在Strict模式下,浏览器完全禁止第三方请求携带Cookie。
比如请求sanyuan.com网站只能在sanyuan.com域名当中请求才能携带 Cookie,在其他网站请求都不能。

b. 在Lax模式,就宽松一点了,但是只能在 get 方法提交表单况或者a 标签发送 get 请求的情况下可以携带 Cookie,其他情况均不能。

c. 在None模式下,也就是默认模式,请求会自动携带上 Cookie。
  • 验证来源站点 Referer Check

Origin只包含域名信息,而Referer包含了具体的 URL 路径。

  • CSRF Token

首先,浏览器向服务器发送请求时,服务器生成一个字符串,将其植入到返回的页面中。
然后浏览器如果要发送请求,就必须带上这个字符串,然后服务器来验证是否合法,如果不合法则不予响应。这个字符串也就是CSRF Token,通常第三方站点无法拿到这个 token, 因此也就是被服务器给拒绝

  • 验证码

应用程序和用户进行交互过程中,特别是账户交易这种核心步骤,强制用户输入验证码,才能完成最终请求。在通常情况下,验证码够很好地遏制CSRF攻击。\

参考:
常见六大Web 安全攻防解析
谈谈 CSRF 攻击

猜你喜欢

转载自blog.csdn.net/HZ___ZH/article/details/111053980