防范XSS攻击
原文链接:http://www.cnblogs.com/chenty/p/5136834.html
最近,有个项目突然接到总部的安全漏洞报告,查看后知道是XSS攻击。
问题描述:
在页面上有个隐藏域:
<input type = "hidden" id = "action" value = "${action}"/>
当前页面提交到Controller时,未对action属性做任何处理,直接又回传到页面上
如果此时action被用户恶意修改为:***"<script>alert(1);</script>"***
此时当页面刷新时将执行alert(1),虽然错误不严重,但是任何安全隐患都应受到重视。
解决思路:
该问题是由于对用户输入数据(隐藏域)未做任何处理,导致非法数据被执行,那么解决该问题的核心思路就是对用户数据做严格处理,对任何页面传递的数据都不应过分信任,处理方法如下:
1.在页面上对action参数做转义处理,${action?html}(前端技术采用freemarker),但是此种方法只能对单个属性有效,如果此时项目处于维护期且有大量此种问题,修复的难度较大且不便于统一维护
2.在服务端对用户数据做转义处理,此时需要创建一个filter,对request进行二次封装,核心代码如下:
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper; import org.apache.commons.lang3.StringEscapeUtils; public class XssRequestWrapper extends HttpServletRequestWrapper { public XssRequestWrapper(HttpServletRequest request) {
super(request);
} public String getParameter(String name) {
String value = super.getParameter(name);
if (value == null) {
return null;
}
return StringEscapeUtils.escapeHtml4(value);
} public String[] getParameterValues(String name) {
String[] values = super.getParameterValues(name);
if (values == null) {
return null;
}
String[] newValues = new String[values.length];
for (int i = 0; i < values.length; i++) {
newValues[i] = StringEscapeUtils.escapeHtml4(values[i]);
}
return newValues;
}
}
XssRequestWrapper是对request进行的二次封装,最核心的作用是对request中的参数进行转义处理(需要用到commons-lang3.jar)
定义filter,核心的代码如下:
@Override
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
chain.doFilter(new XssRequestWrapper(req), response);
}
在web.xml中配置指定请求进行过滤,可以有效防止xss攻击
以上方法没有解决本质问题,最本质的问题就是在编写代码时严禁将页面传递的参数不做任何处理再次返回到页面!
防范XSS攻击的更多相关文章
- XSS 防范XSS 攻击的措施
XssSniper--0KEE TEAM XssSniper--0KEE TEAM XssSniper 扩展介绍 一直以来,隐式输出的DomXSS漏洞难以被传统的扫描工具发 ...
- PHP 防范xss攻击
XSS 全称为 Cross Site Scripting,用户在表单中有意或无意输入一些恶意字符,从而破坏页面的表现! 看看常见的恶意字符XSS 输入: 1.XSS 输入通常包含 JavaScript ...
- 为web服务器设置HttpOnly防范XSS攻击
HttpOnly标识是一个可选的.避免利用XSS(Cross-Site Scripting)来获取session cookie的标识.XSS攻击最常见一个的目标是通过获取的session cookie ...
- PHP 防范xss攻击(转载)
XSS 全称为 Cross Site Scripting,用户在表单中有意或无意输入一些恶意字符,从而破坏页面的表现! 看看常见的恶意字符XSS 输入: 1.XSS 输入通常包含 JavaScript ...
- 字符串js编码转换成实体html编码的方法(防范XSS攻击)
js代码在html页面中转换成实体html编码的方法一: <!DOCTYPE html><html> <head> <title>js代码转换成实 ...
- XSS攻击原理、示例和防范措施
XSS攻击 XSS(Cross-Site Scripting,跨站脚本)攻击历史悠久,是危害范围非常广的攻击方式. Cross-Site Stripting的缩写本应该是CSS,但是为了避免和Casc ...
- web安全之XSS攻击原理及防范
阅读目录 一:什么是XSS攻击? 二:反射型XSS 三:存储型XSS 四:DOM-based型XSS 五:SQL注入 六:XSS如何防范? 1. cookie安全策略 2. X-XSS-Protect ...
- XSS攻击及防范
1.什么是XSS攻击 跨站脚本攻击(Cross Site Scripting),攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到 ...
- 什么XSS攻击?PHP防止XSS攻击函数
什么XSS攻击?PHP防止XSS攻击函数 发布时间: 2013-05-14 浏览次数:22325 分类: PHP教程 XSS 全称为 Cross Site Scripting,用户在表单中有意或无意输 ...
随机推荐
- MySQL开发篇(4)表类型(存储引擎)的选择
一.查看支持的存储引擎以及设置修改存储引擎 1.查看默认存储引擎:show variables like '%storage_engine%'; 2.查看当前数据库支持的存储引擎:show ENGIN ...
- leetcode系列---Two Sum C#code
/// <summary> /// 方法一:双循环 /// </summary> /// <param name="array"></pa ...
- ThinkCMF X1.6.0-X2.2.3框架任意内容包含漏洞分析复现
ThinkCMF X1.6.0-X2.2.3框架任意内容包含漏洞分析复现 一.ThinkCMF简介 ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理系统框架,底层采用ThinkPHP3. ...
- java常用类Time
LocalDate:IOS格式(yyyy-MM-dd)日期 LocalTime:表示一个时间 LocalDateTime:表示时间日期 Instant 时间线上的瞬时点,可以用来记录应用程序中的时间时 ...
- 爬虫之selenium爬取斗鱼主播图片
这是我GitHub上简单的selenium介绍与简单使用:https://github.com/bwyt/spider/tree/master/selenium%E5%9F%BA%E7%A1%80 & ...
- P2905 [USACO08OPEN]农场危机Crisis on the Farm(简单dp+麻烦“回溯”)
惯例,化简题意(看长短决定难度) 一块草坪上有两种点(姑且称为a和b),各有坐标,现在能同时使所有a点向东西南北任意一个方向移动一个单位,若a点与b点重合,则答案增加重合数,求答案的最大值并且求出这个 ...
- P5304旅行者(比bk201还要流氓的解法)
题目如上. 暴力碾标算,n^2过百万!! 作为一道黑题它确实有点点水(如果是畜生解法的话) 就是找出两两点之间的最短路的最小值. 本来是很高深的一题,要跑两遍最短路啊,然后染色啊,再拓展什么的,但是! ...
- Nginx正则配置
Nginx配置中Location的语法规则 location [ = | ~ | ~* | ^~ | !~ | !~* ] /uri/{ - } = 表示精确匹配 ~ 表示区分大小写正则匹配 ~* 表 ...
- 去除word文档页眉处的横杠
如何去除上图word文档页眉处的横杠 wps软件使用者 第一步双击页眉,到页眉页脚: 第一步点击上图页眉横线,点击无线型或者删除横线即可: Microsoft Office 专业增 ...
- Java性能分析神器--VisualVM Launcher[1]
Java性能分析神器1--VisualVM Launcher VisualVM 当你日复一日敲代码的时候,当你把各种各样的框架集成到一起的时候,看着大功告成成功运行的日志,有没有那么一丝丝迷茫和惆怅: ...