web系统特点
1.分布式,客户端不确定
2.异步作业
安全问题
因为是分布式且强交互,而客户端又不确定,理论上任何人可以发送任意数据到服务器。因为除了我们自己的网页,客户端可以是任意人定制的任意的目的的html页面,甚至是定制的HTTP客户端。所以web服务器对客户端完全不能信任。那么怎么安全处理任务呢?就一条,假设所有请求数据都是非法的,知道证明他是合法的。
比如,客户端使用POST方法提交参数name,pwd。首先服务器要确保,客户端提交的是这两个字段,其次服务器要确保客户端提交的这两个参数值合法。那么新 的问题 来了,怎么样才叫值合法?
解决方法我想应该是这样子的:
比如,假设服务器客户端均使用UTF-8,
对于请求功能getsecclassify,有参数mainclassify,mainclassify的值必须满足以下条件:
a.长度小于10个字符
b.只能包含大小写字母和数字
这样就把这个功能可能的参数限制死了。
那么客户端检测一遍,服务器端也要检测一遍。
所有服务器请求,必须有详细的设计文档,里面规定好,都有什么参数,参数什么格式。这样就可以把可能的参数数据限制死。这是一种白名单的解决方案,我不看你是不是非法的,我只看你是否合法。一切不满足设计要求的通信参数,都不予以处理(在测试阶段没可以给个响应,非法数据提交)。这个文档写的有点像winsock通信协议了,我不知道web开发一般怎么称呼这个东西。
既然有通信协议了,就要有测试用例啊,验证当前服务器是否实现了既定的验证规则。也就是说,在写设计文档的时候,在写通信功能文档的时候没,顺手就要写出对应的测试用例。
这样,就能在一定程度上解决web系统安全问题了。总结一下,就是写详细设计文档,规定参数细节,然后写测试用例。开发时候,严格遵照设计文档,进行参数检查,然后再使用测试用例测试。