当前位置:文档之家› WEB开发安全漏洞修复方案

WEB开发安全漏洞修复方案

密级:保密WEB开发安全漏洞修复方案()文档编号:文档名称:WEB开发安全漏洞修复方案编写:审核:批准:批准日期:技术研究部文档修订记录() (1)1.1背景 (1)1.2FSDP安全漏洞清单 (1)1.3安全漏洞修复方案 (1)1.3.1会话标识未更新 (1)1.3.2已解密的登录请求 (4)1.3.3通过框架钓鱼 (11)1.3.4链接注入(便于跨站请求伪造) (18)1.3.5应用程序错误 (26)1.3.6SQL注入 (29)1.3.7发现数据库错误模式 (40)1.3.8启用了不安全的HTTP方法 (51)1.3.9发现电子邮件地址模式 (54)1.3.10HTML注释敏感信息泄露 (54)1.3.11发现内部IP泄露模式 (55)1.3.12主机允许从任何域进行flash访问 (56)1.3.13主机应用软件漏洞修复 (57)1.3.14目录列表 (58)1.3.15跨站点请求伪造 (59)1.1需要注意的问题 (60)1.2用户锁定解锁功能 (60)1.1背景随着移动公司对信息安全的进一步加强,要求我们部署的系统必须满足安全扫描要求。

本文档描述了安徽移动对FSDP安全扫描的漏洞的解决方案,并作为WEB开发的安全编程规范。

1.2FSDP安全漏洞清单见《WEB开发安全漏洞清单.xlsx》1.3安全漏洞修复方案1.3.1会话标识未更新(一)URL(二)安全问题描述根据WASC:“会话固定”是一种攻击技术,会强制用户的会话标识变成显式值。

固定会话标识值的技术有许多种,会随着目标Web 站点的功能而不同。

从利用“跨站点脚本编制”到向Web 站点密集发出先前生成的HTTP 请求,都在这些技术范围内。

用户的会话标识固定之后,攻击者会等待用户登录,然后利用预定义的会话标识值来假定用户的联机身份。

(三)攻击方法登录过程前后会话标识的比较,显示它们并未更新,这表示有可能伪装用户。

初步得知会话标识值后,远程攻击者有可能得以充当已登录的合法用户。

任何时候,只要一名用户与应用程序的交互状态由匿名转变为确认,应用程序就应该发布一个新的会话令牌。

这不仅适用于用户成功登录的情况,而且适用于匿名用户首次提交个人或其他敏感信息时。

(四)安全规范要求COOKIE中的登陆前JSESSIONID与登陆后JESSIONID不能相同。

(只有J2EE应用服务器为JESSIONID,其他应用服务器可能不同)(五)解决方案将如下代码加入到登陆页面()的最后行:<%().invalidate();etInitParameter("CROSS_DOMAIN_STR");String[] crossDomainAry = (",");for(String s : crossDomainAry){}= getServletContext().getInitParameter("LOGIN_ERROR_TIMES");= getServletContext().getInitParameter("LOGIN_ERROR_LOCK_SECOND");;("LOGIN_ERROR_TIMES="+;("LOGIN_ERROR_LOCK_SECOND="+;}在init方法中直接调用在类中增加checkCrossDomain 跨域特殊字符串检查,并在doFilter 中进行判断验证,如果存在特殊字符,则直接跳转到登陆界面修改,此处是用于处理返回的错误信息目前是通过<html-el:errors />标签方式加载错误信息,此处可根据输入的条件来进行错误注入,执行js代码,修改该当如下:一、将此错误标签通过textarea进行包装,错误信息是以文本方式显示,无法执行,如下:<textarea style="height:100%;width:95%;color:red" readonly=true><html-el:errors /></textarea>同时修改类的processError 方法,将(ste[i]).append("<br>"); 这段代码改为(ste[i]).append("\n");二、无论返回什么错误信息,此处只显示“操作故障,请确认操作是否合法或联系管理员检查!”启用了不安全的HTTP 方法<security-constraint><web-resource-collection><url-pattern>/*</url-pattern><http-method>PUT</http-method><http-method>DELETE</http-method><http-method>HEAD</http-method><http-method>OPTIONS</http-method><http-method>TRACE</http-method><http-method>SEARCH</http-method><http-method>COPY</http-method><http-method>MOVE</http-method><http-method>PROPFIND</http-method><http-method>PROPPATCH</http-method><http-method>MKCOL</http-method><http-method>LOCK</http-method><http-method>UNLOCK</http-method> </web-resource-collection><auth-constraint></auth-constraint></security-constraint><login-config><auth-method>BASIC</auth-method> </login-config>1.3.2已解密的登录请求(一)URL(二)安全问题描述用户登录密码为明文(三)攻击方法可通过http报文截取登录用户密码(四)安全规范要求发送敏感信息时,始终使用SSL 和HTTP POST 方法(五)解决方案修改<Connector protocol=""port="8443" minSpareThreads="5"maxSpareThreads="75"enableLookups="true"disableUploadTimeout="true"acceptCount="100" maxThreads="200"scheme="https" secure="true"SSLEnabled="true"clientAuth="false" sslProtocol="TLS"keystoreFile="D:/"keystorePass="friendone"/> 标红的地方注意,要与附件中存放的位置一致标蓝的8443要注意,外网的一律全用443端口,BOSS网系统还是全用8443端口。

修改,在welcome-file-list后面增加如下配置<login-config><!-- Authorization setting for SSL --><auth-method>CLIENT-CERT</auth-method><realm-name>Client Cert Users-only Area</realm-name><auth-method>BASIC</auth-method></login-config><security-constraint><!-- Authorization setting for SSL --> <web-resource-collection><web-resource-name>SSL</web-resource-na me>/*/oa/为应用登录URL,此为公司OA则为此串*/<url-pattern>/oa/</url-pattern></web-resource-collection><user-data-constraint><transport-guarantee>CONFIDENTIAL </transport-guarantee></user-data-constraint></security-constraint><!-- 禁止不安全的http方法 --><security-constraint><web-resource-collection><web-resource-name>fortune</web-res ource-name><url-pattern>/*</url-pattern><http-method>PUT</http-method><http-method>DELETE</http-method><http-method>HEAD</http-method><http-method>OPTIONS</http-method><http-method>TRACE</http-method> </web-resource-collection><auth-constraint></auth-constraint> </security-constraint>增加初始化变量:<context-param><param-name>HTTP_URI</param-name><param-value>8080</param-value></context-param>此为从https转到http时的跳转值,为应用部署服务器IP地址为端口修改如下:Login方法修改如下:String requesturl = ().toString();requesturl = ("etServletContext().getAttribute("sessions");HttpSession session = (HttpSession)(value);if(session != null){HttpSession nsession = ();,);session = null;}return new ActionForward("/"++"/frames/");}catch(Exception e){("LoginAction Exception Error:"+());throw e;}}修改类的systemLogout方法:String requesturl = ().toString();requesturl = ("在响应页面中,返回发送给CGI 脚本的参数值,嵌入在HTML 中。

相关主题