zoukankan      html  css  js  c++  java
  • pikachu--(htmlspecialchars、href和js输出)

    XSS-htmlspecialchars

    htmlspecialchars()函数把预定义的字符转换为html实体

    预定义的字符:       预防: 可用的引号类型:(一般使用这个函数时候要指定类型)

    &转换为&amp                 ENT_COMPAT 默认,仅编码双引号

    转换为&quot               ENT_QUOTES 编码双引号和单引号(xss漏洞是因为指定类型时候的疏忽)

    转换为&#039               ENT_NOQUOTES 不编码任何引号

    <转换为&lt       

    >转换为&gt

    下面采用xss漏洞的测试方法进行操作,可以参考我之前博客https://www.cnblogs.com/7-58/p/12317111.html

     输入带有特殊字符的和唯一标识符   '"<>666

    查看网页源代码

    发现只有单引号没有被转换

    我们构造    a' onclick='alert(123)'           成功弹框

    可以看一眼,pikachu源码  使用函数,默认不对类型进行处理(没有指定类型)

    Xss- href输出

    这里href里面如果做输出的话,应该怎么处理?

    在输入时候只允许是http,https协议的才允许在这输出,否则的话就不允许输入。之后再进行htmlspecialchars函数过滤。

    先看一下pikachu的源码   这次利用函数,设置了类型 ENT_QUOTES对单引号、双引号、尖括号等过滤

    构造   因为对那些符号进行了过滤,输入   javascript:alert(111)

    Xss-js输出

    这里讲输入动态的生成到了js中,形成xss

    javascript里面是不会对tag和字符实体进行解释的,所以需要进行js转义

     

    讲这个例子主要是为了明白,输出点在js中的xss问题,应该怎么修?

    这里如果进行html的实体编码,虽然可以解决XSS的问题,但是实体编码后的内容,在JS里面不会进行翻译,这样会导致前端的功能无法使用。

    所以在JS的输出点应该使用(反斜杠)对特殊字符进行转义

    查看网页源代码    发现是把对应的输入放在了js里面,进行判断,在进行相应的输出

     

    我们把这段拿出来

    <script>

        $ms='123';

        if($ms.length != 0){

     。。。。。。

    </script>

     

    将前面<script>$ms='123';构造闭合

    <script>$ms='123’</script><script>alert(‘xss’)</script>';

    ’</script><script>alert(‘xss’)</script>

    弹框

  • 相关阅读:
    VC++以及VS个版本比较 及 C++编译器比较
    这本书的封面
    json_encode(),json_deocde()用法说明
    循环匹配,一般用于多选列表选中状态
    js判断变量是否被定义
    js onload()事件调用方法
    js push使用方法
    iframe去掉边滚动条
    ajax上传文件(使用ajaxfileupload)
    基于url的权限控制
  • 原文地址:https://www.cnblogs.com/7-58/p/12331632.html
Copyright © 2011-2022 走看看