攻击方式:
参数操纵
这里包括了SQL注入、XPath注入、cgi命令执行,还有XXS和会话劫持等。前三个的攻击主要是在服务端触发的,后二者的攻击则是侧重于客户端。
SQL注入分析:提交含有SQL操作语句的信息给后端,后端如果没有做好过滤就执行该语句,攻击者自然可以随意操纵该站点的数据库。
XPath注入:
cgi命令执行:
XSS:cross-site scripting跨域脚本攻击
对于XSS的预防自然也是对提交数据的过滤,另外还有一点——谨慎返回用户提交的内容!
会话劫持: 可以走SSH协议、增强网络安全系统健壮性,也可以使用无序的UUID来替代通讯中的序列号码(而非逐步递增)。
其他攻击:
CSRF(cross-site request forgery):跨站请求伪造,与XSS非常相似,但XSS是利用用户对当前网站的信任来发起攻击,而CSRF是利用网站对用户的信任来发起攻击。
CSRF攻击,我们所能做的可以有:
1. 检查报头中的Referer参数确保请求发自正确的网站(但XHR请求可调用setRequestHeader方法来修改Referer报头);
2. 对于任何重要的请求都需要重新验证用户的身份;
3. 创建一个唯一的令牌(Token),将其存在服务端的session中及客户端的cookie中,对任何请求,都检查二者是否一致。
拒绝服务(DoS)指的是向网站发起洪水一样的请求(Traffic Floor),导致服务器超负荷并关闭,处理方法常规是采用QoS(Quality of Service)的软硬件解决方案。
综上所述,我们可以这样审视我们的WEB站点:
1. 永远不要相信客户端传来的任何信息,对这些信息都应先进行编码或过滤处理;
2. 谨慎返回用户输入的信息;
3. 使用黑名单和白名单处理(即“不允许哪些敏感信息”或“只允许哪些信息”,白名单的效果更好但局限性高);
4. 检查、验证请求来源,对每一个重要的操作都进行重新验证;
5. 使用SSL防止第三方监听通信(但无法阻止XSS、CSRF、SQL注入攻击);
6. 不要将重要文件、备份文件存放在公众可访问到的地方;
7. 会话ID无序化;
8. 对用户上传的文件进行验证(不单单是格式验证,比方一张gif图片还应将其转为二进制并验证其每帧颜色值<无符号8位>和宽高值<无符号16位>);
9. WSDL文档应当要求用户注册后才能获取;