WEB开发安全漏洞修复方案.doc

上传人:牧羊曲112 文档编号:4220213 上传时间:2023-04-10 格式:DOC 页数:53 大小:202KB
返回 下载 相关 举报
WEB开发安全漏洞修复方案.doc_第1页
第1页 / 共53页
WEB开发安全漏洞修复方案.doc_第2页
第2页 / 共53页
WEB开发安全漏洞修复方案.doc_第3页
第3页 / 共53页
WEB开发安全漏洞修复方案.doc_第4页
第4页 / 共53页
WEB开发安全漏洞修复方案.doc_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《WEB开发安全漏洞修复方案.doc》由会员分享,可在线阅读,更多相关《WEB开发安全漏洞修复方案.doc(53页珍藏版)》请在三一办公上搜索。

1、密级:保密 WEB开发安全漏洞修复方案()文档编号:文档名称:WEB开发安全漏洞修复方案编 写:审 核: 批 准:批准日期:技术研究部文档修订记录编号版本号修订内容简述修订日期作者审核1初稿2012-7678910111213141516()1背景1FSDP安全漏洞清单1安全漏洞修复方案1会话标识未更新1登录错误消息凭证枚举2不充分帐户封锁2跨站点脚本编制3已解密的登录请求6跨站点脚本编制9通过框架钓鱼13链接注入(便于跨站请求伪造)18应用程序错误25SQL注入29发现数据库错误模式38启用了不安全的HTTP方法48发现电子邮件地址模式50HTML注释敏感信息泄露51发现内部IP泄露模式52

2、主机允许从任何域进行flash访问53主机应用软件漏洞修复53目录列表54跨站点请求伪造55需要注意的问题56 1.1 背景随着移动公司对信息安全的进一步加强,要求我们部署的系统必须满足安全扫描要求。本文档描述了安徽移动对FSDP安全扫描的漏洞的解决方案,并作为WEB开发的安全编程规范。1.2 FSDP安全漏洞清单见WEB开发安全漏洞清单.xlsx1.3 安全漏洞修复方案1.3.1 会话标识未更新(一) URL(二) 安全问题描述根据WASC:“会话固定”是一种攻击技术,会强制用户的会话标识变成显式值。固定会话标识值的技术有许多种,会随着目标Web 站点的功能而不同。从利用“跨站点脚本编制”到

