让 WebSocket 代替 HTTP 吧。。。。

2016-01-10 00:49:27 +08:00
 justdoit123

今天看了 CSRF ,觉得好沉重啊。 突然有下面的设想,不知道有多少可行性,有很多地方不熟悉,例如 server 验证客户端可信等方面不懂。大家一起看下。

让 WebSoket 替代 HTTP 进行通讯的设想如下:
1. 浏览器要通过系统验证,通过验证的浏览器才能使用。( Chrome 、 Safari 、 Firefox...)
2. 用户用某浏览器(设为 B1 ),访问某站点(设为 S1 ), S1 与 B1 之间就创建一条 WebSocket 连接。用户访问 S1 的任何页面、不管同时开启几个页面(都是使用 B1 浏览器), S1 与 B1 之间都有且仅有一条 WebSocket 连接作为通讯。
3. 用户在电脑中安装了 N 个通过验证的浏览器,那么此用户与 S1 的连接数最大值即为 N ,保护服务器。
4. 站点在与客户端(也就是浏览器)建立连接前,要验证浏览器的合法性。这点能否做到?

CSRF 的难以防范主要是没有办法确认请求来自源页面,上面的方案是否就可以解决这样的问题?因为 ws 是有状态的连接,不需要 session 、不需要把身份信息保存在客户端,连接本身就是身份验证的象征,连接没法伪装(能伪装?没做过什么 C/S 应用,不确定 T_T )

这可能会带来如下问题:
1. SSO 可能没法进行了, SSO 是通过 cookie 作为信息媒介共享身份 token 的。
2. 服务器压力问题。如果所有连接都是长时间活跃的那还没问题,如果一大堆僵死连接,连了之后都没操作,服务器在维持连接方面会耗费大量资源。这个是不是可以通过代理服务器来解决?即大量代理服务器专门用来承担连接保活的工作,请求则转发给处理服务器,再把结果转发给用户。
3. 用户体验变差,没有 SSO 。同时也没有“记住我”的功能,每次关闭浏览器后连接都会关闭,会话结束,即退出登录。 能不能有类似记住密码、自动登录的机制来弥补下。。?
4. 用户体验再差一点,网络不好导致连接断开是不是也要退出了。

10803 次点击
所在节点    程序员
50 条回复
RangerWolf
2016-01-10 20:12:33 +08:00
@zado 请问有相关资料推荐学习吗? 或者介绍一下你的经验? 谢谢
RangerWolf
2016-01-10 20:14:56 +08:00
@chemzqm 百度 google 都搜不到啊? “浏览器网络技术” 是书的全名?
KIDJourney
2016-01-10 21:01:45 +08:00
@hantsy 是哒。一般在响应请求之前会过一层中间件,中间件会检查请求是否合法。
martianyi
2016-01-10 21:17:37 +08:00
@RangerWolf 中文名《 Web 性能权威指南》
strwei
2016-01-10 21:20:31 +08:00
webRTC
plantain
2016-01-10 21:33:30 +08:00
搭车问:怎么用 CSRF 方式攻击 RESTful API (身份验证是 http only & secure 的 cookie; 没有 csrf token 机制)?
looyao
2016-01-10 21:47:11 +08:00
最近要做弹幕,感觉 WebSocket 很合适,不管是 WEB 端还是移动 App 端。
不过不是所有场景都适合长连接,太耗资源。
RangerWolf
2016-01-11 14:30:24 +08:00
@martianyi 原来就是这一本! 非常感谢!
coderHuang
2016-01-11 16:47:21 +08:00
实现的比较好的 RESTful 的 API 也可以避免 CSRF 的
chuxiwen
2016-05-01 23:27:28 +08:00
@mistkafka 放在 url 里应该可以。 hidden field 是很多 framework 的做法。也可以放在 http header 里。关键是只要不是浏览器自己本身会自动提交的地方(比如 cookies ), token 本身是有时效性一次性的 就可以了。有人的做法是有个单独 url 获取 csrf token ,之后服务器端设置只有指定的 domian 可以访问这个 url

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

https://tanronggui.xyz/t/249607

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

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

© 2021 V2EX