Pikachu-XSS防范措施及href和js输出点的案例
xss常见防范措施
总的原则:输入做过滤,输出做转义。
●过滤:根据业务需求进行过滤,比如输入点要求输入手机号,则只允许输入手机号格式的数字。
●转义:所有输出到前端的数据都根据输出点进行转义,比如输出到html中进行html实体转义,输入到JS里面进行js转义
xss之href输出
先查看下后台源码
输出在a标签的href属性里面,可以使用javascript协议来执行js
payload:javascript:alert(111)
查看也网页源码,ctrl+f,搜索111。确实成功啦
那么在<a>标签里的 href作输出 的时候,到底改怎样防范呢???
如果仅仅是使用htmlspecialchars做处理是不行的,
有两个步骤,
●因为href一般是用来写超链接的,所以 我们可以在输入的时候仅仅 只允许http,https开头的协议,否则不允许输入;
●其次在进行htmlspecialchars处理。
xss之js输出
输入111,查看下网页源码,ctrl+f搜索111。
输入被动态的生成到了javascript中,如何是好。
构造闭合,把原本的<script>闭合掉,再插入我们自己的<script>
输入:x'</script><script>alert('xss')</script>
这里讲输入动态的生成到了js中,形成xss
javascript里面是不会对tag和字符实体进行解释的,所以需要进行js转义
讲这个例子主要是为了让你明白,输出点在js中的xss问题,应该怎么修?
这里如果进行html的实体编码,虽然可以解决XSS的问题,但是实体编码后的内容,在JS里面不会进行翻译,这样会导致前端的功能无法使用。
所以在JS的输出点应该使用\对特殊字符进行转义