加密措施不当
隐患:
对重要信息部进行加密处理或加密强度不够,或者没有安全的存储加密信息。
风险:
攻击者可能利用漏洞窃取用户账户、密码、证书等重要信息。
措施1
对所有重要信息进行加密
措施2
使用足够强度的加密算法,如AES、RSA
措施3
产生密钥与加密信息分开存放
措施4
严格控制对加密存储的访问等。
URL地址访问控制不当
隐患
某些web页面由于缺乏权限管控或访问控制,使得攻击者可通过输入URL直接访问
风险
导致非授权用户进行系统操作,可能造成系统数据泄露或数据被篡改。
措施:
在编码过程中,防止未经授权的URL访问,应选择一个适当的身份验证机制,并为每个功能页面加入授权检测的方法。
措施代码示例
//设置检查结果标识为false
boolean check_result =false;//默认情况下拒绝所有的访问
//检查当前用户是否登录,为否的提示用户登录
if(request.getSession.getAttribute(“longflag”)==false){
request.getAttribute(“MSG”,”对不起,您还没登录,请登录!”);
return mapping.findForward(“fail”);
}
//检查用户的权限是否足够,足够时标志为true
if(checkRights(userId)==true){
check_result = true;
//当标志为true时,执行功能代码
}
目录遍历漏洞
隐患
允许用户通过修改输入来操作文件系统的路径
风险
攻击者利用该漏洞可以非法获取系统信息,包括配置文件信息、机密文件信息等,甚至可以得到数据库用户名和密码,进而通过数据库获得整个系统的权限。
String rName = request.getParameter(“reportName”);
File rFile = new File(“/usr/tets/report/”+rName);
rFile.delete();
……
上面代码从HTTPrequest获取用户输入作为文件名来删除一个系统文件,程序没有对输入做安全验证或检查,攻击者可以利用下面的URL来删除应用程序的配置文件:
http://example.com/del.jsp?reportName=../tomcat/conf/server.xml
措施1代码示例
……
http://example.com/down.jsp?field=234
int filed =Integer.parseInt(request.getParameter(“filed”));
String filename=null;
if(filed ==234){
filename=”example.txt”;
}
……
措施2 采用白名单验证文件路径名
……
String ss=”[a-zA-Z_0_9]|[.]|[_]”;
for(int i=0;i<length;i++){
Strings=str.substring(i,i++);
if(!Pattern.matches(ss,s)){
returnfalse,
}
}
措施3
在服务器端过滤路径名中的特殊字符,如“…/”,”…\”等。
if(sTest.indexOf(“..\\”)>=0
sText =sText.replaceAll(“..\\”,””);
if(sText.indexOf(“..//”)>=0
sText=sText.replaceAll(“..//”,””)
异常错误信息处理不当
隐患:
程序在错误的Web页面中存在一些可能向攻击者提供攻击线索的调试信息
风险
攻击者可以利用异常错误信息获取Web应用程序的敏感信息,如用户名、密码、机器名或敏感文件位置。
措施1
除了必要的注释之外,将所有的调试语句删除
措施2
对返回客户端的提示信息进行统一和格式化
措施3
制作统一的出错提示页面
应用传输层保护不足
隐患:
Web应用程序在进行数据传输时,可能会选择HTTP或者HTTPS。HTTP在传输的过程中,未对传输数据加以保护,传输数据有可能被恶意用户截获、篡改
风险:
攻击者利用该漏洞窃取用户凭证和用户会话信息,篡改传输信息
措施1
对所有验证页面、敏感信息的传输都是用SSL或TLS加密
措施2
在网页中不要混杂HTTP和HTTPS内容,必要情况下采用数字证书认证
措施3
对cookie使用Secure标签
Cookie cookie = newcookie(“emailCookie”,email);
cookie.setSecure(true);
response.addCookie(cookie);
Web页面重定向漏洞
隐患
系统在进行页面转发和重定向或者转发的页面不是系统可信页面,并且重定向或转发前从未经安全验证。
风险:
攻击者可以利用未经验证的重定向目标来实现钓鱼欺骗,诱骗用户访问恶意站点。
恶意代码示例
//系统的登录功能页面login.jsp接受一个backurl的参数,当登录成功时会自动重定向到backurl指定的URL
String backurl=request.getParameter(“backurl”);
//登录成功时
response.sendredirect(backurl);
……
攻击者可以构造如下链接:http://example.com/login.jsp?backurl=http://www.example.com当用户访问该链接时,用户登录成功后浏览器即会重新定向到一个钓鱼网站(www.example.com)
措施一
String backurl=request.getParameter(“backurl”);
//获取目标中的域名
if(目标中的域名 ==www.example.com)
response.sendredirect(backurl);
措施2
对用户输入进行过滤
switch(value.charAt(i)){
case ‘\r’:
break;
case ‘\n’
break;
default:
result.append(value.chartAt(i));
break;
}