精英盒子 -> 零毫秒 -> 0.1版服务器程序对登陆过程的处理 [打印本页]

jybox 2011-10-09 22:06

0.1版服务器程序对登陆过程的处理

简要的进行一下文档化
首先,我经过慎重考虑,决定还是用php做一个跳板,来读取mysql里phpwind的数据库里的用户信息
为什么要用php做跳板,而不是服务器程序直接读取呢?原因如下:
  • Windows版的QT不提供MySQL数据库驱动,需要自己编译,而编译过程相对复杂
  • 对于服务器和数据库不在一台电脑的情况下,远程访问mysql数据库并不安全,而且有些主机商不允许这么做
  • 便于在用做跳板的PHP处理文件中做一些额外的工作,例如在网站上显示使用量信息
  • 有的用户可能并非使用mysql储存用户信息,用服务器通过mysql驱动访问太过于武断,而php更灵活于读取其他形式的用户信息(文件、mssql)

因为需要用一个PHP文件做跳板,因此安全问题比较重要,一方面是要防止密码在传输过程中被窃取,另一方面是防止有些人利用这个PHP跳板批量暴力破译密码,经过考虑,采取安全措施如下
  • PHP处理文件中和服务器程序中各保存一个私钥,服务器要把客户端传来的经过不可逆加密的密码再利用这个私钥加密一次(私钥是一个字符串)
  • 可以在PHP处理文件中设置只允许某个IP访问,当然,这个IP就是服务器程序所在IP

具体通讯约定:
PHP处理文件的借口是一个类似这样的地址:
http://jybox.net/0-ms/api/login.php
get参数:
  • mode=post(固定这么写)

post参数:
  • do=login(登陆验证都固定这么写)
  • pwd=经过私钥加密的密码,关于如何加密见后文
  • time=服务器程序收到这个消息的时间
  • user=要登陆的用户名
  • clientname=客户端名称描述性字符串(是从客户端发来的登陆命令中提取出来的)
  • clientver=客户端版本顺序号(是从客户端发来的登陆命令中提取出来的,这个和上面一项都是为了方便统计)

返回信息:
两行字符串
  1. 0或1(表示是否验证成功)
    用户名

密码的加密方法(伪代码):
MD5(密钥+客户端发来的经过不可逆加密的密码)



whtsky 2011-10-09 22:12
人家搭建个聊天服务器还要开php

jybox 2011-10-09 22:13
whtsky:人家搭建个聊天服务器还要开php[表情]
并发数一高服务器就挂了[表情]  (2011-10-09 22:12) 

貌似并不复杂.....要不用户信息存在哪里?

whtsky 2011-10-09 22:18
mysql的select性能不高,详情可以参考这篇吐槽
作者是写SimpleCD 的。。
Windows版的QT不提供MySQL数据库驱动,需要自己编译,而编译过程相对复杂

吐槽无力。
对于服务器和数据库不在一台电脑的情况下,远程访问mysql数据库并不安全,而且有些主机商不允许这么做


为什么要不在一台电脑上。。
便于在用做跳板的PHP处理文件中做一些额外的工作,例如在网站上显示使用量信息

完全可以在S端进行统计。。
有的用户可能并非使用mysql储存用户信息,用服务器通过mysql驱动访问太过于武断,而php更灵活于读取其他形式的用户信息(文件、mssql)

你难道准备发布S端+一个SQL文件,告诉大家数据库自己搭建,PHP自己去写?

whtsky 2011-10-09 22:20
jybox:貌似并不复杂.....要不用户信息存在哪里? (2011-10-09 22:13) 

存数据库啊。。。
多开一个WEB服务器意味着更多的资源消耗、更多的维护投入、还有可能DoS.DDoS...

whtsky 2011-10-09 22:22
http://apps.hi.baidu.com/share/detail/34835376
Win下MySQL驱动编译并不难,按照操作编译即可,何况Win主机算是很奇葩的存在了;
大不了官方编译一个Win版本提供下载嘛。

whtsky 2011-10-09 22:31
不是所有人都有整合论坛用户的需求的。。

jybox 2011-10-09 22:49
--为什么要不在一台电脑上。。
S端服务器可是要有执行权限的,虚拟主机不行,必须VPS,但是有VPS的可不是多数。所以有的用户可能用自己的电脑充当S端服务器,而使用自己虚拟主机上的mysql数据库

--你难道准备发布S端+一个SQL文件,告诉大家数据库自己搭建,PHP自己去写?
--不是所有人都有整合论坛用户的需求的。。
那你的意思是什么?储存在mysql里,然后S端服务器去读取?
我觉得..貌似有mysql的话,应该也就是有apache和php了。
如果用户不需要一个论坛的话,只要建一个用户表就行了嘛,就算是用S端直接读取,不也是要一个用户表吗


你需要考虑用户不同的需求,用户可能不只是phpwind论坛,用户可能需要修改读取用户表的相关源码,你得承认修改php比C++更简单,而且不用重新编译

whtsky 2011-10-09 23:25
用自己的电脑当s,那为什么还要连接远程服务器?
有mysql就基本有apache?你确定?
整合各类不同的用户修改的是sql语句,和php.c没关系,而且不会有人闲着无聊整天改这个,编译用不了多久
php所带来的只是无谓的资源消耗而已。

