cookies 登录的安全问题

2015-08-07 05:56:00 +08:00
 dxcqcv

网站希望改成后端只输出json,前端全部ajax请求的模式,也包括登录,那么问题来了

前端这块,用户登录后,登录信息只能保存在cookies里,到期清空,安全性实在是低,有什么好办法吗?

8710 次点击
所在节点    JavaScript
37 条回复
582033
2015-08-07 06:44:11 +08:00
oauth2.0

ssl也有必要.

应该没什么太大问题了吧。
OpooPages
2015-08-07 07:08:03 +08:00
大多session也是基于cookie。

如果是非浏览器客户端,或者oauth,每个访问都需要access_toke,其实原理跟cookie差不多。
cnhongwei
2015-08-07 07:17:05 +08:00
现在所有的认证手段除硬件认证外,都是基于cookie的,怎么会不安全。但在cookie的设计上要防cookie盗用,并兼顾用户跟踪。
ihciah
2015-08-07 08:20:46 +08:00
没有ssl的话可以考虑淘宝以前的做法,一段时间无用户活动可以提示用户重新登录
jugelizi
2015-08-07 08:35:36 +08:00
有效期 httponly 加密 就可以了
ltttx
2015-08-07 09:00:47 +08:00
前后端分离,一般就不用cookie来保证用户认证登录了(比如 native app情况下),一般是基于 token或者 oauth,前者实现更简单点。token (hash)的话,一般是用户通过某种方式认证登录(比如基于https的 http basic 登录),然后返回一个token给用户,以后每次请求都必须带上token进行授权。
imn1
2015-08-07 09:57:02 +08:00
后端对重要操作二次询问密码,例如查看身份信息,改密码,加密保之类
如果什么操作都重要,那就不该cookies登录
jiaozi
2015-08-07 10:17:02 +08:00
我们是前端ajax提交到后台,保存到session中的。从来木有用过cookie,都是用session的···
zhicheng
2015-08-07 10:20:08 +08:00
@jiaozi session 是哪来的?
sujin190
2015-08-07 10:20:58 +08:00
@aiden0xz 有区别么。。。
sujin190
2015-08-07 10:21:36 +08:00
@jiaozi session的id就是保存在cookie中的。。。。
jiaozi
2015-08-07 10:28:53 +08:00
@sujin190 cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案
jiaozi
2015-08-07 10:29:21 +08:00
cookie 和session 的区别:

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中
breeswish
2015-08-07 10:31:29 +08:00
@jiaozi 然而 session 要通过 cookie 传递的亲……session id 是在 cookie 里的,id 所对应的 data 才是在服务器上..用着 session (基本)就得用 cookie..
irainy
2015-08-07 10:33:37 +08:00
jiaozi
2015-08-07 10:34:00 +08:00
@breeswish cookie是不用写的,用了session,自动在客户端生成的吧。就是觉得登陆信息就应该用session。
jiaozi
2015-08-07 10:35:03 +08:00
@irainy 木有专业前端,前后都做的伤不起呀。。。
breeswish
2015-08-07 10:39:10 +08:00
@jiaozi 确实有不用 cookie 传递 session 的办法,可以用 HTTPS Session 传递 Session,可以用 ETags 借助浏览器缓存传递 session,可以用 URL 传递 session,然而 OAuth 以外 99% 以上的 session 都是通过 cookie 传递的…

TCP 自身是无状态的,总要有个地方「持久化记录」一个唯一标示符,浏览器提供的「可以让服务器在客户端保存一段信息以供后续使用」的这个功能叫做 Cookie。

不信你清空 v2ex 上的 cookie 试试..看看 session 是不是丢失了
breeswish
2015-08-07 10:42:36 +08:00
@jiaozi typo:<del>TCP</del> HTTP 自身是无状态的
sujin190
2015-08-07 11:04:13 +08:00
@jiaozi 安全上没什么区别,我既然能伪造cookie保存的登录信息伪造登录,当然也能伪造sessionid伪造登录,反正你要有个信息来源于客户端不是

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

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

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

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

© 2021 V2EX