




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、安全攻击及防范手册 版本1.0 2010年8月 1 概述 1.1 简介 当今世界, Internet (因特网 )已经成为一个非常重要的基础平 台,很多企业都将应用架设在该平台上,为客户提供更为方便、 快捷的服务支持。这些应用在功能和性能上,都在不断的完善和 提高,然而在非常重要的安全性上,却没有得到足够的重视。随 着 WEB 技术应用的范围越来越广泛, WEB 技术相关的安全漏洞越来 越多的被挖掘出来,而针对 WEB 站点的攻击已经成为了最流行的攻 击途径。 不久前项目管理部对公司内外重点系统进行了一次安全隐患分 析测试,并总结出了公司安全测试问题分类及描述的报告文档。 本文针对此报告中提到
2、的一些重大安全隐患问题逐一分析, 并给出相 应的解决方案。 1.2 参考 资料 Java安全性编程实例 网站系统安全开发手册 企业级Java安全性(构建安全的J2EE应用) 2 WEB 安全隐患及预防措 施 2.1 会话标识未更 新 2.1.1 描述 登陆过程前后会话标识的比较, 显示它们并未更新, 这表示有可 能伪装用户。 初步得知会话标识值后, 远程攻击者有可能得以充当已 登录的合法用户。 2.1.2 安全级别 高。 2.1.3 安全风险 可能会窃取或操纵客户会话和cookie,它们可能用于模仿合法用 户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事 务。 2.1.4 解决方案
3、不要接受外部创建的会话标识。 始终生成新的会话,供用户成功认证时登录。 防止用户操纵会话标识。 请勿接受用户浏览器登录时所提供的会话标识。 如果有验证码的。验证码改用 application 存储。同时记得释放资 源 2.1.5 技术实现 登陆界面和登陆成功的界面一致时 修改后台逻辑,在验证登陆逻辑的时候,先强制让当前 session 过期,然后用新的session存储信息。 登陆界面和登陆成功的界面不一致时 在登陆界面后增加下面一段代码,强制让系统session过期。 request.getSession().invalidate()清空 session Cookie cookie = re
4、quest.getCookies()0;获取 cookie cookie.setMaxAge(O);/让 cookie过期 注意: 框架 2.0 已经修改了登陆验证类,登陆成功后会清理掉当前 session重新创建一个新的 session凡是使用框架2.0的项目均 可统一增加此功能。 2.2 不充分帐户封 锁 2.2.1 描述 程序没有使用锁定功能,可以穷举密码,可以造成蛮力攻击,恶 意用户发送大量可能的密码和 /或用户名以访问应用程序的尝试。 由 于该技术包含大量登录尝试, 未限制允许的错误登录请求次数的应用 程序很容易遭到这类攻击。 2.2.2 安全级别 2.2.3 安全风险 可能会升级用
5、户特权并通过 Web 应用程序获取管理许可权。 2.2.4 解决方案 请确定允许的登录尝试次数(通常是 3-5 次),确保超出允许的 尝试次数之后,便锁定帐户。 为了避免真正的用户因帐户被锁定而 致电支持人员的麻烦, 可以仅临时性暂挂帐户活动, 并在特定时间段 之后启用帐户。 帐户锁定大约 10 分钟,通常用这样的方法阻止蛮力 攻击。 2.2.5技术实现 提供锁定信息配臵类,可根据项目特定需求修改此配臵信息 baain id 是否需要時户锁定功能 t rue 帐P锁定时间毋钟) 2 ,亠亠 帐户锁定后的跳转页面 (property nauiBloginCount煙毎琏殊失败寥少次咪户锁疋 3
6、/ c Jimon/1 ck Ac count. j sp /bean 修改登陆验证逻辑,根据上面的配臵信息提供帐户锁定功能。 注意: 框架2.0已经实现了此功能,凡是使用框架2.0的项目均可 统一增加此功能。 2.3 可预测的登录 凭证 2.3.1 描述 发现应用程序会使用可预期的认证凭证(例如: admin+admin、 guest+gues)t 。 攻击者很容易预测用户名和密码,登录应用程序,从 而获取未获授权的特权。 2.3.2 安全级别 高。 2.3.3 安全风险 可能会升级用户特权并通过 Web 应用程序获取管理许可权。 2.3.4 解决方案 不应使用易于预测的凭证(例如: adm
7、in+admin、 guest+gues、t test+test 等),因为它们可能很容易预测,可让用户不当进入应用程 序。 2.3.5 技术实现 只要养成良好的习惯, 坚决不使用容易预测的名和密码, 即可彻 底杜绝此类问题 2.4 登录错误消息凭证枚举 2.4. 1描述 当试图利用不正确的凭证来登录时,当用户输入无效的用户名和 无效的密码时,应用程序会分别生成不同的错误消息。通过利用该 行为,攻击者可以通过反复试验(蛮力攻击技术)来发现应用程序的 有效用户名,再继续尝试发现相关联的密码。 2.4.2安全级别 2.4.3安全风险 可能会升级用户特权并通过 Web应用程序获取管理许可权。 2.
8、4. 4解决方案 不论名和密码哪个错误,都提示同样的消息。且同时加上登陆失 败次数达到规定的帐户锁定功能。 2.4.5技术实现 不论名和密码哪个错误,都提示如下所示同样的消息: 一旦某个帐户连续登陆失败次数达到了规定的数值, 就会按配臵 的时间被锁定,如下提示: 瞰尸锁定中1谙稍后再词甲 j确定 如此一来,攻击者就没机会穷举帐户和密码了, 此类攻击也就不 可能发生了! 注意: 框架2.0已经实现了此功能,凡是使用框架2.0的项目均可 统一增加此功能。 2.5已解密的登录请求 2. 5. 1描述 通过HTTP POST发送表单数据,这些数据将在HTTP报文中以 明文的形式传输。对于一些敏感的数据
9、(如用户名 /密码、信用卡密 码)以传统的HTTP报文传输存在巨大的风险。 2. 5.2安全级别 2.5.3 安全风险 可能会窃取诸如用户名和密码等未经加密即发送了的用户登录 信息。 2.5.4 解决方案 (1) 饶过AppScan软件扫描 ( 2) 对提交的敏感信息,一律以加密方式传给服务器。 (3) 采用基于SSL的HTTPS传输协议,对提交的敏感信息在传输过 程中加密。 敏感信息包括:用户名、密码、社会保险号码、信用卡号码、驾 照号码、电子邮件地址、电话号码、邮政编码等。 注意:如果不是基于SSL的HTTPS传输协议的话。对于提交的 敏感信息即使加密后,AppScan软件同样认为该漏洞存
10、在。所以避免 这一漏洞的有效方案是饶过扫描或者采用基于 SSL的HTTPS传输协 议。 虽然采取 HTTPS 传输数据有很高的安全性,但是也有以下几个 显著的缺点: 需要申请一个合法组织颁发的用来加 / 解密的证书。 部署、配臵繁琐。 同样的硬件环境,效率比 HTTP 慢很多。 通过上述分析,采取基于SSL的HTTPS传输协议, 付出的代价有点大,是否有必要这样做,值得深入讨 论。 :把text=password这个用其他的代替,就可以解决 已解密的登录请求 密 码: js 代码 function hiddenPass(e) e = e ? e : window.event; var kcod
11、e = e.which ? e.which : e.keyCode; var pass = document.getE|ementById(password1); varj_pass= document.getE|ementById(password); if(kcode!=8) var keychar=String.fromCharCode(kcode); j_pass.va|ue=j_pass.va|ue+keychar; j_pass.value=j_pass.value.substring(0,pass.length); 2.5.5 技术实现 (1) 饶过AppScan软件扫描 绕过软
12、件扫描有两种方式,如下: 修改密码输入框名字和类型 经过不断扫描测试分析,如果密码输入框的名字不包含 password、pwd 等关键字的话,大部分页面就不会扫描出漏洞。如果 还能扫描出漏洞的话, 那就在修改密码输入框名字的基础上, 把输入 框的type的属性值为password的值改为text,然后用Javascript函数 来模拟实现星号代替输入值的密码输入效果即可饶过该扫描。 示例步骤如下: 在原来的密码输入框前添加一个新的输入控件: 如: 注:其中 document.getElementById(cipher).focus() 中 cipher 为原来密码输入框的 ID 值, 这个是为
13、了 Tab键能起作用而设置的。 修改原来密码框的type属性为text,并添加onkeyup函数 如下: 其中的 code 为新添加的输入控件 ID 。 在页面的head标签中间添加如下样式: 宋体; 其中code代表新添加的输入控件ID , cipher代表原来密码输入框 的ID。样式表的ID必须和控件的ID 一致。 采用AJAX登录 把登陆界面的Form标签去掉,采用AJAX登录。示例代码如下: vhtml xmlns=/1999/xhtml vmeta http-equiv=Content-Type content=text/html; charset=u
14、tf-8 / 登陆页面 vstyle type=text/css 用户: 密码: 记住密码 v/tr v/tr vscript language=javascript type=text/javascript var request = false; try request = new XMLHttpRequest(); catch (trymicrosoft) try request = new ActiveX0bject(Msxml2.XMLHTTP); catch (othermicrosoft) try request = new ActiveXObject(Microsoft.XML
15、HTTP); catch (failed) request = false; function getCustomerInfo() varurl= j_acegi_security_check?j_username=+document.getElementByld(j_username).value+ alert(url+url); request.open(GET, url, true); /调用回调函数 request.onreadystatechange = updatePage; request.send(null); function updatePage() if (request
16、.readyState = 4) if (request.status = 200) var response = request.responseText; document.write(response); else if (request.status = 404) alert(Requested URL is not found.); else if (request.status = 403) alert(Access denied.); else alert(status is + request.status); v/script v/body (2) 采用基于SSL的HTTPS
17、传输协议 以Weblogic默认配臵为例,步骤如下: 启动Weblog ic,进入Con soles展开Servers单击服务器名, 在右边的配臵栏中,选择常规。在出现的内容中选中已启用 SSL监视端口,并配臵监视端口,如下图: 也 0 已启fl) SSL 牯定是否可哄通11默认WSL监听瑞仿问胡段务器如黒旳岀Log呛险昭域的管理瑞口己启用,则常里涵蚩通过此管理瑞口作嶄、而应甲哇帶诉 量適辻监听端和SSL监听端口怙常。如呆已禁用它理JffiQ.则所有流盂都適过遞听端口利酣L监听端口伶轼= 逸岛L益新峯口: 7002- 此殆爵=5曲听SSL删法求的TCP/IP 口* 重新启动Weblogic测试
18、HTTPS协议,测试地址格式示例: https:/IP:端口/ApplicationName 2.6 SQL注入 2.6. 1描述 随着B/S模式应用开发的发展,使得使用这种模式编写应用程序 的程序员也越来越多。但是由于这个行业的入门门槛不高,程序员的 水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没 有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。攻 击者可以通过互联网的输入区域,利用某些特殊构造的 SQL语句插 入 SQL 的特殊字符和指令,提交一段数据库查询代码(一般是在浏 览器地址栏进行,通过正常的 www 端口访问),操纵执行后端的 DBMS 查询并获得本不为用
19、户所知数据的技术,也就是 SQL Injection( SQL 注入)。 2.6.2 安全级别 高。 2.6.3 安全风险 可能会查看、修改或删除数据库条目和表。 2.6.4 解决方案 过滤掉用户输入中的危险字符。 检查用户输入的字段类型,确保用户输入的值和类型(如 Integer、 Date 等)有效,且符合应用程序预期。 屏蔽一些详细的错误消息,因为黑客们可以利用这些消息。 使用专业的漏洞扫描工具。 企业要在 Web 应用程序开发过程的所有阶段实施代码的安全 检查。首先,要在部署 Web 应用之前实施安全测试,这种措 施的意义比以前更大、更深远。企业还应当在部署之后用漏 洞扫描工具和站点监
20、视工具对网站进行测试 2.6.5技术实现 (1) 米用过滤器技术。 过滤技术是通过特定过滤函数,去查找每个请求的每个参数 对应的值,如果出现了不允许的字符,就会弹出如下提示: 点确定后即可回到请求页面,删除敏感字符即可请求成功! 过滤器ParameterFilter.Jav代码如下: /* *参数过滤类,过滤普通表单 */ public class ParameterFilter impleme nts Filter private Pattern scriptPattern; private Pattern sqlPattern; private Pattern letterPattern;
21、 private String notProtect =; private String totalLetter =; public void destroy。 public void doFilter(ServletRequest request, ServletResp onse resp on se, FilterChain filtreChain) throws IOException, ServletException HttpServletRequest req = (HttpServletRequest) request; String conten tType = reques
22、t.getC onten tType() = n ull ? : request .getC onten tType(); if (!c onten tType.startsWith(multipart/form-data) boolea n isSecurity = true; while (n ull != params Strin g para_value = n ull; para_value = (String) req.getParameterValues(para_name); for (int i = 0; i para_value.length; i+) String _pa
23、ra_value = para_valuei.toLowerCase(); if (scriptPattern.matcher(_para_value).matches() | sqlPattern.matcher(_para_value).matches() isSecurity = false; break; if (!isSecurity) break; if (!isSecurity) response.setContentType(text/html; charset=GBK); response.getWriter().write(alert(输入有误,请不 要包含 +totalL
24、etter+ 中的任何敏感字符 !);history.go(-1);); return; filtreChain.doFilter(request, response); public void init(FilterConfig filterConfig) throws ServletException letterPattern = Ppile(a-z*); String scriptPara = filterConfig.getInitParameter(scriptRegx).toLowerCase(); String sqlPara = filterConfig.getInitPar
25、ameter(sqlRegx).toLowerCase(); notProtect = filterConfig.getInitParameter(notProtect); scriptPattern = Ppile(resultStr(scriptPara); sqlPattern = Ppile(resultStr(sqlPara); totalLetter = scriptPara+|+sqlPara; int index = totalLetter.indexOf(); if(index 0) totalLetter = totalLetter.substring(0, index)+
26、totalLetter.substring(index+1); public String resultStr(String oldStr) String newStr = ; if (oldStr != null if (temp.length 0) for (int i = 0; i temp.length; i+) String tempStr = ; boolean isLetter = false; for (int j = 0; j tempi.length(); j+) String str = tempi.substring(j, j + 1); if (letterPatte
27、rn.matcher(str).matches() tempStr = tempStr+ (%+ parseAscii(str.toUpperCase() + )| + (%+ parseAscii(str)+ )|( + str + ); isLetter = true; else if(str.equals( )| str.equals() str = +str; tempStr = tempStr + (%+ parseAscii(str) + )|( + str+ ); isLetter = false; if(isLetter) if (newStr.equals() newStr
28、= newStr + .*(s+)( + tempStr + )(s+).*; else newStr = newStr + |.*(s+)( + tempStr + )(s+).*; else if (newStr.equals() newStr = newStr + .*( + tempStr + ).*; else newStr = newStr + |.*( + tempStr + ).*; return newStr; private String toHexUtil(int n) String rt=; switch(n) case 10:rt+=A;break; case 11:
29、rt+=B;break; case 12:rt+=C;break; case 13:rt+=D;break; case 14:rt+=E;break; case 15:rt+=F;break; default: rt+=n; return rt; public String toHex(int n) StringBuffer sb=new StringBuffer(); if(n/16=0) return toHexUtil(n); else String t=toHex(n/16); int nn=n%16; sb.append(t).append(toHexUtil(nn); return
30、 sb.toString(); public String parseAscii(String str) StringBuffer sb=new StringBuffer(); byte bs=str.getBytes(); for(int i=0;ibs.length;i+) sb.append(toHex(bsi); return sb.toString(); 辅助类如下: public class FilterUtils public static String getFullUrlFromRequest(HttpServletRequest httRequest) String url
31、 = httRequest.getRequestURI(); String queryString = httRequest.getQueryString(); if (null != queryString return url; public static boolean isContainUrl(String urlList, String url) boolean isExclude = false; if (null != urlList if (null != resources) for (int i = 0; i = 0) isExclude = true; break; re
32、turn isExclude; web.xml配臵片段如下: SecurityFilter ponent.usrmgr.security.filter.ParameterFilter scriptRegx !CDATA |=|and sqlRegx notProtect login.html,.upload SecurityFilter *.jsp 2)每个请求都采取特定的数据验证函数,验证数据的类型和 长度,只允许特定的特殊字符输入 、/ I 。宀 注意: 有些聪明的攻击者在攻击的时候会把一些敏感字符转化成 URL 编码(即字符的 ASCII 的 16 进制)来饶过检查。所以, 我们在过滤字
33、符的时候也要对敏感字符的 URL 编码进行过 滤,如( 对应的 URL 编码是 %3C) 已经完成的且正在运行的系统, 建议采用过滤器技术, 因为过 滤器技术侵入性小、代码量小、部署方便 对于未完成的且正在开发的系统, 建议采用第二个方案。 因为 过滤器技术虽然能确保数据的正确性,但同时也存在着过滤 不严或过滤太严的问题。不能满足某些特殊的业务需求。 2.7 跨站点脚本攻 击 2.7.1 描述 XSS又叫CSS (Cross Site Script,跨站脚本攻击。它指的是恶意 攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌 入其中Web里面的html代码会被执行,从而达到恶意
34、用户的特殊目 的。 2.7.2 安全级别 高。 2.7.3 安全风险 可能会窃取或操纵客户会话和cookie,它们可能用于模仿合法用 户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事 务。 2.7.4 解决方案 在你的WEB浏览器上禁用javascript脚本 开发者要仔细审核代码,对提交输入数据进行有效检查 2.7.5技术实现 参见2.6.5技术实现中的过滤器技术。 2.8跨站点请求伪造 2. 8. 1描述 CSRF (Cross-site request forge) 中文名称:跨站请求伪造,也 被称为:one click attack/session riding 缩写为:CS
35、RF/XSRF。你这可 以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶 意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗 取你的账号,甚至于购买商品,虚拟货币转账.造成的问题包括: 个人隐私泄露以及财产安全。 2.8.2 安全级别 中。 2.8.3 安全风险 可能会窃取或操纵客户会话和cookie,它们可能用于模仿合法用 户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事 务。 2.8.4 解决方案 只允许 GET 请求检索数据,但是不允许它修改服务器上的任 何数据。这个修改可以防止利用 img 标签或者其它的类型的 GET请求的CSRF攻击。 要求所有P
36、OST请求都包含一个随机值。 脚本利用: alert(document.cookie) 2.8.5 技术实现 (1)对于有跨站点请求伪造漏洞的页面,添加一个能在session 中获取token的隐藏字段。 (2)对于Post请求的页面,都需要添加一个固定名字的隐 藏域,值为去服务器获取的随机值。格式如下: input name=CSRF_TOKEN type=hidden id=CSRF_TOKEN value=/ (3)对于Get请求的页面,Url后需要添加一个固定名字的 参数,值为去服务器获取的随机值。格式如下: window.location=loginProcess.jsp?CSRF_
37、TOKEN= (4) 添加CSRF过滤器,该过滤器拦截符合过滤规则的请求, 取得表单的 token 值,和服务上存储的值比较,如果一样,就放行, 如果不一样,就自动跳转错误提示页面。 过滤器代码 public class CsrfFilter implements Filter private String notProtect; / 不受保护的资源集合 private String tokenTimeout; / token 过期时间 public void init(FilterConfig filterConfig) throws ServletException notProtect
38、= filterConfig.getInitParameter(notProtect); tokenTimeout = filterConfig.getInitParameter(TokenTimeOut); if (null = tokenTimeout) tokenTimeout = 10; public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException HttpServletRequest
39、 req = (HttpServletRequest) request; HttpSession session = req.getSession(true); if (!FilterUtils.isContainUrl(notProtect, FilterUtils.getFullUrlFromRequest(req) StringpreviousNonce= req.getParameter(TokenBuilder.CSRF_NONCE_REQUEST_PARAM); Object obj = session.getAttribute(TokenBuilder.CSRF_NONCE_RE
40、QUEST_PARAM) ; String expectedNonce = obj = null ?:(String)obj; if (expectedNonce.equals() expectedNonce = TokenBuilder.generateToken(); session.setAttribute(T okenBuilder.CSRF_NONCE_REQUEST_PARAM, expectedNonce); if (null != previousNonce) if(TokenBuilder.checkT okenTimeout(previousNonce, tokenTime
41、out) ) expectedNonce = TokenBuilder.generateT oken(); session.setAttribute(T okenBuilder.CSRF_NONCE_REQUEST_PARAM, expectedNonce); if(!TokenBuilder.isT okenValid(expectedNonce,previousNonce) response.setContentType(text/html; charset=GBK); response.getWriter().write(alert( 无 效的安全标识符,请重新刷新当前页面 !);his
42、tory.go(-1);); return; filterChain.doFilter(request, response); public void destroy() FilterUtil 类代码,参见2.6 sql注入技术实现中的辅助类代码。 Toke nBuilder 类代码 public class TokenBuilder private static Map map = new HashMap(); public static final String CSRF_NONCE_REQUEST_PARAM = CSRF_TOKEN; public synchronized stati
43、c String generateToken() byte random = new byte16; StringBuffer buffer = new StringBuffer(); SecureRandom randomSource = new SecureRandom(); randomSource.nextBytes(random); for (int j = 0; j 4); byte b2 = (byte) (randomj if (b1 10) buffer.append(char) (0 + b1); else buffer.append(char) (A + (b1 - 10
44、); if (b2 = term) isTimeout = true; catch(Exception e) isTimeout = true; while (it.hasNext() String key = (String) it.next(); long tokenTime = Long.valueOf(key.split(:)0).longValue(); long interval = nowTime - tokenTime; if (interval = term) it.remove(); return isTimeout; public synchronized static
45、boolean isT okenValid(String savedToken,String token) boolean isT okenValid = map.containsKey(token); if(savedToken.equals(token) if (isTokenValid) map.remove(token); isTokenValid = true; else if (isTokenValid) map.remove(token); return isTokenValid; wem.xml 配臵 CsrfFilter ponent.usrmgr.security.filt
46、er.CsrfFilter TokenTimeOut 15 CsrfFilter *.jsp 注意:这是目前唯一能解决此漏洞的可行方案,但是有一定的 工作量,且对系统效率也有轻微影响,是否有必要修改,值得商榷。 2.9 发现数据库错 误模式 2.9.1 描述 “ SQL 注入”以外的攻击所触发的“数据库错误”,插入的危 险字符渗透了应用程序并到达 SQL 查询本身(即应用程序易受到 SQL 注入攻击)。 2.9.2 安全级别 高。 2.9.3 安全风险 可能会查看、修改或删除数据库条目和表。 2.9.4 解决方案 A 确保用户输入的值和类型(如 Integer、 Date 等)有效,且符 合应
47、用程序预期 B. 利用存储过程,将数据访问抽象化,让用户不直接访问表或 视图。当使用存储过程时,请利用 ADO 命令对象来实施它们,以 强化变量类型。 C. 清理输入以排除上下文更改符号,例如: 1 (单引号) 2 (引号) 3 (反斜线转义单引号) 4 (反斜杠转义引号) 5 )(结束括号) 6 ;(分号) 2.9.5 技术实现 参见 2.6.5 技术实现。 2.10 应用 程序错误 2.10.1 描述 如果攻击者通过探测 Web 页来找寻引起异常的各种情况,则出 现信息泄漏攻击。对于攻击者而言,这是一种颇有成效的攻击方法。 因为异常细节信息常以 HTML 的形式返回并显示在浏览器中。这可
48、能会泄漏很有用的信息, 如堆栈跟踪。 堆栈跟踪包含数据库连接字符 串、数据库名、数据库方案信息、 SQL 语句以及操作系统和平台版 本。 2.10.2 安全级别 中。 2.10.3 安 全风险 攻击者可从错误信息判断出 SQL 注入或其他攻击方式的漏洞。 2.10.4 解决方案 (1)检查所有的请求,以了解所有预期的参数和值是否存在。 当参数缺失时,发出适当的错误消息,或使用缺省值。 (2)应用程序应验证其输入是否由有效字符组成 (解码后)。 例 如,应拒绝包含空字节(编码为 %00)、单引号、引号等的输入值。 ( 3) 确保值符合预期范围和类型。如果应用程序预期特定参 数具有特定集合中的值,
49、 那么该应用程序应确保其接收的值确实属于 该集合。例如,如果应用程序预期值在10.99 范围内,那么就该确 保该值确实是数字,且在 10.99 范围内。 (4)请勿在生产环境中输出调试错误消息和异常。 2.10.5 技 术实现 养成良好的编码习惯,屏蔽错误信息,防止信息泄露,将默认的 错误信息替换成一个事先定制好的 Html 页面,这个页面只显示一条 简单的错误消息但不提供任何细节。 例如:可以将浏览器的 404、 500 等错误以一个友好的界面展现 出来。修改工程的web.xm,添加 404 /comnon/addressertor. jsp Kerror-code500 /coniMon/
50、error, j sp 这样的话,一旦出现404错误,页面就会跳转到address.jsp页面, 如下: 如果出现500错误,则页面就会跳转到error.jsp页面,如下: 2.11启用了不安全的HTTP方法 2.11.1描述 Allow 头显示危险的 HTTP选项是已允许的,如:-DELETE - SEARCH - COPY - MOVE等,这表示在服务器上启用了 WebDAV, 可能允许未授权的用户对其进行利用 2.11.2 安全级别 中。 2.11.3 安全风险 可能会在 Web 服务器上上载、修改或删除 Web 页面、脚本和 文件。 2.11.4 解决方案 如果服务器不需要支持 Web
51、DAV ,请务必禁用它,或禁止不必 要的 HTTP 方法(动词)。 2.11.5 技术实现 添加过滤器,只允许POST和GET两个HTTP方法访问系统。 过滤器代码 public class HttpMethodFilter implements Filter public void destroy() public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException HttpServletReq
52、uest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; String method = req.getMethod(); if(!method.toUpperCase().equals(POST) return; filterChain.doFilter(request, response); public void init(FilterConfig filterConfig) throws ServletException web.xml 配臵 ht
53、tpMethodFilter ponent.usrmgr.security.filter.HttpMethodFilter httpMethodFilter /* 注意:此漏洞仅在 Tomcat 服务器中存在。 2.12 BEA WebLogic 管理界 面 2.12.1 描述 WebLogic 服务器包含若干管理用途的应用程序: /AdminMain 、 /AdminProps 、/AdminRealm 、webguitop.html 和 /console/index.jsp。 攻击者可以访问其中一或多个应用程序,也许能够更改 Web 站 点的配臵。 2.12.2 安全级别 中。 2.12.
54、3 安全风险 可能会升级用户特权并通过 Web 应用程序获取管理许可权。 2. 12.4解决方案 限制访问管理控制台,倘若不需要,请将其除去 2. 12. 5技术实现 将“ con sole ”改名,改一个和业务相关的标识名字即可。 实现步骤: (1) 进入管理控制台,地址格式为:http:/ip:端口/console (2) 点击左边的 domain,如下图,点 mydomain 控制台 曰 mydomain 曰服务器 4 myserver 口群集 匸I计算机 田一I郁署 田口吏全性 匸I域曰志谛述器 匚J任努 (3) 点击进入右边的配臵-常规选项卡, 然后点显示,出现 高级选项,如下图 (4) 修改上图中的控制台上下文路径,如vseafConsole然后 点击右下角的应用按钮,然后重新启动服务器即可。 (5) 访问
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国际旅游市场趋势-洞察及研究
- 区域发展政策比较-洞察及研究
- 广东肇庆2024小升初数学试卷
- 加密货币监管效果评估-洞察及研究
- 南阳三中选拔考试试题及答案
- 微流控芯片制备-洞察及研究
- 河北省会考数学试卷
- 各市初二期末数学试卷
- 黄陂区六下数学试卷
- 联宝新员工入职考试试题及答案
- 《地下工程泥浆施工标准》
- 抛光简介介绍
- 热射病预防与急救
- 初中音乐课件《夏日泛舟海上》
- 采气工班长岗位述职报告
- 呼吸系统课件ppt免费
- 国家开放大学2023年7月期末统一试《42732土地利用规划》试题及答案-开放专科
- 某药业集团产品说明书:加替沙星注射液
- 工艺危险性分析报告
- 消防水箱施工方案 消防水箱的制作要求(6篇)
- 美国范登堡空军基地
评论
0/150
提交评论