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

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 09:55:19 +08:00
这样是否可行?
回答问题正确,存一个 cookie ,值是 md5(今天日期+salt),下次访问校验的时候,计算 md5(今天日期+salt)是否和存的 cookie 相同,就可以了。但是这样做,只能不用再次回答问题的有效时间是隔天就失效。

大家有更好的办法吗?
emric
2015-11-13 10:06:46 +08:00
Cookie 不安全, 用 Session 不就好了.
yeyeye
2015-11-13 10:07:59 +08:00
这类用 Cookie 和 Session 都不合适。直接按 IP 来存数据库
tanteng
2015-11-13 10:12:17 +08:00
@yeyeye ip 不可靠,同一个局域网这么多人,其中一个人回答问题正确,其他人都可以访问了
tanteng
2015-11-13 10:14:27 +08:00
@emric 需求是回答问题正确,下次再次访问不需要再验证,通过 session 怎么判断,肯定要存 cookie
adorazhang
2015-11-13 10:17:12 +08:00
同意一楼的做法
hvsy
2015-11-13 10:17:15 +08:00
随机生成一个值写入 cookie 里面,然后存放到数据库里面.如果没有数据库.就生成一个临时的文件.文件名就是这个值,通过文件的创建时间进行判断.
mcfog
2015-11-13 10:17:30 +08:00
adorazhang
2015-11-13 10:18:17 +08:00
setcookie 时可以设置时长的
PublicID
2015-11-13 10:22:21 +08:00
不怕被爆破吗?
oott123
2015-11-13 10:23:26 +08:00
一楼可行
另外不存 1 ,存一个固定值也不是不可以,比如说答案
vitovan
2015-11-13 12:48:30 +08:00
11 楼+1 ,
存用户输入的答案,每次请求进行答案校验,正确则跳。
skydiver
2015-11-13 12:51:09 +08:00
不就是 Session 么……这个和登录状态不是类似的一回事么
realpg
2015-11-13 12:53:37 +08:00
1 高安全性版本, cookies 存储一个 key 服务器存储一个对应的 key 两者独一无二的匹配对应允许

2 你这个需求的精简版,直接把用户回答的历史答案放到 cookies 载入页面取 cookies ,如果不对就继续显示认证
ck65
2015-11-13 13:06:13 +08:00
jwt +1
可通过参数设置一天过期
gamexg
2015-11-13 13:22:53 +08:00
服务器通过 salt 生成一个密钥,然后密钥加密过期时间保存到客户 cookies 。
每次读客户端提交的 cookies 解密得到过期时间。
gamexg
2015-11-13 13:23:46 +08:00
如果有服务端 Session ,直接在 Session 保存过期时间。
tanteng
2015-11-13 13:57:31 +08:00
@vitovan
@realpg
问题是随机的,每次刷新页面问题不一样
domty
2015-11-13 14:16:57 +08:00
这不就是一种另类的登录方案吗?
用 session 啊 或者类似 session 的有超时时间的服务器端缓存啊。
cookie 存 sessionid , session 就是个以 sessionid 为 key 的键值对啊,值对象里存是否通过验证字段。
超时清楚该 session
tanteng
2015-11-13 14:32:49 +08:00
其实用 cookie ,安全性没办法控制吧,就算存的加密的 cookie ,我把 cookie 给别人,别人不可以模拟请求了

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

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

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

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

© 2021 V2EX