08年07月16日

Posted on 2008-07-16 18:08 RichardHe 阅读(1633) 评论(29)  编辑 收藏 引用
说下最近在忙的事吧.最近公司游戏和一个社区合作.我负责和这个社区平台的客户端和服务器的设计
这个社区老是把一些简单问题复杂化来做.本杰我们的和其它平台的都已经做好了的,但是它们现在想在我的
的客户端加加一个内嵌浏览器.说是怕它们的帐号和密码被盗,难道放在WEB中输入就不会了吗?不都是在客户端
输入吗?有什么本质的区别吗?
现在的流程是这样的,通过客户端内嵌浏览器输入的用户名和密码到它们的服务器验证,然后把结果返回到我们
游戏帐号服务器,再通过帐号服务器通知我们的客户端,从而再进行登录以后的事情.
以前我们和XX网的流程,先在客户端输入用户名和密码,通过SOCKET到他们的服务器进行验证,通过以后再登录到我
们的游戏服务器,如果这个用户名在我们的帐号服务器中的话那么进行验证登录,如果不在,则在帐号服务器写入一条
这个帐号的记录,包括用户名,是否成年等等.
PS:以上的密码都是经过MD5和一个密钥加密的,都是不可逆的,有那么容易破解吗?

Feedback

# re: 08年07月16日[未登录]  回复  更多评论   

2008-07-16 19:57 by steven
如果觉得自己是对的 一定要用论证说明 有些人是不懂技术的 只是想当然 还是要沟通好 。

# re: 08年07月16日  回复  更多评论   

2008-07-16 23:02 by huoxd
我谈下自己的想法,是不是那家公司觉得对于web访问提供数字签名,加密处理等更加方便(例如客户端安装控件,服务端也做对应配置),可能考虑部署更加方便,现成的资源也比较多.

# re: 08年07月16日[未登录]  回复  更多评论   

2008-07-17 08:41 by cppexplore
他们的server端是java之类的东西写的吧。
他们不会或者懒得写socket,想直接用servelet而已

# re: 08年07月16日  回复  更多评论   

2008-07-17 09:20 by RichardHe
@huoxd
应该是这样的!因为他们公司没有用过C++开发,绝大多数都是WEB的方式,一直在想办法通过WEB来验证等等!

# re: 08年07月16日  回复  更多评论   

2008-07-17 09:21 by RichardHe
@cppexplore
我也不知道他们服务器是什么写的,应该是JAVA,因为他们的WEB也是JSP的

# re: 08年07月16日  回复  更多评论   

2008-07-17 09:22 by txw
人家是怕帐号密码在你的客户端输入的阶段就被HOOK走了,而不是害怕你的数据包被破解了。在浏览器输入帐号密码绝对比在你客户端输入要安全得多的。他们的要求其实也是合理的。因为浏览器是相对安全很多的。但是如果因为这个问题涉及到要修改你系统原先的架构那么就不划算了,如果只是登录流程变一下,嵌入个浏览器,那还是不过分的。

# re: 08年07月16日  回复  更多评论   

2008-07-17 09:32 by RichardHe
@txw
谢谢你的指点.如果现在嵌入个浏览器所增加的工作量相对以前来说是相当大的,我这边的系统和数据库也要专门重新构架了.因为那样的话,我还要专门处理它们的服务器返回到我们的游戏服务器,再从我们的游戏服务到游戏客户端,这之间有一个映射关系比较难处理。

# re: 08年07月16日  回复  更多评论   

2008-07-17 10:41 by txw
是的,如果问题涉及到架构,那或许需要重新沟通。但是如果帐号密码安全至关重要,或许他们的方案更有保障。浏览器可以保证输入的时候被HOOK的可能性大大减少,同时数据包WEB都是SSL加密的,要破解的可能性也是微乎其微的。还有client是有可能被逆向工程的。

# re: 08年07月16日  回复  更多评论   

2008-07-17 11:09 by RichardHe
@txw
谢谢了..经过你这么一说真是明白了许多..
因为自己没做过WEB开发过,所以其中的许多东西还是不太了解的!

# re: 08年07月16日[未登录]  回复  更多评论   

2008-07-17 12:18 by cppexplore
根本原因还是因为那边没有socket,想直接用servlet吧。这样他们那边的改动很小,不需要涉入他们不熟悉的领域。被hook,指键盘输入吗,web下一样可以。单纯的得出结论:web输入比client端输入更安全,这个论调还需要详细的论证吧,用客户端的东东多了去了,也都没用客户端嵌入web的方式输密码。
https可以用ssl加密隧道,socket一样可以。
这个问题就是要么你们改,他们不改,要么他们不改,你们用web输入。
衡量2个方案的改动量,还是你们改比较简单。

# re: 08年07月16日[未登录]  回复  更多评论   

2008-07-17 12:40 by 代李
小小的问一下: 直接在客户端发送http请求 可以不呢?

# re: 08年07月16日  回复  更多评论   

2008-07-17 12:46 by kun
我也认为 他们只是懒得改 罢了。
不过反过来说,你现在的情绪是否也有点这样的成分在里面呢?

