共计 813 个字符,预计需要花费 3 分钟才能阅读完成。
from: http://www.75team.com/archives/729
什么是 double cookie 验证
double cookie 验证是利用 cookie 来验证请求合法性的一种方法。
一个 double cookie 验证的 url 形如
http://a.com?c=cookie
向服务器请求的 url 带上 cookie,服务器收到请求后,解析出 url 中的 cookie 和 http 请求带过来的 cookie 进行对比。如果一样就说明请求合法,不一样就可以判定请求非法。
因为是用 url 中的 cookie 和 http 请求中的 cookie 进行验证,所以叫 double cookie 验证。
验证原理
url 是客户端 javascript 生成的,javascript 可以读取 cookie。
url 可以从任意客户端访问,但是只有一个客户端的 http 请求带给服务器的 cookie 和 url 中的 cookie 是一致的。
注意事项
- 用来验证的 cookie 在每个客户端必须唯一
- 用来验证的 cookie 不能是敏感信息。比如登录用户的 token 不能作为验证的 cookie
应用场景
double cookie 验证不能判断用户修改本地 cookie 然后再进行的访问。但是没有关系。举个应用场景。
比如一个网站的 评分功能的请求是这样的
http://a.com?score=100&id=10000
如果有人把这个 url 发到网上,引诱其它用户来点击,那么就会生成大量的评分请求。这时就可以用 double cookie 验证了。因为很难让点击这个链接的人先修改本地 cookie 然后再点击链接
使用建议
有的同学喜欢把 cookie 做个变换,防止别人一眼看出来是用哪个 cookie 做的验证。没必要这样做,也不应该这样做。
- 变换的方法一定会暴露在客户端
- 验证的目的不是为了防止有意伪造
- 对 cooie 做变换的方法如果不得当,可能会对 cookie 的结构造成依赖。如果哪天 cookie 的结构改变了,就会使验证代码失效,甚至报错。