3、向Web 站点密集发出先前生成的HTTP 请求,都在这些技术范围内。用户的会话标识固定之后,攻击者会等待用户登录,然后利用预定义的会话标识值来假定用户的联机身份。(三) 攻击方法登录过程前后会话标识的比较,显示它们并未更新,这表示有可能伪装用户。初步得知会话标识值后,远程攻击者有可能得以充当已登录的合法用户。任何时候,只要一名用户与应用程序的交互状态由匿名转变为确认,应用程序就应该发布一个新的会话令牌。这不仅适用于用户成功登录的情况,而且适用于匿名用户首次提交个人或其他敏感信息时。(四) 安全规范要求COOKIE中的登陆前JSESSIONID与登陆后JESSIONID不能相同。(只有J2EE应

4、用服务器为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_

5、TIMES=+;(LOGIN_ERROR_LOCK_SECOND=+;在init方法中直接调用在类中增加checkCrossDomain 跨域特殊字符串检查,并在doFilter 中进行判断验证,如果存在特殊字符,则直接跳转到登陆界面修改,此处是用于处理返回的错误信息目前是通过标签方式加载错误信息,此处可根据输入的条件来进行错误注入,执行js代码,修改该当如下:一、将此错误标签通过textarea进行包装,错误信息是以文本方式显示,无法执行,如下: 同时修改类的processError 方法,将(stei).append(); 这段代码改为(stei).append(n); 二、无论返回什么错

6、误信息,此处只显示“操作故障,请确认操作是否合法或联系管理员检查!”启用了不安全的HTTP 方法/*PUTDELETEHEADOPTIONSTRACESEARCHCOPYMOVEPROPFINDPROPPATCHMKCOLLOCKUNLOCKBASIC1.3.2 已解密的登录请求(一) URL(二) 安全问题描述用户登录密码为明文(三) 攻击方法可通过http报文截取登录用户密码(四) 安全规范要求发送敏感信息时,始终使用SSL 和HTTP POST 方法(五) 解决方案修改标红的地方注意,要与附件中存放的位置一致标蓝的8443要注意,外网的一律全用443端口,BOSS网系统还是全用8443端

7、口。修改,在welcome-file-list后面增加如下配置 CLIENT-CERT Client Cert Users-only Area BASIC SSL/*/oa/ 为应用登录URL,此为公司OA则为此串*/ /oa/ CONFIDENTIAL fortune /* PUT DELETE HEAD OPTIONS TRACE 增加初始化变量:HTTP_URI8080此为从https转到http时的跳转值, 为应用部署服务器IP地址为端口修改如下:Login方法修改如下:String requesturl = ().toString();requesturl = (etServletC

8、ontext().getAttribute(sessions); HttpSession session = (HttpSession)(value); if(session != null) HttpSession nsession = (); ,); (value, nsession); session = null; return new ActionForward(/+/frames/);catch(Exception e)(LoginAction Exception Error:+();throw e;修改类的systemLogout方法:String requesturl = ()

9、.toString(); requesturl = (在响应页面中,返回发送给CGI 脚本的参数值,嵌入在HTML 中。例如:请求GET /cgi-bin/?name=JSmith HTTP/响应HTTP/ 200 OKServer: SomeServerDate: Sun, 01 Jan 2002 00:31:19 GMTContent-Type: text/htmlAccept-Ranges: bytesContent-Length: 27Hello JSmithB. 在HTML 参数值上下文中,返回发送给CGI 脚本的参数值。例如:请求GET /cgi-bin/?name=JSmith

10、HTTP/响应 HTTP/ 200 OK Server: SomeServer Date: Sun, 01 Jan 2002 00:31:19 GMT Content-Type:text/html Accept-Ranges: bytes Content-Length: 254Please fill in your zip code: (一) 安全规范要求通过验证用户输入未包含危险字符,便可能防止恶意的用户导致应用程序执行计划外的任务,例如:启动任意SQL 查询、嵌入将在客户端执行的Javascript 代码、运行各种操作系统命令,等等。建议过滤出所有以下字符:1 |(竖线符号)2 & (&

11、符号)3;(分号)4 $(美元符号)5 %(百分比符号)6 (at 符号)7 (单引号)8 (引号)9 (反斜杠转义单引号)10 (反斜杠转义引号)11 (尖括号)12 ()(括号)13 +(加号)14 CR(回车符,ASCII 0x0d)15 LF(换行,ASCII 0x0a)16 ,(逗号)17 (反斜杠)(二) 解决方案类中的getLoginInfo 方法,将之前的操作员工号与密码拼接方式改成SQL变量绑定方式StringBuffer sqlbuf = new StringBuffer();(SELECT .orgcode,);( now() AS logindate,sp_genseq

12、func(S,D) AS sessionid,);( (SELECT GROUP_CONCAT FROM tb_userdatarel B WHERE = ?) AS datatypes ,PASSWORD(?)= AS pwdiscorrect);( FROM tb_user A,tb_organization C);( WHERE = ? AND = CURDATE() AND = );增加如下配置:CROSS_DOMAIN_STR<,%3C,%3EGET_CROSS_DOMAIN_STR<,%,;,(,),&,+,HTTP,http,%0a类增加如下变量:/* 跨域特

13、殊字符判断*/public static List CROSS_DOMAIN_STR = new ArrayList();public static List GET_CROSS_DOMAIN_STR = new ArrayList();类增加initSafetyConf 安全初始化配置方法private void initSafetyConf() crossDomainStr = getServletContext().getInitParameter(CROSS_DOMAIN_STR);String crossDomainAry = (,);for(String s : crossDoma

14、inAry) = getServletContext().getInitParameter(GET_CROSS_DOMAIN_STR);crossDomainAry = (,);for(String s : crossDomainAry) = getServletContext().getInitParameter(LOGIN_ERROR_TIMES); = getServletContext().getInitParameter(LOGIN_ERROR_LOCK_SECOND); = getServletContext().getInitParameter(HTTP_URI);(LOGIN_

15、ERROR_TIMES=+;(LOGIN_ERROR_LOCK_SECOND=+;(HTTP_URI=+;在init方法中直接调用在类中增加checkCrossDomain 跨域特殊字符串检查,并在doFilter 中进行判断验证,如果存在特殊字符,则直接跳转到登陆界面修改,此处是用于处理返回的错误信息目前是通过标签方式加载错误信息,此处可根据输入的条件来进行错误注入,执行js代码,修改该当如下:一、将此错误标签通过textarea进行包装,错误信息是以文本方式显示,无法执行,如下: 同时修改类的processError 方法,将(stei).append(); 这段代码改为(stei).ap

16、pend(n); 二、无论返回什么错误信息,此处只显示“操作故障,请确认操作是否合法或联系管理员检查!”1.3.3 通过框架钓鱼(一) URL(二) 安全问题描述网络钓鱼是一个通称,代表试图欺骗用户交出私人信息,以便电子欺骗身份。攻击者有可能注入frame 或iframe 标记,其中含有类似受攻击之网站的恶意属性。不小心的用户有可能浏览它,但并不知道他正在离开原始网站,冲浪到恶意的网站。之后,攻击者便可以诱惑用户重新登录,然后获取他的登录凭证。(三) 攻击方法伪造的网站嵌入在原始网站中,这个情况对攻击者有帮助,因为他的网络钓鱼企图会披上更可信赖的外表。利用的样本:如果参数值未经适当清理便反映在

17、响应中,那么下列请求: name=evil src=会使响应含有通往这个邪恶站点的框架。(四) 安全规范要求若干问题的补救方法在于对用户输入进行清理。通过验证用户输入未包含危险字符,便可能防止恶意的用户导致应用程序执行计划外的任务,例如:启动任意SQL 查询、嵌入将在客户端执行的Javascript 代码、运行各种操作系统命令,等等。建议过滤出所有以下字符:1 |(竖线符号)2 & (& 符号)3;(分号)4 $(美元符号)5 %(百分比符号)6 (at 符号)7 (单引号)8 (引号)9 (反斜杠转义单引号)10 (反斜杠转义引号)2012-7-4 16:57:34 154/18711 (尖

18、括号)12 ()(括号)13 +(加号)14 CR(回车符,ASCII 0x0d)15 LF(换行,ASCII 0x0a)16 ,(逗号)17 (反斜杠)以下部分描述各种问题、问题的修订建议以及可能触发这些问题的危险字符:SQL 注入和SQL 盲注:A. 确保用户输入的值和类型(如Integer、Date 等)有效,且符合应用程序预期。B. 利用存储过程,将数据访问抽象化,让用户不直接访问表或视图。当使用存储过程时,请利用ADO 命令对象来实施它们,以强化变量类型。C. 清理输入以排除上下文更改符号,例如:1 (单引号)2 (引号)3 (反斜线转义单引号)4 (反斜杠转义引号)5 )(结束括号

19、)6 ;(分号)跨站点脚本编制:A. 清理用户输入,并过滤出JavaScript 代码。我们建议您过滤下列字符:1 (尖括号)2 (引号)3 (单引号)4 %(百分比符号)5 ;(分号)6 ()(括号)7 &(& 符号)8 +(加号)B. 如果要修订 变体,请参阅MS 文章 821349C. 对于UTF-7 攻击: - 可能的话,建议您施行特定字符集编码(使用 Content-Type 头或 标记)。HTTP 响应分割:清理用户输入(至少是稍后嵌入在HTTP 响应中的输入)。请确保输入未包含恶意的字符,例如:1 CR(回车符,ASCII 0x0d)2 LF(换行,ASCII 0x0a)远程命令

20、执行:清理输入以排除对执行操作系统命令有意义的符号,例如:1 |(竖线符号)2 & (& 符号)3;(分号)执行shell 命令:A. 绝不将未检查的用户输入传递给eval()、open()、sysopen()、system() 之类的Perl 命令。B. 确保输入未包含恶意的字符,例如:1 $(美元符号)2 %(百分比符号)3 (at 符号)XPath 注入:清理输入以排除上下文更改符号,例如:1 (单引号)2 (引号) 等LDAP 注入:A. 使用正面验证。字母数字过滤(A.Z,a.z,0.9)适合大部分LDAP 查询。B. 应该过滤出或进行转义的特殊LDAP 字符:2012-7-4 16

21、:57:34 155/1871 在字符串开头的空格或“#”字符2 在字符串结尾的空格字符3 ,(逗号)4 +(加号)5 (引号)6 (反斜杠)7 (尖括号)8 ;(分号)9 ()(括号)MX 注入:应该过滤出特殊MX 字符:1 CR(回车符,ASCII 0x0d)2 LF(换行,ASCII 0x0a)记录伪造:应该过滤出特殊记录字符:1 CR(回车符,ASCII 0x0d)2 LF(换行,ASCII 0x0a)3 BS(退格,ASCII 0x08)ORM 注入:A. 确保用户输入的值和类型(如Integer、Date 等)有效,且符合应用程序预期。B. 利用存储过程,将数据访问抽象化,让用户不

22、直接访问表或视图。C. 使用参数化查询APID. 清理输入以排除上下文更改符号,例如: (*):1 (单引号)2 (引号)3 (反斜线转义单引号)4 (反斜杠转义引号)5 )(结束括号)6 ;(分号)(*) 这适用于SQL。高级查询语言可能需要不同的清理机制。(五) 解决方案类中的getLoginInfo 方法,将之前的操作员工号与密码拼接方式改成SQL变量绑定方式StringBuffer sqlbuf = new StringBuffer();(SELECT .orgcode,);( now() AS logindate,sp_genseqfunc(S,D) AS sessionid,);(

23、 (SELECT GROUP_CONCAT FROM tb_userdatarel B WHERE = ?) AS datatypes ,PASSWORD(?)= AS pwdiscorrect);( FROM tb_user A,tb_organization C);( WHERE = ? AND = CURDATE() AND = );增加如下配置:CROSS_DOMAIN_STR<,%3C,%3E类增加如下变量:/* 跨域特殊字符判断*/public static List CROSS_DOMAIN_STR = new ArrayList();类增加initSafetyConf 安

24、全初始化配置方法private void initSafetyConf() crossDomainStr = getServletContext().getInitParameter(CROSS_DOMAIN_STR);String crossDomainAry = (,);for(String s : crossDomainAry) = getServletContext().getInitParameter(LOGIN_ERROR_TIMES); = getServletContext().getInitParameter(LOGIN_ERROR_LOCK_SECOND);(LOGIN_E

25、RROR_TIMES=+;(LOGIN_ERROR_LOCK_SECOND=+;在init方法中直接调用在类中增加checkCrossDomain 跨域特殊字符串检查,并在doFilter 中进行判断验证,如果存在特殊字符,则直接跳转到登陆界面修改,此处是用于处理返回的错误信息目前是通过标签方式加载错误信息,此处可根据输入的条件来进行错误注入,执行js代码,修改该当如下:一、将此错误标签通过textarea进行包装,错误信息是以文本方式显示,无法执行,如下: 同时修改类的processError 方法,将(stei).append(); 这段代码改为(stei).append(n); 二、无论

26、返回什么错误信息,此处只显示“操作故障,请确认操作是否合法或联系管理员检查!”1.3.4 链接注入(便于跨站请求伪造)(一) URL(二) 安全问题描述可能会劝说初级用户提供诸如用户名、密码、信用卡号、社会保险号等敏感信息可能会窃取或操纵客户会话和cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务可能会在Web 服务器上上载、修改或删除Web 页面、脚本和文件(三) 攻击方法“链接注入”是修改站点内容的行为,其方式为将外部站点的URL 嵌入其中,或将有易受攻击的站点中的脚本的URL 嵌入其中。将URL 嵌入易受攻击的站点中,攻击者便能够以它为平台来

27、启动对其他站点的攻击,以及攻击这个易受攻击的站点本身。在这些可能的攻击中,有些需要用户在攻击期间登录站点。攻击者从这一易受攻击的站点本身启动这些攻击,成功的机会比较大,因为用户登录的可能性更大。“链接注入”漏洞是用户输入清理不充分的结果,清理结果会在稍后的站点响应中返回给用户。攻击者能够将危险字符注入响应中,便能够嵌入URL 及其他可能的内容修改。以下是“链接注入”的示例(我们假设“站点有一个用来问候用户的参数,称为“name”)。下列请求: Smith会生成下列响应:Hello, John Smith.然而,恶意的用户可以发送下列请求: SRC=这会返回下列响应:Hello, .2012-7

28、-4 16:57:34 149/187如该示例所示,这有可能导致用户浏览器向几乎是攻击者所期待的任何站点发出自动请求。因此,他可能利用这个“链接注入”漏洞来启动若干类型的攻击:跨站点伪造请求:攻击者可以让用户的浏览器向用户目前登录的站点发送请求,以及执行用户并不想执行的操作。这些操作可能包括从站点中注销,或修改用户的概要文件、电子邮件地址,甚至是修改密码,结果造成彻底的帐户接管。跨站点脚本编制:任何“跨站点脚本编制”攻击都开始自诱惑用户单击精心制作的URL,以便利用受害者站点中的漏洞。发送含有恶意链接的电子邮件,或创建一个Web 站点来包含指向易受攻击的站点的链接,通常可以做到这一点。当采用“

29、链接注入”漏洞时,有可能在A 站点中嵌入一个恶意的URL,当单击这个链接时,便启动对B 站点的“跨站点脚本编制”攻击。网络钓鱼:攻击者有可能注入指向类似受攻击站点的恶意站点的链接。不小心的用户可能单击这个链接,但并不知道自己即将离开原始站点而浏览到恶意站点。之后,攻击者便可以诱惑用户重新登录,然后获取他的登录凭证。(四) 安全规范要求通过验证用户输入未包含危险字符,便可能防止恶意的用户导致应用程序执行计划外的任务,例如:启动任意SQL 查询、嵌入将在客户端执行的Javascript 代码、运行各种操作系统命令,等等。建议过滤出所有以下字符:1 |(竖线符号)2 & (& 符号)3;(分号)4

30、$(美元符号)5 %(百分比符号)6 (at 符号)7 (单引号)8 (引号)9 (反斜杠转义单引号)10 (反斜杠转义引号)11 (尖括号)12 ()(括号)13 +(加号)14 CR(回车符,ASCII 0x0d)15 LF(换行,ASCII 0x0a)16 ,(逗号)17 (反斜杠)以下部分描述各种问题、问题的修订建议以及可能触发这些问题的危险字符:SQL 注入和SQL 盲注:A. 确保用户输入的值和类型(如Integer、Date 等)有效,且符合应用程序预期。B. 利用存储过程,将数据访问抽象化,让用户不直接访问表或视图。当使用存储过程时,请利用ADO 命令对象来实施它们,以强化变量

31、类型。C. 清理输入以排除上下文更改符号,例如:1 (单引号)2 (引号)3 (反斜线转义单引号)4 (反斜杠转义引号)5 )(结束括号)6 ;(分号)2012-7-4 16:57:34 150/187跨站点脚本编制:A. 清理用户输入,并过滤出JavaScript 代码。我们建议您过滤下列字符:1 (尖括号)2 (引号)3 (单引号)4 %(百分比符号)5 ;(分号)6 ()(括号)7 &(& 符号)8 +(加号)B. 如果要修订 变体,请参阅MS 文章 821349C. 对于UTF-7 攻击: - 可能的话,建议您施行特定字符集编码(使用 Content-Type 头或 标记)。HTTP

32、响应分割:清理用户输入(至少是稍后嵌入在HTTP 响应中的输入)。请确保输入未包含恶意的字符,例如:1 CR(回车符,ASCII 0x0d)2 LF(换行,ASCII 0x0a)远程命令执行:清理输入以排除对执行操作系统命令有意义的符号,例如:1 |(竖线符号)2 & (& 符号)3;(分号)执行shell 命令:A. 绝不将未检查的用户输入传递给eval()、open()、sysopen()、system() 之类的Perl 命令。B. 确保输入未包含恶意的字符,例如:1 $(美元符号)2 %(百分比符号)3 (at 符号)XPath 注入:清理输入以排除上下文更改符号,例如:1 (单引号)2 (引号) 等LDAP 注入:A. 使用正面验证。字母数字过滤(A.Z,a.z,0.9)适合大部分LDAP 查询。B. 应该过滤出或进行转义的特殊LDAP 字符:1 在字符串开头的空格或“#”字符2 在字符串结尾的空格字符3 ,(逗号)4 +(加号)5 (引号)6 (反斜杠)7 (尖括号)8 ;(分号)9 ()(括号)MX 注入:应该过滤出特殊MX 字符

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号