whtsky 2011-10-09 23:33
只用一个用户表,群组呢?好友呢?各种设置呢?php可以作为ajax接口,但接管数据库操作太不现实了

内容来自[手机版]

whtsky 2011-10-09 23:34
我只想安心做聊天服务器,还要再开php服务器还要从php拿数据,我脑残嘛

内容来自[手机版]

whtsky 2011-10-09 23:39
就算我兼职做网页服务器,我为什么一定要用php写网页?python行不行?java行不行?go行不行?erlang行不行?我干嘛还要装php绕一个大圈来拿我的数据?

内容来自[手机版]

abreto 2011-10-10 18:14
总之不赞成和PHPWind论坛的用户相通
人家有自己的论坛呢?
要么自己写一个用户系统(其实我正打算写)
以后所有的产品都跟这个用户系统相通,
就是这样,, 而且用PHP太坑爹

jybox 2011-10-10 19:52
--我为什么一定要用php写网页?python行不行?java行不行?go行不行?erlang行不行?
当然,当然可以,只是规定了一个借口,你可以使用任何动态网页语言,这就是它的灵活性

--整合各类不同的用户修改的是sql语句,和php.c没关系
使用php可以灵活地存取各种数据库

--只用一个用户表,群组呢?好友呢?各种设置呢?php可以作为ajax接口,但接管数据库操作太不现实了

-- 总之不赞成和PHPWind论坛的用户相通
--人家有自己的论坛呢?
和phpwind互通只是一个例子,未必是phpwind,也未必需要论坛,你们可能还是没有理解我的这句话“如果用户不需要一个论坛的话,只要建一个用户表就行了嘛,就算是用S端直接读取,不也是要一个用户表吗”

--我只想安心做聊天服务器,还要再开php服务器还要从php拿数据,我脑残嘛
不用到php(泛指动态网页语言)是不可能的,因为需要用户注册页、个人中心等等的网页。而一旦涉及这些,大部分人第一想到的肯定是与论坛互通(当然,不搭建论坛也是可以的).与论坛的用户信息互通现在基本是可以定下来的了(要注意,这是非常灵活的,可以与任何论坛或网站系统互通,也可以不使用论坛).现在主要的问题是使用PHP做跳板来验证密码,还是用服务器直接读取数据库。
还有几个方面的原因:
*为了减少服务器程序在技术上的复杂度,当然,我也知道,这不是长久之计,早晚都要用到数据库的。
*为了隔离数据,因为服务器程序是要接受客户端的指令的,我的技术也不能保证服务器程序万无一失,对于用户信息这样的敏感数据,还是与服务器程序隔离比较好。
*另外是考虑一致性,在我的计划中,可能还会开发其他的程序(和零毫秒无关,只是我个人问题),可能也涉及到用户验证,这些程序可能是直接给用户使用的,所以显然不能直接读数据库,显然要用PHP来验证。
*而且既然用户注册、个人中心都是网页的,用户验证也使用网页比较好,原因就是上面提到的数据隔离和技术一致性



abreto 2011-10-10 20:23
jybox:--我为什么一定要用php写网页?python行不行?java行不行?go行不行?erlang行不行?
当然,当然可以,只是规定了一个借口,你可以使用任何动态网页语言,这就是它的灵活性
--整合各类不同的用户 .. (2011-10-10 19:52) 

要么自己写一个用户系统

jybox 2011-10-10 20:31
abreto:要么自己写一个用户系统 (2011-10-10 20:23) 

汗,要写的是通讯软件

whtsky 2011-10-10 21:27
你能想象你登陆QQ,然后QQ乐呵乐呵的去访问腾讯服务器的某一个网页来验证身份嘛

jybox 2011-10-10 21:55
whtsky:[表情] 你能想象你登陆QQ,然后QQ乐呵乐呵的去访问腾讯服务器的某一个网页来验证身份嘛 (2011-10-10 21:27) 

我可以告诉你...事实上QQ的通讯协议是基于网页(http)的

whtsky 2011-10-10 21:58
jybox:[表情]我可以告诉你...事实上QQ的通讯协议是基于网页(http)的 (2011-10-10 21:55) 

腾讯蛋疼?

whtsky 2011-10-10 22:04
jybox:[表情]我可以告诉你...事实上QQ的通讯协议是基于网页(http)的 (2011-10-10 21:55) 

https://code.google.com/p/libqq-pidgin/wiki/QQ2010Protocol
怎么基于HTTP

jybox 2011-10-10 22:37
whtsky:https://code.google.com/p/libqq-pidgin/wiki/QQ2010Protocol
怎么基于HTTP[表情] (2011-10-10 22:04) 

http://www.cnblogs.com/czjone/archive/2010/03/16/1636017.html

whtsky 2011-10-10 23:39
qq官方客户端不是http协议的,何况文中的http通讯如果现在能用吗?

内容来自[手机版]

jybox 2011-10-11 19:37
whtsky:qq官方客户端不是http协议的,何况文中的http通讯如果现在能用吗?
内容来自[手机版]  (2011-10-10 23:39) 

当然能啦......

whtsky 2011-10-11 20:02
你确定!?

内容来自[手机版]

abreto 2011-10-18 22:53
总之这不是一个很好的方式




Powered by phpwind v8.7 Code ©2003-2011 phpwind
Time 0.052189 second(s),query:5 Gzip enabled