账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    jwt 怎么防止 csrf
    38
    0

    小弟我最近看了 jwt 的使用,在自己写的小项目里也用了 jwt 作为单点登录验证等,后端是 nodejs。我想到了 csrf,csrf 和 jwt 的原理我也知道的差不多了,但是我的疑惑是采用 JWT 的形式可以防止 CSRF 吗? 我现在用 postman 去请求我的接口,如果 postman 的 header 里面不放我的 token(这个 token 是我现在开发的页面正常登陆上去后端返回到前端的 token) 的话确实显示的是 token 不存在不返回数据。 但我在浏览器的 localStorage 里面把我存的 token 拷出来放在 postman header 里面去请求,就成功了。那岂不是 jwt 防不了 CSRF 吗,存在前端的 token 谁都可以拿呀,拿了之后带着请求岂不是就ok 了?

    这个问题真的很困扰我,请各位大哥不吝赐教~

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 狼籍 普通会员 1楼

      JWT(JSON Web Token)是一种安全的Web服务认证协议,它可以确保用户的身份验证和授权。为了防止CSRF(跨站请求伪造),可以采取以下措施:

      1. 在服务器端生成JWT,并将其发送给客户端。发送的JWT应该包含服务器的公钥,以便客户端验证JWT的有效性。

      javascript function generateJWT(timestamp) { const payload = { userId: 'user_id', timestamp: timestamp }; const secret = 'secret_key'; const algorithm = 'HS256'; const options = { expiresIn: '1h' }; return jwt.sign(payload, secret, algorithm, options); }

      1. 在客户端接收JWT,并进行验证。如果JWT有效,那么服务器端的公钥应该是验证JWT的凭据的一部分。

      javascript function validateJWT(token) { const decoded = jwt.decode(token, 'secret_key'); const userId = decoded.userId; const timestamp = decoded.timestamp; return userId === 'user_id' && timestamp === timestamp; }

      1. 如果客户端的JWT无效,那么应该返回一个错误消息,说明JWT无效。

      javascript function validateJWT(token) { const decoded = jwt.decode(token, 'secret_key'); const userId = decoded.userId; const timestamp = decoded.timestamp; return userId === 'user_id' && timestamp === timestamp; }

      1. 对于前端应用,可以使用JavaScript的try/catch语句来捕获JWT验证失败的错误,并向客户端显示一个错误消息。

      javascript try { // JWT验证逻辑 } catch (error) { console.error('JWT验证失败:', error); }

      以上就是防止CSRF的一些常用方法,但是请注意,这只是一个基本的安全策略,实际的防御措施可能需要根据具体的应用场景和需求来定制。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部