0
点赞
收藏
分享

微信扫一扫

3-12xss防范措施及href和js输出点的案例演示

XSS常见防范措施

总的原则:输入做过滤,输出做转义

 过滤:根据业务需求进行过滤,比如输入点要求输入手机号,在后端写一个逻辑,只允许输入手机号格式的数字。

 转义:所有输出到前端的数据都根据输出点进行转义,比如输出到html中进行html实体转义,输入到JS里面的进行js转义。

案例演示

我们选择xss之href输出,这个地方,我们直接看源码

在这里插入图片描述

如果你输入的内容,不是百度,它会把你输入的内容,用htmlspecialchars()进行处理,同时它这里也用了ENT_QUOTES这么个类型,这意味着’"<>&都会被处理,然后,会把它输出到a标签里面的href属性里面

其实在a标签href属性里面,可以用js协议来执行js的,我们可以写这样的payload,看一下效果

javascript:alert(111)

整个输入里面,没有我们刚刚特殊字符的

在这里插入图片描述

我们看一下源码

在这里插入图片描述

我们看到这段payload在我们a标签里面,我们点一下

在这里插入图片描述

我们刚刚输入的payload,会被执行,所以说,在a标签里面,href有输出的时候,一般href里面,我们会写超链接,我们在输入的时候,只允许这个地方是http或者是https,才允许,它从这个地方输出,否则的话,是不允许输入,做了这一段之后,我们同时,用htmlspecialchars()进行处理,把特殊符号给处理掉,这样子,这个地方基本是没有问题了

我们看一下js输出,我们可以看一下,它的输出点,输11111,我们看一下源码

在这里插入图片描述

它会把我们的输入放到js里面去,然后在对这个变量进行判断,进行对应的输出,我们可以在这个地方构造一个闭合,因为js无非是构造闭合,我们把这段js复制一下,

<script>
    $ms='1111';
    if($ms.length != 0){
        if($ms == 'tmac'){
            $('#fromjs').text('tmac确实厉害,看那小眼神..')
        }else {
//            alert($ms);
            $('#fromjs').text('无论如何不要放弃心中所爱..')
        }

    }


</script>

首先我们输入一个字符单引号,把前面的变量闭合掉,然后我们接着来一个,也就是说,这个script把前面的script闭合掉了,然后在后面紧接着在来一个script,alert(‘xss’),在这里,我们在把之前的script闭合掉,

<script>
    $ms='x'</script><script>alert('xss')</script>';
    if($ms.length != 0){
        if($ms == 'tmac'){
            $('#fromjs').text('tmac确实厉害,看那小眼神..')
        }else {
//            alert($ms);
            $('#fromjs').text('无论如何不要放弃心中所爱..')
        }

    }


</script>

这样子payload,就构造了一个合法的闭合,把前面的script闭合掉,在插入我们自己的js,我们把这段复制下来,

x'</script><script>alert('xss')</script>'

我们把这段在对应的代码里面做测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZZ9DpzVC-1651181989954)(3-12xss防范措施及href和js输出点的案例演示.assets/6.png)]

我们的xss就被执行了,当我们的输入,输出到前端的js代码里面,就会被执行了

我们看一下后端的代码

在这里插入图片描述

前端做接受,接受完变量之后,在js里面通过php输出了

我们看一下上面的备注

//这里讲输入动态的生成到了js中,形成xss
输出点在js里面
//javascript里面是不会对tag和字符实体进行解释的,所以需要进行js转义

//讲这个例子主要是为了让你明白,输出点在js中的xss问题,应该怎么修?
//这里如果进行html的实体编码,虽然可以解决XSS的问题,但是实体编码后的内容,在JS里面不会进行翻译,这样会导致前端的功能无法使用。
用之前的htmlspecialchars()方法,对我们的实体输入做实体编码处理的话
//所以在JS的输出点应该使用\对特殊字符进行转义

xss的防范,除了前面的说的方法以外,它的输出点也很重要,根据不同的输出点,我们可能也要一些不同的方法

举报

相关推荐

0 条评论