赞
踩
跨站脚本:反射式 (Cross-Site Scripting: Reflected)
一、规则中文名称:
跨站脚本
二、规则英文名称:
Cross-Site Scripting
三、规则子类中文名称:
反射式
四、规则子类英文名称:
Reflected
五、规则概述:
攻击者往Web页面里插入恶意脚本代码,当用户浏览该页面时,嵌入其中的脚本代码会被执行,并将结果反馈给用户,从而达到攻击者的特殊目的。
六、规则详情:
XSS通常在以下情况下发生:
1)数据从一个不可信赖的数据源进入Web应用程序;
2)未检验动态内容中的数据是否存在恶意代码,便将其传送给了Web用户。
反射型XSS是指客户端发送带有恶意代码的请求信息到服务器端,服务器端没有验证请求中的信息,又推到客户端,形成反射式跨站请求风险。
例1:test.jsp从HTTP请求中读取员工的id并显示,代码如下:
...
Employee ID:
如果用户提交的id的值为“”时,浏览器将会显示该用户的Cookie信息。
七、整改建议:
1、输出转义防止跨站脚本攻击
使用对系统输出转义的方法来防止跨站脚本,建议使用成熟的第三方转义函数如ESAPI、开发框架自带的标签输出方式等。
使用ESAPI的示例代码如下:
如果漏洞发生在java文件或者JSP文件中,使用JAVA版ESAPI对不安全的数据进行处理即可。示例代码如下:
...
Employee ID:
使用标签输出方式,系统默认会自动对数据做 HTML 转换,示例代码如下:
2、使用白名单来过滤来自不可信的参数。
创建一份安全字符白名单,并配置全局xss过滤器拦截所有请求,允许白名单中的字符出现在 HTTP 内容中,并且只接受完全由这些经认可的字符组成的输入,同时还要根据实际应用不断更新白名单字符,确保有效性。例如,一份有效的白名单仅包含字母、数字、汉字,示例代码如下:
private static LinkedHashMap whitelMap = new LinkedHashMap();
// 构建只包含英文字母、数字、中文字符的白名单
static {
for (char c = 'a'; c <= 'z'; c++) {
whitelMap.put(c, c);
}
for (char c = 'A'; c <= 'Z'; c++) {
whitelMap.put(c, c);
}
for (char c = '0'; c <= '9'; c++) {
whitelMap.put(c, c);
}
// 中文字符
for (char c = '\u4E00'; c <= '\u9FA5'; c++) {
whitelMap.put(c, c);
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。