关于防范csrf攻击基于token鉴权

在web开发中,之前都使用cookie + session方式来实现身份认证鉴权。但是现在前后端分离,以及终端有可能不支持cookie的情况下,一般都采用token方式。现在系统设计思路如下: 服务端会生成两个token,一个是认证请求token(accesstoken),一个是刷新token(refreshtoken)。 accesstoken设置过期时间为两个小时,refreshtoken设置过期时间为30天。accesstoken两个小时到期后,客户端会使用refreshtoken来刷新accesstoken。refreshtoken过期后,会重新登录。 具体步骤如下: 客户端输入账号登录成功后或者微信扫描成功,服务端会自动生成accesstoken和refreshtoken返给客户端。accesstoken是根据jwt规则生成。refreshtoken生成规规格就是:时间戳+随机数。然后把refreshtoken作为redis的key存入redis中,aceesstoken作为value。 客户端拿到两个token后保存起来,每次请求带上accesstoken。当服务端返回accesstoken错误时,会自动跳转到登录页面。当服务端返回accesstoken过期时,使用refreshtoken去刷新accesstoken。然后在继续拿新accesstoken请求。 现在有两个问题: 一是,我这么设计思路是否合理,在能有效防范XSS攻击情况下,是否能有效防范csrf等安全攻击?还有没有更好的方式? 二是,如果是账号登录,在请求体里返回两个token,以及微信扫描登录重定向页面时,在URL上拼接上两个token。这么做,是否安全?

转载于:https://www.cnblogs.com/liangdaye/p/9903290.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSRF(Cross-Site Request Forgery)攻击是指攻击者通过伪造用户的请求,达到恶意操作的目的。为了CSRF攻击,通常会使用CSRF-Token来验证请求的合法性。根据引用所述,CSRF-Token的生成位置和嵌入位置是关键。 CSRF-Token的生成位置可以在服务端或客户端进行。对于服务端生成的CSRF-Token,它通常是通过在用户会话中生成一个唯一的随机字符串,并将其与用户会话关联起来。而对于客户端生成的CSRF-Token,它通常是通过JavaScript生成,并将其嵌入到页面中。 CSRF-Token的嵌入位置有两种常见的方式。一种是将CSRF-Token嵌入到请求头中,通常使用字段名称如X-CSRF-Token或X-XSRF-Token,并将CSRF-Token作为该字段的值。另一种是将CSRF-Token嵌入到请求参数中。 根据引用所示的示例代码,如果将CSRF-Token嵌入到请求头中,可以在请求头中加入相应的字段,并将获取到的CSRF-Token作为该字段的值。而如果将CSRF-Token嵌入到请求参数中,则需要将CSRF-Token作为请求参数的一部分发送。 因此,CSRF-Token的使用方式和具体的嵌入位置取决于具体的应用程序和实现方式。在实际爬虫过程中,我们需要根据CSRF-Token的具体位置来选择相应的方法来获取和嵌入CSRF-Token。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【笔记】Python3|爬虫请求 CSRF-Token 时如何获取TokenToken过期、处理 CSRF-Token 需要注意的问题及...](https://blog.csdn.net/qq_46106285/article/details/129649259)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值