资源控制类
1、 未提供登录超时自动结束会话功能
风险:不合理的会话存活时间会导致系统资源长期被占用,会话存在被非法用户冒用并进行重放攻击的可能,即利用系统已收到的合法用户包来达到欺骗系统的目的
措施:设计会话存活时间,超时后销毁对话,清除会话信息。
2、 系统未限制最大连接数
风险:无法抵御DOS攻击及DDOS攻击,一旦遭遇大量恶意连接,即会导致系统瘫痪。
措施:限制系统的最大并发会话连接数及单个用户的最大并发会话连接数
3、 未限制单个账户资源限额
风险:恶意用户可利用病毒脚本侵占系统资源,导致系统瘫痪,影响系统正常用户应用。
措施:限制一个访问账户或一个请求进程占用的资源最大限额和最小限额。
4、 未设置用户优先级
风险:无法有效提供业务资源保障,一旦遭受攻击,关键业务在特殊情况下无法继续提供应用服务能力。
措施:系统应根据服务重要程度设定优先级
安全漏洞
1、 跨站脚本漏洞
隐患:当应用程序收到含有不可信的数据时,在没有进行适当的验证和转义的情况下,直接发送给一个网页浏览器,这就有可能产生跨站脚本攻击
风险:跨站脚本漏洞能够让攻击者在有此漏洞的浏览器上执行恶意脚本,攻击者利用此漏洞可以盗取用户账户、劫持用户会话、危害网站,或者将用户转向恶意站点。
//反射型跨站
<% String eid =request.getParameter(“eid”);%>
……
Employee Id :<% = eid>
当采用如下方式访问test.jsp时,eid包含了HTML代码,该HTML代码就会被浏览器执行:
http://xxxx/test.jsp?eid=<script >alert(document.cookie)</script>
//存储型跨站。程序直接从数据库取出数据,数据库不是可信源,存在恶意数据
<%
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(“select * from emp where id =” + eid);
if(rs!=null){
rs.next();
String name = rs.getString(“name”);
}%>
Employee Name :<%= name%>
措施2:基于HTML转义所有不受信数据(包括主体、属性、javascript或URL)
for(int i =0 ; i < value.length(); ++i){
switch(value.chartAt(i)){
case ‘<’:
result.append(“<”);
break;
case ‘>’:
result.appent(“>”);
break;
}
}
措施2:在服务器端采用白名单对输入数据进行验证,拒绝包含HTML特殊字符输入
//此处校验username
String username = request.getParameter(“username”);
If(ValidatormatchPatterm(username),”^[a-z A-Z0-9]*$”){
//username验证通过后的代码
}
措施3:在服务端对非法的HTML代码,如单引号、双引号等进行检查或过滤
pVlaue = pValue.toUpperCase();
String[] strCross ={“SCRIPT”,”<”,”>”,”\”,”’”,”&”,”#”,”%”,”+”};
for(int i=0;i<strCross.length;i++){
If(pValue.indexOf(strCross[i]>0){
return 1;
}
}