精华内容
下载资源
问答
  • xss.js处理网页xss攻击

    2018-08-02 15:17:00
    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>xss.js处理网页xss攻击</title> <style type="text/css"> </style> &l...

     

     

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>xss.js处理网页xss攻击</title>
    <style type="text/css">
    </style>
    </head>
    <body>
    <div id="m-test"></div>
    <div id="m-test2"></div>
    <div id="m-test3"></div>
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdn.bootcss.com/js-xss/0.3.3/xss.js"></script>
    <script type="text/javascript">
    $(function() {
        var xss1 = '目标http://10.10.10.250:8084/poc/xss/xss_sample.php?q=test存在XSS漏洞,验证payloadhttp://10.10.10.250:8084/poc/xss/xss_sample.php?q=test<img src=1 onerror=alert(1)>';
        var xss2 = 'http://xxx?keyword=<script>alert("aaa")' +'\<\/script>';
        $('#m-test').html(filterXSS(xss1));
        $('#m-test2').html(filterXSS(xss2));    
        function escapeHtml(html) {
          return html.replace(/</g, "&lt;").replace(/>/g, "&gt;");
        }
        $('#m-test3').html(escapeHtml(xss1) + escapeHtml(xss2));
    })
    </script>
    </body>
    </html>

     

     

    .replace(/&/g, "&amp;")
    .replace(/</g, "&lt;")
    .replace(/>/g, "&gt;")
    .replace(/"/g, "&quot;")
    .replace(/'/g, "&#039;")

     

    转载于:https://www.cnblogs.com/xutongbao/p/9924827.html

    展开全文
  • 处理XSS漏洞的工具类代码

    千次阅读 2016-02-18 23:05:51
    处理XSS漏洞的工具类代码,过滤 js 代码,防止 xss 漏洞的发生
    public class AntiXSS {
    	/**
    	 * 滤除content中的危险 HTML 代码, 主要是脚本代码, 滚动字幕代码以及脚本事件处理代码
    	 * 
    	 * @param content
    	 *            需要滤除的字符串
    	 * @return 过滤的结果
    	 */
    	public static String replaceHtmlCode(String content) {
    		if (null == content) {
    			return null;
    		}
    		if (0 == content.length()) {
    			return "";
    		}
    		// 需要滤除的脚本事件关键字
    		String[] eventKeywords = { "onmouseover", "onmouseout", "onmousedown",
    				"onmouseup", "onmousemove", "onclick", "ondblclick",
    				"onkeypress", "onkeydown", "onkeyup", "ondragstart",
    				"onerrorupdate", "onhelp", "onreadystatechange", "onrowenter",
    				"onrowexit", "onselectstart", "onload", "onunload",
    				"onbeforeunload", "onblur", "onerror", "onfocus", "onresize",
    				"onscroll", "oncontextmenu", "alert" };
    		content = replace(content, "<script", "<script", false);
    		content = replace(content, "</script", "</script", false);
    		content = replace(content, "<marquee", "<marquee", false);
    		content = replace(content, "</marquee", "</marquee", false);
    		content = replace(content, "'", "_", false);// 将单引号替换成下划线
    		content = replace(content, "\"", "_", false);// 将双引号替换成下划线
    		// 滤除脚本事件代码
    		for (int i = 0; i < eventKeywords.length; i++) {
    			content = replace(content, eventKeywords[i],
    					"_" + eventKeywords[i], false); // 添加一个"_", 使事件代码无效
    		}
    		return content;
    	}
    
    	/**
    	 * 将字符串 source 中的 oldStr 替换为 newStr, 并以大小写敏感方式进行查找
    	 * 
    	 * @param source
    	 *            需要替换的源字符串
    	 * @param oldStr
    	 *            需要被替换的老字符串
    	 * @param newStr
    	 *            替换为的新字符串
    	 */
    	private static String replace(String source, String oldStr, String newStr) {
    		return replace(source, oldStr, newStr, true);
    	}
    
    	/**
    	 * 将字符串 source 中的 oldStr 替换为 newStr, matchCase 为是否设置大小写敏感查找
    	 * 
    	 * @param source
    	 *            需要替换的源字符串
    	 * @param oldStr
    	 *            需要被替换的老字符串
    	 * @param newStr
    	 *            替换为的新字符串
    	 * @param matchCase
    	 *            是否需要按照大小写敏感方式查找
    	 */
    	private static String replace(String source, String oldStr, String newStr,
    			boolean matchCase) {
    		if (source == null) {
    			return null;
    		}
    		// 首先检查旧字符串是否存在, 不存在就不进行替换
    		if (source.toLowerCase().indexOf(oldStr.toLowerCase()) == -1) {
    			return source;
    		}
    		int findStartPos = 0;
    		int a = 0;
    		while (a > -1) {
    			int b = 0;
    			String str1, str2, str3, str4, strA, strB;
    			str1 = source;
    			str2 = str1.toLowerCase();
    			str3 = oldStr;
    			str4 = str3.toLowerCase();
    			if (matchCase) {
    				strA = str1;
    				strB = str3;
    			} else {
    				strA = str2;
    				strB = str4;
    			}
    			a = strA.indexOf(strB, findStartPos);
    			if (a > -1) {
    				b = oldStr.length();
    				findStartPos = a + b;
    				StringBuffer bbuf = new StringBuffer(source);
    				source = bbuf.replace(a, a + b, newStr) + "";
    				// 新的查找开始点位于替换后的字符串的结尾
    				findStartPos = findStartPos + newStr.length() - b;
    			}
    		}
    		return source;
    	}
    	
    	public static void main(String [] args){
    		//String str = "./fabu-advSousuo.jsp?userName=xxx<script>alert(123);</script>&password=yyy";
    		String str= "http://192.168.63.87:7001/xxx/xxxx/fabu-search.jsp?searchText=<script>alert('11');</script>";
    		System.out.println(AntiXSS.replaceHtmlCode(str));
    	}
    }

    展开全文
  • es6: ...https://raw.githubusercontent.com/leizongmin/js-xss/master/dist/xss.js(过滤的比较严重,将html的所有属性都给过滤了) 调用函数: function filterXSS(string) html: <!.

    es6:

    npm install xss --save

    这里测试使用的是es5,下载链接:

    https://download.csdn.net/download/qq_42740797/16291859

    https://raw.githubusercontent.com/leizongmin/js-xss/master/dist/xss.js (过滤的比较严重,将html的所有属性都给过滤了)

    调用函数:

    function filterXSS(string)

    html:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <div id="box"></div>
        <div id="box2"></div>
        <div id="box3"></div>
        <div id="box4"></div>
    </body>
    </html>
    <script src="./xss.js"></script>
    <script src="./jquery.3.2.1.min.js"></script>
    <script src="./index2.js"></script>

    js:

    //如果出现在标签属性中会被过滤掉,出现在文本中不会被过滤
    //所有事件:error|mousewheel|mouseover|click|load|onload|submit|focus|blur|start
    
    //onclick
    console.log(1,filterXSS('<a href="#" onclick="alert(/xss/)">click me</a>'));
    console.log(2,filterXSS('<a>onclick</a>'));
    console.log(3,filterXSS('<a onclick="console.log(88)">onclick</a>'));
    //script
    console.log(4,filterXSS('<script>console.log("8");</script>'));
    console.log(5,filterXSS('&lt;script&gt;console.log("8");&lt;/script&gt;'));
    $("#box").html(filterXSS('<script>console.log("8");</script>'));//测试一下被转义成为了html实体,能否被输出
    $("#box2").html(filterXSS('&lt;script&gt;console.log("8");&lt;/script&gt;'));
    //onerror
    console.log(6,filterXSS('<img src="./pull_black_blue.png" width="45" onerror="console.log(5);"/>'));//图片的onerror被过滤掉
    $("#box3").html(filterXSS('<img src="./pull_black_blue.png" width="45" onerror="console.log(5);"/>'));
    //onblur
    console.log(7,filterXSS('<a onblur="console.log(88)">onclick</a>'));
    //javascript
    console.log(8,filterXSS('<img src="javascript:alert("xss");"/>'));
    var a=filterXSS("<span class='box' style='width:30px;'></span>");
    console.log(9,a);
    $("#box4").html(a);

    页面输出:

    控制台输出:

     

    展开全文
  • 处理xss攻击

    2020-07-30 09:44:47
    前端处理方法: function checkXSS(param){ var pattern = /<[^>]+>|alert(.*)/; var str = “”; $("[id=’"+ param +"’]").each(function () { str += $(this).val(); }); if (pattern.test(str)){ $....

    前端处理方法:
    function checkXSS(param){
    var pattern = /<[^>]+>|alert(.*)/;
    var str = “”;
    $("[id=’"+ param +"’]").each(function () {
    str += $(this).val();
    });
    if (pattern.test(str)){
    $.umapMessager.alert([[#{common.hint}]], [[#{config.cvalue.validate}]]);
    return true;
    }
    }

    后端加过滤器的例子:

    @PropertySource(value = {“classpath:security.properties”})
    @ConfigurationProperties(prefix = “security”)
    @Component
    @Data
    public class SecurityParam {
    private String antiparam;
    private String whiteparam;
    }

    security.properties:
    #antiparam xcc/css
    security.antiparam=<,>,%3c,set-cookie,src="javascript:,ProcessBuilder,alert(,expression(,function(,confirm(,prompt(,)(
    security.whiteparam=<=

    @WebFilter(filterName = “specialChar”, urlPatterns = {"/*"})
    @Slf4j
    public class AntiParamFilter implements Filter {
    private String[] paramVulnerabilityFilter; //需要防护的非法关键字
    private String[] whiteParams;

    @Autowired
    private SecurityParam securityParam;
    
    @Override
    public void destroy() {
    }
    
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    
        HttpServletRequest req = (HttpServletRequest) request;
        String result = null;
        Map<String, String[]> params = req.getParameterMap();
    
        for (String key : params.keySet()) { //每个参数进行漏洞检测,当检测到一个漏洞后就停止
            String[] paramValues = params.get(key);
            if (paramValues != null && paramValues.length > 0) {
                for (String paramValue : paramValues) {
                    if (existSecurityVulnerability(paramValue.toLowerCase())) {
                        result = paramValue;
                        break;
                    }
    
                }
            }
            if (StringUtils.isNotBlank(result)) {
                break;
            }
        }
    
        if (StringUtils.isNotBlank(result)) {
            log.error("Maybe There is Param is Invalid");
            writeVulnerability("Param is Invalid", response);
        } else {
            chain.doFilter(request, response);
        }
    }
    
    private void writeVulnerability(String message, ServletResponse response) {
        HttpServletResponse resp = (HttpServletResponse) response;
        resp.setContentType("text/html;charset=utf8");
        resp.setCharacterEncoding("UTF-8");
        PrintWriter out;
        try {
            out = response.getWriter();
            out.println(message);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    
    /**
     * 安全漏洞判断,若存在漏洞返回true,否则返回false
     *
     * @param paramValue 需要检测的参数值
     * @return
     */
    private boolean existSecurityVulnerability(String paramValue) {
        if (null != paramVulnerabilityFilter) {
            for (String valnerKey : paramVulnerabilityFilter) {
                int index = paramValue.indexOf(valnerKey);
                if (index > -1 && (!isWhiteParam(index, paramValue))) {
                    return true;
                }
            }
        }
        return false;
    }
    
    /**
     * 参数白名单格式
     *
     * @param index
     * @param paramValue
     * @return
     */
    private boolean isWhiteParam(int index, String paramValue) {
        if (null != whiteParams) {
            for (String whitekey : whiteParams) {
                if (index == paramValue.indexOf(whitekey)) {
                    return true;
                }
            }
        }
        return false;
    }
    
    @Override
    public void init(FilterConfig arg0) throws ServletException {
        String antiparam = securityParam.getAntiparam();
        paramVulnerabilityFilter = antiparam != null ? antiparam.toLowerCase().split(",") : null;
    
        String whiteParam = securityParam.getWhiteparam();
        whiteParams = whiteParam != null ? whiteParam.toLowerCase().split(",") : null;
    }
    

    }

    展开全文
  • SpringMvc处理xss攻击

    2021-01-11 22:32:07
    攻击的代码指令通常是JavaScript代码,比如<script>alert('弹窗')</script> 这段代码,就是一个弹窗代码。 案例代码 先上一段代码来演示下攻击效果,下面这个是一个spring boot例子,一个很简单的接口,...
  • javascript防止xss攻击

    千次阅读 2019-06-11 11:30:27
    javascript防止xss攻击 XSS(Cross Site Scripting),跨站脚本攻击,是一种允许攻击者在另外一个用户的浏览器中执行恶意代码脚本的脚本注入式攻击。本来缩小应该是CSS,但为了和层叠样式(Cascading Style Sheet,...
  • Java拦截器处理XSS漏洞

    2019-10-31 18:04:38
    WEB漏洞-链接注入-A3 跨站脚本(XSS) WEB漏洞-跨站脚本攻击漏洞(编码)-A3 跨站脚本(XSS) WEB漏洞-错误信息跨站-A3 跨站脚本(XSS) WEB漏洞-跨站脚本攻击漏洞(Base64)-A3 跨站脚本(XSS) WEB漏洞-跨...
  • web漏洞处理xss

    2019-09-23 16:23:33
    web漏洞之xss一、xss介绍和分类1、xss的形成原理2、xss分类反射型xss存储型xssdom型xss二、xss处理1、过滤掉2、转义3、增加安全检查4、json参数处理三、总结 一、xss介绍和分类 1、xss的形成原理 xss 中文名是“跨...
  • SpringBoot整合XssFilter,Jsoup等实现请求参数的过滤,处理Xss攻击及sql注入,以下是涉及的主要类: 原理过程 Springboot中会使用FilterRegistrationBean来注册Filter,Filter是Servlet规范里面的,属于容器...
  • 处理xss攻击的时候,以前都是自己将特殊字符和敏感属性进行转义或替换,代码十分繁杂,这几天在网上找到了一个比较好的框架:Jsoup, 它可以让java能对Html标签做各种各样的处理,其中就有处理非法标签和属性的api. ...
  • 前端安全 — 浅谈JavaScript拦截XSS攻击一、XSS攻击类型1. 存储型XSS(持久型)2. 反射型XSS(非持久型)3. DOM XSS二、XSS攻击的危害三、JavaScript拦截1. 编码2. 内联事件及内联脚本3. 静态脚本4. 动态脚本5. 上报...
  • XSS:跨站脚本(Cross-site scripting)攻击手段和目的:攻击者使被攻击者在浏览器中执行脚本后,如果需要收集来自被攻击者的数据(如cookie或其他敏感信息),可以自行架设一个网站,让被攻击者通过JavaScript等方式把...
  • xss

    2020-08-07 17:20:30
    文章目录XSS基础知识HTML字符实体js执行方式html事件事件绕过姿势html基础js基础浏览器安全策略同源策略http-only安全策略下的通信http-only属性开启情况下同源策略情况下XSS介绍XSS概念XSS危害XSS漏洞原理XSS分类...
  • XSS攻击处理办法

    2019-09-05 16:56:51
    XSS 攻击。根据攻击的来源,我们可以将此类攻击分为三种,分别为: 反射型 存储型 DOM 型 存储型 XSS 攻击。此类攻击是攻击者将恶意代码提交至服务器并保存在数据库中,用户访问该页面触发攻击行为。这种类型的...
  • 使用自定义功能处理所有标签或属性。 参考 基准(仅供参考) xss模块:22.53 MB / s 来自模块validator@0.3.7 xss()函数:6.9 MB / s 有关测试代码,请参考benchmark目录。 他们正在使用xss模块 nodeclub-使用...
  • XSS攻击是什么 通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。 盗用cookie,获取敏感信息等 防止 xxs攻击 当你点击获取 textarea 的内容插入 dom结构时 textarea 的内容包含...
  • XSS

    2021-03-28 13:43:25
    XSS注入 学习内容: 1.反射性xss 2.存储型xss 3.DOM型xss 4.xss闯关1-5 学习产出: 前言: XSS是用来干什么的,首先咱们得弄清楚这个问题,所谓XSS,就是跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,...
  • 【前端安全】JavaScriptXSS攻击

    千次阅读 2018-09-27 19:35:53
    而对于基于DOM的XSS攻击,验证输入在客户端必须执行,因为从服务端来说,所有发出的页面内容是正常的,只是在客户端js代码执行的过程中才发生可攻击 但是对于各种攻击,我们最好做到客户端和服务端都进行处理。这里...
  • XSS攻击处理方法

    千次阅读 2018-09-10 15:47:10
    二:使用插件 xss.js,在使用html(),append()等地方,将具体的每个字段内容转义 filterXSS(字段内容),然后在使用的地方直接使用。 也可以在append()等方法的地方使用,而不必用在具体的字段上,但有个缺点,需要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,201
精华内容 12,080
关键字:

js处理xss