HTTP 与 Socket 验证的区别
这是很基础的概念,之前没怎么弄过 HTTP。对于自己,算是做个笔记吧。
Socket 安全验证
Socket 链接是握手之后就一直连着,所以这条链接在第一包验证之后,之后这条链接不需要再验证。“第一个包”可能描述不准确,因为有时候第一包不一定就验证,可能是做路由之类。这里就不管这种情况了,只管第一个包直接验证的情况。
可以理解为 Server 接受到 Client 的链接,并且验证通过(如用户及密码对了)这个 Client 链接后。以后这个 Client 发过来的包,Server 都直接做逻辑处理而不再需要做验证链接合法性。这个信任是直到链接断开的。
如果非法客户端来模拟登陆,至少需要得到有效的 ID 及密码,这已经是密码自身安全的事情,不涉及这里谈的链接安全性。
如果非法客户端用正确的 ID 及密码登陆后,发些非法包,这里的包验证应该是服务器上包处理时的包检查及逻辑检查的事,就是通常的游戏说的防刷(包频率、包里数据的合法范围等)。
HTTP 的安全验证
这里只关心 HTTP 的短连接。
短连接就是每次建立链接-发包-断开。同一 Client 的前后两次发到 Server 的包,也相当于独立的两次,同一 Client 的验证就需要每个 HTTP 请求都要验证下。于是有了 Session 和 Cookie。Cookie 是将 Client 的标识放在 Client 端,常用于 Server 没有账户密码验证的方式。这里不讨论 Cookie。
Server 在第一个 HTTP 请求验证 Client 后,给他分配一个 Session。这个 Session 简单的可以理解为 Server 和 Client 约定的一个 Client 凭证(有有效期)。之后 Client 在每个请求里加上这个 Session 里规定的值,例如一个合适长度的随机字符串。
这里的 Session 不能有让恶意用户很容易破解的规律,例如用户的 ID 之类的。所以上边提到随机字符串之类的。