我一直在使用一个简单的本地cookie来保存我的付费订户网站的用户的用户ID。这样可以防止他们因不断的登录请求而烦恼。这里没什么特别的。
我担心的是,它太简单了,可以通过剪切和粘贴PC的本地cookie文件来轻易地被黑客入侵。
如果要在PC上查找本地cookie文件,请执行以下操作:这很容易,我可以将其复制到文本阅读器并进行CNTR-F搜索,直到找到与我的网站相关的信息:
GA1.2.662049077.1549644533U8EMOÔ¬AÔ¡Aexample.com__atuvc/1%7C5~8GPRÄâ’>¬A
Ä…;N¡A.example.com__cfduid/d1240692ee84f4c8c756cee833d313a841558986771
4ì±3µ”`ËoÙ_8O[]Ñcˇ¡Aƒ¡Awww.mysite.commy_cookie/7www.example.com8O^~¬Ã¡A¢π
¡Awww.GA1.2.662049077.1549644533U8EMOÔ¬AÔ¡Aexample.com__atuvc/34_GA1.2.66
2049077.1549644533U8EMOÔ¬AÔ¡Aexample.com__atuvc/
它是:www.mysite.commy_cookie/7
不需要太有才华的分析师就能知道这是一个存储用户#7的用户ID的cookie。如果badhacker325想要永久访问,badhacker325可以将www.mysite.commy_cookie/7
粘贴到本地cookie文件中,然后拥有永久的免费访问权限。
作为Cookie的编写者和面包师,我们必须使用哪些工具来防止这种免费加载攻击?
知道我在php
工作可能很相关;尽管这里的范围不限于编码语言imo。
我不是那种懒惰的人,我试图解决这个问题。我已经解决了某些情况,但是我只能停留在下面要确定的一个组件上(主要是为了保持悬念)这是到目前为止的尝试:
我没有创建简单的用户ID 7
,而是创建了一个数组:
user_id
cookie_creation_time
user_ip
salt
然后我将其内插到一个定界的字符串中,将其散列为无法识别的位并存储。现在我们得到这样的cookie:
www.mysite.commy_cookie/d1240692ee84f4c8c756c
ee833d313a841558986771www.example.com8O^~¬3†¢
但是,这仍然不能阻止用户白痴傻傻地将哈希复制到他们的本地cookie文件并获得对我网站的访问权限,就像没有错一样。
它可以正常工作:
回读IP时,脚本可以发现用户位置与设置cookie的位置不同。这是一种失败状态,要求用户重新输入密码。
这解决了空间问题,但没有时间。 (我还不是爱因斯坦。)
我的下一个想法是使用creation_time
值来测试服务器值,如果失败,请让用户重新输入密码。但是,这似乎无法达到php expires
的{{1}}参数的目的。
我怀疑我对此考虑过多,或者可能完全误解了cookie使用的某些方面。
有人有什么想法吗? 如何防止用户的本地Cookie文件被大量劫持,以利用已接受的Cookie?