计算机程序主要是输入/输出,安全问题由此产生,凡是有输入的地方都可能带来安全风险。根据输入的数据类型,web应用主要有数值型、字符型、文件型。
要消除风险就要对输入的数据进行检查,对于网站应用来说,检查的位置主要是前端和后端。前端检查只能防止正常状况,没法防止使用工具、程序绕开检查直接把数据发送给服务器。
安全问题主要有以下几方面
1)SQL、HTML、JS、OS命令注入;
2)XSS跨站脚本攻击,利用站内信任的用户,在web页面插入恶意script代码;
3)CSRF跨站请求伪造,通过伪装来自信任用户的请求来利用受信任的网站;
4)目录遍历漏洞;
5)参数篡改;
6)会话劫持。
防止攻击的措施总结
1) 对用户输入的数据进行全面安全检查或过滤,尤其注意检查是否包含SQL 或XSS特殊字符。验证用户输入的数据,包括值、类型、范围等等,用验证控件进行验证,这些检查或过滤必须在服务器端、客户端都进行。客户端服务端都要进行验证,客户端为了提高用户体验,服务端才可以有效防止威胁;
2)不要使用管理员权限的数据库连接,不要使用动态拼接sql;
3)机密信息加密,不能使用明文;
4)每个页面加载时,对用户合法性进行判断;
5)登录后session中的敏感信息需要加密,避免在永久cookies中存储敏感信息,重要的cookie标记为http only;
6)发送敏感信息时使用SSL、POST方式,尽量使用新型web HSTS安全协议;
7)不要直接抛出异常的详细信息给用户,异常返回友好的页面,防止用户看到敏感信息;
8)在服务器与网络的接口处配置防火墙,用于阻断外界用户对服务器的扫描和探测;
9)限制网站后台访问权限,如:禁止公网IP访问后台;禁止服务员使用弱口令;
10)关闭windows的8.3格式功能。DOS系统下的命令方式为8.3格式,即文件名不超过8个字符,扩展名不超过3个字符。形如:???.exe 。现在Windows系统文件名长度更长可达255个字符了;
11)限制敏感页面或目录的访问权限;
12)项目发布前使用使用漏洞扫描软件,如IBM appScan,UnisWebScanner,对安全性进行评估。