浏览器安全之CSRF

之前所提及XSS攻击最终都是将恶意脚本注入到页面中,进行后续操作。还有另一种类型,跨站请求伪造(CSRF)攻击。

CSRF攻击

  • 在用户登录了A网站后,拥有了A网站的登录状态。
  • 这时就可进行一些和当前账户相关的请求,伪造请求就可模拟真实用户进行操作。
  • 伪造请求通常在被诱导打开的第三方网站进行。

伪造请求的形式

  • 伪造请求在打开的第三方页面中进行,可能会隐藏在各种加载第三方资源的方式中。
  • 比如img标签src属性、表单数据的提交、诱导性超链接等,get类型、post类型都可伪造。

防止CSRF攻击

依据上述CSRF特点:

  • 基于用户登录状态。
  • 在第三方页面伪造请求。
    防范可有如下方面:

Cookie中SameSite字段

  • 伪造的请求之所以可以利用用户登录状态,是因为发送请求时会携带Cookie信息,而Cookies中常常存有用户登录状态。
  • 在Cookie字段中设置SameSite字段值,声明是发送请求时是否允许携带Cookie。

SameSite字段值

Strict

完全禁止第三方的Cookie发送。

Lax

额外允许第三方网站发起Get请求时发送Cookie,是当前的默认值。

None

不做任何限制,任意情况下都可发送Cookie,是以前的默认值。

验证请求的来源站点

  • 如果伪造请求成功发送到了服务器端,服务器可检验请求的来源是否可靠,是否有伪造的可能性。
  • 可通过报文的Origin字段和Referer字段获取到请求的来源。
  • 其中,Origin字段不包含来源的路径信息,Referer包含完整的路径信息。
  • 优先判断Origin更为合理。

CSRF Token

  • 用户在请求页面时,服务端可生成Token(也就是一串字符),插入到返回的页面中。
  • 在发送请求时,需携带页面中的Token。而第三方网站获取不到页面中的内容,获取不到Token。
  • 服务端接收到请求时,验证Token,不正确时拒绝请求。

你可能感兴趣的:(浏览器安全之CSRF)