浏览器(客户端)如何能从cookie中获取保存的token并作为参数发送给server端?

sealdh 2020-05-14 06:49:10
大家可能对防止CSRF攻击的token方法并不陌生,据我的理解,过程应该是如下:

1. 浏览器端(客户端)先登录某一网站,比如:www.myweb.com/index.asp,并通过身份验证(具体过程省略)。
2. WebServer(服务器端)生成一个名为:myToken=“12345678”的token,并发送给客户端。
3. 客户端保存以上token,存于本地的cookie中。
4. 客户端在后续访问服务器的请求中,带上以上token参数,具体的,可以把token作为一个URL参数,形如:www.myweb.com/index.asp?id=xxx&myToken=12345678; 或者是可把token以HTTP Header的形式发送。

我的问题是:客户端,也就是浏览器端,是如何做到以上第4步的,即:客户端如何从cookie获取某一项(如上面的myToken),并把它作为参数(或者存于HTTP header中),继而发送给服务器的? 不知道是不是要写特定的代码实现相应的功能?谢谢!

...全文
3436 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
浴火_凤凰 2020-07-01
  • 打赏
  • 举报
回复
1.token在cookie里 在浏览器下次访问的时候 会自动带上 无需写一行代码。 2.发送的时候token在URL或者Header里 这种肯定需要写JS代码,比如ajax 发送的时候可以设置header的。 防御CSRF的重点不在发送的时候token在哪。 重点是返回的时候token在哪。就是让想干坏事的人获取token的难度怎样最大化。 一般情况下 你把token放在header返回 坏人是肯定获取不到token的。 因为JS有跨域之说。浏览器会自动拦截的。 还有可以设置token的有效期很短,禁止跨域访问等等来防御CSRF
sha虫剂 2020-07-01
  • 打赏
  • 举报
回复
你的问题就是拿到token之后怎么放是吧,其实上面已经有人给出答案了,做请求拦截,亦或者路由守卫,在里面加入token,至于加在哪里,这就是看你自己怎么写了 一般情况下都是自己封装在request这个请求文件里的,我贴一部分我的请求拦截 你应该能看懂 // request拦截器 service.interceptors.request.use( config => { //此处进行token等数据处理 config.headers = { "Content-Type": "application/json;charset=UTF-8" }; var token = Cookies.get("token"); config.headers["Authorization"] = `Bearer ${token}`; return config; }, error => { // Do something with request error Promise.reject(error); } );
哎算了 2020-05-15
  • 打赏
  • 举报
回复
如果是登录使用,字符串组合可以包含用户名,判断哪个用户发起的请求,如果只是预防是否合法途径过来的,可以把域名包含在里面,正常访问的地址应该可以生成你制定的加密字符串,非法途径登录的应该不知道你的加密字符串,所以判断不合法。前提它没有破解你的加密方法,你可以把加密组合和特殊字符安全码再复杂点,这样做API接口,授权的通过你制定加密办法过来,验证通过合法,验证不通过不合法。
哎算了 2020-05-15
  • 打赏
  • 举报
回复
服务器端获取这些值也可以单独写成为一个文件,include一下,每个页面头部引用一下。
引用 8 楼 sealdh 的回复:
[quote=引用 7 楼 哎算了 的回复:] myToken=“12345678” 把这个传给服务器有三种方法。 1.第一种就是直接读取cookies,request.cookies("保存本地的cookies文件名") 2.地址栏参数,比如你访问addnews.asp这个页面,addnews.asp?myToken=12345678,这个页面就要通过request("myToken")获取 3.表单里传递,表单里放一隐藏字段<input type="hidden" name="myToken" value="12345678">,<form action="addnews.asp" >,addnews.asp这个页面就要通过request("myToken")获取
我不确定这是不是我要的答案,其实我们的问题是:客户端,即浏览器这一边,是如何生成带token的URL的,比如:客户端在后续的访问中,要访问:addnews.asp?myToken=12345678,这个网址,那我的问题是:这个网址是如何生成的?特别是其中token的部分? 我的问题强调的是客户端向服务器发送的带token的URL是如何生成的,而不是服务器收到这个网址后,如何解析这个URL。 [/quote] myToken=12345678 这个值具体如何生成,应该是保密的东西,只有你知道才对。 当然你可以这样做,取当前用户名+当前日期+安全码(具体自己设定,比如AX@123_1),比如用户名是iamxx,今天是2020-5-15 ,组合起来应该是这样一串字符:iamxx20200515AX@123_1,这个字符串什么时候生成,等你用户名和密码验证通过生成,可以保存到数据库。客户端也按照这样办法去组合生成,然后通过地址栏传递过去,跟保存在数据库里的值进行比对,一致说明是安全的。 当然这个字符串实际使用需要加密,否则谁都能看见。 加密方法很多,MD5,DES,AES,SHA1,RSA,你选择一种。 例如myToken=iamxx20200515AX@123_1,iamxx20200515AX@123_1经过sha1加密就是:myToken=a7e82df8b06172950243d8aa2064ac3c2478230f,这样谁都不知道你怎么生成的,你客户端也进行sha1加密,那么客户端跟服务器端就应该一模一样了,可以判断是否安全。
_念_ 2020-05-14
  • 打赏
  • 举报
