WEB开发安全漏洞修复方案.docx
- 文档编号:29258646
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:67
- 大小:47.79KB
WEB开发安全漏洞修复方案.docx
《WEB开发安全漏洞修复方案.docx》由会员分享,可在线阅读,更多相关《WEB开发安全漏洞修复方案.docx(67页珍藏版)》请在冰豆网上搜索。
WEB开发安全漏洞修复方案
密级:
保密
WEB开发安全漏洞修复方案
()
文档编号:
文档名称:
WEB开发安全漏洞修复方案
编写:
审核:
批准:
批准日期:
技术研究部
文档修订记录
编号
版本号
修订内容简述
修订日期
作者
审核
1
初稿
2012-7
6
7
8
9
10
11
12
13
14
15
16
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(Strings:
crossDomainAry){
}
=getServletContext().getInitParameter("LOGIN_ERROR_TIMES");
=getServletContext().getInitParameter("LOGIN_ERROR_LOCK_SECOND");
;
("LOGIN_ERROR_TIMES="+;
("LOGIN_ERROR_LOCK_SECOND="+;
}
在init方法中直接调用
在类中增加checkCrossDomain跨域特殊字符串检查,并在doFilter中进行判断验证,如果存在特殊字符,则直接跳转到登陆界面
修改,此处是用于处理返回的错误信息
目前是通过 errors/>标签方式加载错误信息,此处可根据输入的条件来进行错误注入,执行js代码,修改该当如下: 一、将此错误标签通过textarea进行包装,错误信息是以文本方式显示,无法执行,如下: 100%;width: 95%;color: red"readonly=true> errors/> 同时修改类的processError方法,将(ste[i]).append(" 二、无论返回什么错误信息,此处只显示“操作故障,请确认操作是否合法或联系管理员检查! ” 启用了不安全的HTTP方法 1.3.2已解密的登录请求 (一)URL (二)安全问题描述 用户登录密码为明文 (三)攻击方法 可通过http报文截取登录用户密码 (四)安全规范要求 发送敏感信息时,始终使用SSL和HTTPPOST方法 (五)解决方案 修改 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后面增加如下配置 --AuthorizationsettingforSSL--> --AuthorizationsettingforSSL--> /*/oa/为应用登录URL,此为公司OA则为此串*/ --禁止不安全的http方法--> 增加初始化变量: 此为从https转到http时的跳转值,为应用部署服务器IP地址为端口 修改如下: Login方法修改如下: Stringrequesturl=().toString(); requesturl=("etServletContext().getAttribute("sessions"); HttpSessionsession=(HttpSession)(value); if(session! =null){ HttpSessionnsession=(); ); (value,nsession); session=null; } returnnewActionForward("/"++"/frames/"); }catch(Exceptione){ ("LoginActionExceptionError: "+()); throwe; } } 修改类的systemLogout方法: Stringrequesturl=().toString(); requesturl=("在响应页面中,返回发送给CGI脚本的参数值,嵌入在HTML中。 例如: [请求] GET/cgi-bin/name=JSmithHTTP/ [响应] HTTP/200OK Server: SomeServer Date: Sun,01Jan200200: 31: 19GMT Content-Type: text/html Accept-Ranges: bytes Content-Length: 27 HelloJSmith B.在HTML参数值上下文中,返回发送给CGI脚本的参数值。 例如: [请求] GET/cgi-bin/name=JSmithHTTP/ [响应]HTTP/200OKServer: SomeServerDate: Sun,01Jan200200: 31: 19GMTContent-Type: text/htmlAccept-Ranges: bytesContent-Length: 254 Pleasefillinyourzipcode: (一)安全规范要求 通过验证用户输入未包含危险字符,便可能防止恶意的用户导致应用程序执行计划外的任务, 例如: 启动任意SQL查询、嵌入将在客户端执行的Javascript代码、运行各种操作系统命令, 等等。 建议过滤出所有以下字符: [1]|(竖线符号) [2]&(&符号) [3];(分号) [4]$(美元符号) [5]%(百分比符号) [6]@(at符号) [7]'(单引号) [8]"(引号) [9]\'(反斜杠转义单引号) [10]\"(反斜杠转义引号) [11]<>(尖括号) [12]()(括号) [13]+(加号) [14]CR(回车符,ASCII0x0d) [15]LF(换行,ASCII0x0a) [16],(逗号) [17]\(反斜杠) (二)解决方案 类中的getLoginInfo方法,将之前的操作员工号与密码拼接方式改成SQL变量绑定方式 StringBuffersqlbuf=newStringBuffer(); ("SELECT.orgcode,,,,,,,,,"); ("now()ASlogindate,sp_genseqfunc('S','D')ASsessionid,"); ("(SELECTGROUP_CONCATFROMtb_userdatarelBWHERE=)ASdatatypes,PASSWORD()=ASpwdiscorrect"); ("FROMtb_userA,tb_organizationC"); ("WHERE=AND<=CURDATE()AND>=CURDATE()AND="); 增加如下配置: --可能存在的跨域代码字符串,用逗号分开--> 类增加如下变量: /** *跨域特殊字符判断 */ publicstaticList publicstaticList 类增加initSafetyConf安全初始化配置方法 privatevoidinitSafetyConf(){ crossDomainStr=getServletContext().getInitParameter("CROSS_DOMAIN_STR"); String[]crossDomainAry=(","); for(Strings: crossDomainAry){ =getServletContext().getInitParameter("GET_CROSS_DOMAIN_STR"); crossDomainAry=(","); for(Strings: crossDomainAry){ =getServletContext().getInitParameter("LOGIN_ERROR_TIMES"); =getServletContext().getInitParameter("LOGIN_ERROR_LOCK_SECOND"); =getServletContext().getInitParameter("HTTP_URI"); ; ("LOGIN_ERROR_TIMES="+; ("LOGIN_ERROR_LOCK_SECOND="+; ("HTTP_URI="+; } 在init方法中直接调用 在类中增加checkCrossDomain跨域特殊字符串检查,并在doFilter中进行判断验证,如果存在特殊字符,则直接跳转到登陆界面 修改,此处是用于处理返回的错误信息 目前是通过 errors/>标签方式加载错误信息,此处可根据输入的条件来进行错误注入,执行js代码,修改该当如下: 一、将此错误标签通过textarea进行包装,错误信息是以文本方式显示,无法执行,如下: 100%;width: 95%;color: red"readonly=true> errors/> 同时修改类的processError方法,将(ste[i]).append(" 二、无论返回什么错误信息,此处只显示“操作故障,请确认操作是否合法或联系管理员检查! ” 1.3.3通过框架钓鱼 (一)URL (二)安全问题描述 网络钓鱼是一个通称,代表试图欺骗用户交出私人信息,以便电子欺骗身份。 攻击者有可能注入frame或iframe标记,其中含有类似受攻击之网站的恶意属性。 不小心的用户有可能浏览它,但并不知道他正在离开原始网站,冲浪到恶意的网站。 之后,攻击者便可以诱惑用户重新登录,然后获取他的登录凭证。 (三)攻击方法 伪造的网站嵌入在原始网站中,这个情况对攻击者有帮助,因为他的网络钓鱼企图会披上更可信赖的外表。 利用的样本: 如果参数值未经适当清理便反映在响应中,那么下列请求: name="evil"src="">会使响应含有通往这个邪恶站点的框架。 (四)安全规范要求 若干问题的补救方法在于对用户输入进行清理。 通过验证用户输入未包含危险字符,便可能防止恶意的用户导致应用程序执行计划外的任务, 例如: 启动任意SQL查询、嵌入将在客户端执行的Javascript代码、运行各种操作系统命令, 等等。 建议过滤出所有以下字符: [1]|(竖线符号) [2]&(&符号) [3];(分号) [4]$(美元符号) [5]%(百分比符号) [6]@(at符号) [7]'(单引号) [8]"(引号) [9]\'(反斜杠转义单引号) [10]\"(反斜杠转义引号) 2012-7-416: 57: 34154/187 [11]<>(尖括号) [12]()(括号) [13]+(加号) [14]CR(回车符,ASCII0x0d) [15]LF(换行,ASCII0x0a) [16],(逗号) [17]\(反斜杠) 以下部分描述各种问题、问题的修订建议以及可能触发这些问题的危险字符: SQL注入和SQL盲注: A.确保用户输入的值和类型(如Integer、Date等)有效,且符合应用程序预期。 B.利用存储过程,将数据访问抽象化,让用户不直接访问表或视图。 当使用存储过程时,请利 用ADO命令对象来实施它们,以强化变量类型。 C.清理输入以排除上下文更改符号,例如: [1]'(单引号) [2]"(引号) [3]\'(反斜线转义单引号) [4]\"(反斜杠转义引号) [5])(结束括号) [6];(分号) 跨站点脚本编制: A.清理用户输入,并过滤出JavaScript代码。 我们建议您过滤下列字符: [1]<>(尖括号) [2]"(引号) [3]'(单引号) [4]%(百分比符号) [5];(分号) [6]()(括号) [7]&(&符号) [8]+(加号) B.如果要修订<%00script>变体,请参阅MS文章821349 C.对于UTF-7攻击: [-]可能的话,建议您施行特定字符集编码(使用'Content-Type'头或 标记)。 HTTP响应分割: 清理用户输入(至少是稍后嵌入在HTTP响应中的输入)。 请确保输入未包含恶意的字符,例如: [1]CR(回车符,ASCII0x0d) [2]LF(换行,ASCII0x0a)远程命令执行: 清理输入以排除对执行操作系统命令有意义的符 号,例如: [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-416: 57: 34155/187 [1]在字符串开头的空格或“#”字符 [2]在字符串结尾的空格字符 [3],(逗号) [4]+(加号) [5]"(引号) [6]\(反斜杠) [7]<>(尖括号) [8];(分号) [9]()(括号) MX注入: 应该过滤出特殊MX字符: [1]CR(回车符,ASCII0x0d) [2]LF(换行,ASCII0x0a)记录伪造:
");这段代码改为(ste[i]).append("\n");
");这段代码改为(ste[i]).append("\n");
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- WEB 开发 安全漏洞 修复 方案