不如趁这个机会练下手。等做出来之后,你就多份经验了,WEB的,Socket的你都弄过,那么下次再有类似需求的时候,你就可以权衡哪种更好了。

# re: 08年07月16日[未登录]  回复  更多评论   

2008-07-17 13:01 by cppexplore
@ 代李
可以

这对博主来说是个好方案,还是用socket发送,可以建立tcp短连接,发送的数据采用http协议格式的,这样就两边皆大欢喜了吧。

# re: 08年07月16日  回复  更多评论   

2008-07-17 14:36 by RichardHe
@kun
现在是25号正式上线,21号上内测,没时间啊?时间上来不急.

# re: 08年07月16日  回复  更多评论   

2008-07-17 16:37 by RichardHe
@cppexplore
用socket发送,可以建立tcp短连接,发送的数据采用http协议格式
可以这样吗?小弟我也是第一次用网络这东西.所以许多东西还是不太懂.
是否可以指点下呢?

# re: 08年07月16日[未登录]  回复  更多评论   

2008-07-17 17:20 by cppexplore
@RichardHe
web也是用的socket。http的通讯方式如下:
建立连接(connect)
发送请求(send)
接收响应(recv)
断开连接(close)
每次请求响应 都要建立连接,断开连接,就是tcp短连接,也是http使用的方式。
http的格式可以看rfc,或者抓包看看就知道
一般是(post方式才需要body的):
post/get/header url http/1.1\r\n
header: value\r\n
Content-Length: ..\r\n
Content-Type: ..\r\n
\r\n
body

内嵌web可以说是个很快速的方案,只要你能拿到web上返回的数据,又何必自己写socket发数据呢。或者可以一边用内嵌web写原型系统,一边写socket方式的。

# re: 08年07月16日  回复  更多评论   

2008-07-17 17:32 by RichardHe
@cppexplore
现在问题是很难从我的客户端得到WEB上返回的数据,要是能得到的话就什么都简单了.

# re: 08年07月16日  回复  更多评论   

2008-07-17 17:33 by true
可以看看libevent对http的封装,类似的库也不少。

# re: 08年07月16日[未登录]  回复  更多评论   

2008-07-17 20:05 by CppExplore
@RichardHe
我猜也是你拿到返回的数据很困难,呵呵。
用socket吧 不需要用apache ace libevent那么复杂的封装库。写个最基本最简单的阻塞式socket,连接 发送 ,等响应,之后关闭就是了。发送就是发送这个好了:
POST /url HTTP/1.1\r\n
Content-Length: 24\r\n
Content-Type: application/txt\r\n
\r\n
username=jim&pass=mypass

详细的信息可以问那边要,他们一定有示例的页面,用页面发个请求,抓包就知道了。

# re: 08年07月16日  回复  更多评论   

2008-07-18 11:13 by RichardHe
@true
谢谢指点!!

# re: 08年07月16日  回复  更多评论   

2008-07-18 11:14 by RichardHe
@CppExplore
谢谢指点......但还是不知道怎么抓包?
用SOCKET抓吗?也不知道它们返回的是什么样的消息格式?
它们是有一个专门的登录页面的.

POST /url HTTP/1.1\r\n
Content-Length: 24\r\n
Content-Type: application/txt\r\n
\r\n
username=jim&pass=mypass

这个是指什么??我这边所要发的吗?这个是WEB里面要发的吧?

# re: 08年07月16日[未登录]  回复  更多评论   

2008-07-18 12:38 by Jezz
Web登陆和客户端登陆在安全性上没有太大差异. 能破解的都能破解. 建议直接提交Web接口数据,得到返回结果

# re: 08年07月16日  回复  更多评论   

2008-07-19 20:27 by RichardHe
@Jezz
我的客户端很难得到返回的结果!

# re: 08年07月16日[未登录]  回复  更多评论   

2008-07-21 09:42 by 代李
直接使用socket发送 http协议 返回的东西跟网页一样 只是会有http头
1·可以通过http头来判断是否连接发送成功
1·可以通过内容来判断是否验证成功,比如检索内容里面是否有成功字样,,等。

# re: 08年07月16日  回复  更多评论   

2008-07-21 10:45 by RichardHe
@代李
有例子参考下吗???因为没用过SOCKET发送HTTP这样的
所以不知道怎么做?也不知道怎么用客户端接收HTTP返回的东东!
谢谢关注!

# re: 08年07月16日  回复  更多评论   

2008-07-23 01:36 by dodo
我不信浏览器更安全。

# re: 08年07月16日  回复  更多评论   

2008-07-23 08:52 by RichardHe
@dodo
呵呵..我觉得应该都差不多的...但是就是有些人觉得浏览器比客户端更安全

# re: 08年07月16日  回复  更多评论   

2008-08-01 21:24 by daili
http://www.vckbase.com/document/viewdoc/?id=1208 zhe you gelizhi

# re: 08年07月16日  回复  更多评论   

2008-08-02 08:57 by RichardHe
@daili
谢谢了..

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


posts - 94, comments - 138, trackbacks - 0, articles - 94

Copyright © RichardHe