回复
cookie中的东西 会自动带到后端 让他自己cookie中取就是了
sealdh 2020-05-14
  • 打赏
  • 举报
回复
引用 7 楼 哎算了 的回复:
myToken=“12345678” 把这个传给服务器有三种方法。 1.第一种就是直接读取cookies,request.cookies("保存本地的cookies文件名") 2.地址栏参数,比如你访问addnews.asp这个页面,addnews.asp?myToken=12345678,这个页面就要通过request("myToken")获取 3.表单里传递,表单里放一隐藏字段<input type="hidden" name="myToken" value="12345678">,<form action="addnews.asp" >,addnews.asp这个页面就要通过request("myToken")获取
我不确定这是不是我要的答案,其实我们的问题是:客户端,即浏览器这一边,是如何生成带token的URL的,比如:客户端在后续的访问中,要访问:addnews.asp?myToken=12345678,这个网址,那我的问题是:这个网址是如何生成的?特别是其中token的部分? 我的问题强调的是客户端向服务器发送的带token的URL是如何生成的,而不是服务器收到这个网址后,如何解析这个URL。
console.log( ) 2020-05-14
  • 打赏
  • 举报
回复
登录时向后台发送账号密码进行验证,验证通过返回给你token
哎算了 2020-05-14
  • 打赏
  • 举报
回复
myToken=“12345678” 把这个传给服务器有三种方法。 1.第一种就是直接读取cookies,request.cookies("保存本地的cookies文件名") 2.地址栏参数,比如你访问addnews.asp这个页面,addnews.asp?myToken=12345678,这个页面就要通过request("myToken")获取 3.表单里传递,表单里放一隐藏字段<input type="hidden" name="myToken" value="12345678">,<form action="addnews.asp" >,addnews.asp这个页面就要通过request("myToken")获取
console.log( ) 2020-05-14
  • 打赏
  • 举报
回复
引用 4 楼 sealdh 的回复:
[quote=引用 1 楼 console.log( ) 的回复:] 登录时向后台发送账号密码进行验证,验证通过返回给你token
你没仔细看我的问题。我问的不是server如何返回token,而是client端如何通过参数或者http header发送给server.[/quote] 或者封装请求时 给请求头直接加
console.log( ) 2020-05-14
  • 打赏
  • 举报
回复
引用 4 楼 sealdh 的回复:
[quote=引用 1 楼 console.log( ) 的回复:] 登录时向后台发送账号密码进行验证,验证通过返回给你token
你没仔细看我的问题。我问的不是server如何返回token,而是client端如何通过参数或者http header发送给server.[/quote] 请求拦截里添加
sealdh 2020-05-14
  • 打赏
  • 举报
回复
引用 1 楼 console.log( ) 的回复:
登录时向后台发送账号密码进行验证,验证通过返回给你token
你没仔细看我的问题。我问的不是server如何返回token,而是client端如何通过参数或者http header发送给server.
sealdh 2020-05-14
  • 打赏
  • 举报
回复
引用 2 楼 nian_cj 的回复:
cookie中的东西 会自动带到后端 让他自己cookie中取就是了
你没仔细看我的问题,是token如何单独通过参数或者http header发给server,而不是cookie自动上传,通过cookie自动上传的,没法防CSRF攻击。

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