常见WEB安全漏洞及整改建议
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2. jQuery 跨站脚本漏洞
2.1 问题描述
jQuery是继prototype之后又一个优秀的Javascrīpt框架。
jQuery 1.6.3之前版本中存在跨站脚本漏洞。当使用location.hash选择元素时,通过特制的标签,远程攻击者利用该漏洞注入任意web脚本或HTML。
2.2 整改方法
目前厂商已经发布了升级补丁以修复此安全问题,补丁获取:
.ubuntu./usn/USN-1722-1/
2.3 整改案例
升级jQuery版本。
3. 跨站脚本编制
3.1 问题描述:
跨站脚本攻击是通过在网页中加入恶意代码,当访问者浏览网页时恶意代码会被执行或者通过给管理员发信息的方式诱使管理员浏览,从而获得管理员权限,控制整个。攻击者利用跨站请求伪造能够轻松地强迫用户的浏览器发出非故意的HTTP请求,如诈骗性的电汇请求、修改口令和下载非法的容等请求。
风险等级:高
风险围:
任何存在输入/输出方法(包括GET与POST)的页面皆可能存在恶意符号输入缺陷,主要影响应用包括留言板、在线通讯信息、文章发布页面等。
3.2 整改建议:
对用户输入的参数执行严格检测:
1、对产生漏洞模块的传入参数进行有效性检测。int类型的只允许0-9的整型数字;string等字符类型的只允许(1-9,a-z,A-Z)的英文字母;
2、当客户端输入限定值意外的字符后,立即转向自定义的错误页,而不能使用服务器默认的错误输出方式;
3、对穿入参数进行危险字符过滤,禁止('、"、+、%、&、<>、()、;、,.等)特殊字符的传入。
3.3 案例:
加固例(一):
/*将login.jsp中[String u =request.getParameter("u");]替换为如下容:*/
String u = request.getParameter("u");
u = u.replace ('<','_');
u = u.replace ('>','_');
u = u.replace('"','_');
u = u.replace('\'','_');
u = u.replace ('%','_');
u = u.replace(';','_');
u = u.replace('(','_');
u = u.replace(')','_');
u = u.replace('&','_');
u = u.replace('+','_');
加固例(二):
/*更积极的方式是利用正则表达式只允许输入指定的字符:*/
/*在[String u = request.getParameter("u");]后代入以下isValidInput函数作辨别*/
public boolean isValidInput(Stringstr)
{
if(str.matches("[a-z0-9]+"))return true;
else return false;
}
4. URL重定向钓鱼
4.1 3.1问题描述:
通过构建URL,攻击者可以使用户重定向到任意URL,利用这个漏洞可以诱使用户访问某个页面,挂马、密码记录、下载任意文件等,常被用来钓鱼。
4.2 3.2整改建议:
对输入参数进行做处理,建议过滤出所有以下字符:
[1] |(竖线符号)
[2] & (& 符号)
[3];(分号)
[4] $(美元符号)
[5] %(百分比符号)
[6] (at 符号)
[7] '(单引号)
[8] "(引号)
[9] \'(反斜杠转义单引号)
[10] \"(反斜杠转义引号)
[11] <>(尖括号)
[12] ()(括号)
[13] +(加号)
[14] CR(回车符,ASCII 0x0d)
[15] LF(换行,ASCII 0x0a)
[16] ,(逗号)
[17] \(反斜杠)
4.3 3.3案例:
对输入参数进行做处理。
加固例(一):
/*将login.jsp中[String u = request.getParameter("u");]替换为如下容:*/
String u =request.getParameter("u");
u = u.replace ('<','_');
u = u.replace ('>','_');
u = u.replace ('"','_');
u = u.replace ('\'','_');
u = u.replace ('%','_');
u = u.replace (';','_');
u = u.replace ('(','_');
u = u.replace (')','_');
u = u.replace ('&','_');
u = u.replace ('+','_');
加固例(二):
/*更积极的方式是利用正则表达式只允许输入指定的字符:*/
/*在[String u = request.getParameter("u");]后代入以下isValidInput函数作辨别*/
public boolean isValidInput(String str)
{
if(str.matches("[a-z0-9]+")) returntrue;
else return false;
}
5. 不安全存储
5.1 问题描述
不安全存储,在页面上显示密码。
5.2 整改建议
加密密码或不在页面及源码上显示密码。
5.3 案例
一切涉及敏感信息读写操作的页面,如登陆页面、登陆处理页面等。
风险例:
/*Add_user.jsp*/