Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

为了防止csrf攻击,通常除了在cookie设置token,一般还要在表单上有一个隐藏的token。而这两个一般是由服务器传过来的,那如果这个表单上的token直接用js获取cookie上token作为其值是否安全?

// HTML 有一个隐藏域token
<input id="token" type="hidden" name="token" value="" />
// JavaScript(jQuery) js将cookie中token作为隐藏域token的值
var cookie_token = $.cookie('token');
$('#token').val(cookie_token);
// 请求时带上这个隐藏域token和cookie中的token,这样做Web是否可能遭受csrf攻击,或者其它什么安全风险?

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
116 views
Welcome To Ask or Share your Answers For Others

1 Answer

  1. cookie 会自动上传
  2. 表单里的 <input type="hidden"> 也会自动上传
  3. 既然都自动上传了,你再用 js 上传还有意义么?
  4. 最大的不安全就是开发人员根本不懂危险从哪里来,瞎看瞎整

然后说下 CSRF。

  1. CSRF = A 网站的用户被欺骗,在 B 网站提交表单到 A 网站,进行非预期的操作
  2. CSRF 的要点:

    1. 在 A 站外构建攻击
    2. 用户保留着 A 站的身份认证(多数是 cookie)
  3. 防御 CSRF 的方式:

    1. 从 B 站发起的请求无法使用 A 站的身份认证,也就是 cookie 里的 sameSite
    2. A 站不只以单一条件验证用户身份。这个方案就很多了,你问题里的表单里暗藏 csrf_token 是其中之一,SPA 里也可以在登录后单独请求一次 token,然后放 header
  4. 所以你的方案很明显不行

最后说下建议。

不要问这样行不行,那样行不行。搞清楚原理,搞清楚方案的逻辑,选择合适的、可靠的方案。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...