验证回答是否正确展示内容,如何做比较安全?

2015-11-13 09:41:11 +08:00
 tanteng

效果如图

有这样一个表单,需求就是回答问题正确才能查看内容,在一定时间如 1 天内再次访问不用回答问题,不用登录会员系统。请教各位一般通常可行的办法是什么?

目前的做法是:回答正确了,写一个 cookie 值为 1 ,下次来判断这个 cookie 值是否为 1 ,否则需要重新回答问题,这样做明显不安全,伪造一个 cookie 访问不就可以查看到受保护的内容了。

想过生成一个 token ,存到 cookie ,比如 md5(一个值+salt),但是存什么呢,要下次回答问题正确的用户来了可以校验不用再回答问题,根据什么规则存呢?

小站,没有 redis ,不考虑 redis 方案。

3013 次点击
所在节点    PHP
30 条回复
tanteng
2015-11-13 14:35:47 +08:00
如果要保证安全,那每次进页面都要输入问题答案
domty
2015-11-13 14:36:43 +08:00
@tanteng
别想太多了, cookie 在谁手里谁就是主人,最多超时时间设短点让人家答题频繁点。
再想做下去,感觉你要付出的成本会高很多,而提升的效果未必理想。
dant
2015-11-13 14:39:24 +08:00
答题正确就把数据放 local storage 里(逃
littlehz
2015-11-13 19:23:58 +08:00
这个需求和用于判断登录的 session 有何区别?
Slienc7
2015-11-13 20:37:38 +08:00
setcookie(xxxhash(用户答案+"日期 20150101"));

if(xxxCookie === xxxhash(用户答案+"日期 20150101")){
balabalabala}
yixiang
2015-11-14 11:14:07 +08:00
数据库里一个表,两个字段:随机字符串,对应班级。生成时间。回答正确一次生成一行,并将随机字符串存到本地。每次访问时重新生成字符串。可以保证就算 cookie 被分享也立刻失效。比 cookie 值等于 1 好的地方在于不能直接被伪造。
当然用户怎么都可以分享 cookie ,但在那之前,他可以分享问题的答案啊。
是我的话直接用 session ,在有用户抱怨麻烦的时候再改吧。
tanteng
2015-11-16 14:31:44 +08:00
@dant 这个确实是一个新的思路啊
tanteng
2015-11-16 14:37:14 +08:00
@dant 可是我看到这么一句话:浏览器使用 Cookie 进行身份验证已经好多年,既然现在 localStorage 存储空间那么大,是否可以把身份验证的数据直接移植过来呢?目前来看,把身份验证数据使用 localStorage 进行存储还不太成熟。

安全性是个问题。
dant
2015-11-18 08:15:43 +08:00
@tanteng 把验证之后能看到的内容放进去
mrliusg
2015-11-27 01:24:34 +08:00
生成一个 token ,存到 cookie 。
再次访问的时候根据 cookie 的 token 查询是否过期,过期取消 cookie 。
成功访问后重新生成新 token 并替换原 token 。

最大的安全漏洞在人,所以强制过期是要有的。存答案的就算了吧……
我现在使用的是 session ,验证通过即存当前时间到 session ,服务端判断是否过期, PHP+redis 管理 session

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/235838

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX