前端安全之 XSS攻击


 参看:

XSS的原理分析与解剖

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

1、前言

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

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

2、原理实现

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




   
  XSS原理重现



<?php header("X-XSS-Protection: 0"); // 0: 表示关闭浏览器的XSS防护机制 error_reporting(0); // 加上error_reporting(0);就不会弹出警告了 $xss = $_GET['xss_input']; echo '
你输入的字符为

'.$xss; ?>

现在在输入框中输入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 />123body>
html>

此时,我要是在输入这种可以被解析的代码时:

现在页面就显现出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攻击代码。因此,当你我输入,不会显示出弹框了。

3.1测试代码





  
  XSS利用输出的环境来构造代码



  
把我们输入的字符串 输出到input里的value属性里
请输入你想显现的字符串


<?php header("X-XSS-Protection: 0"); error_reporting(0);//加上error_reporting(0);就不会弹出警告了 $xss = $_GET['xss_input_value']; if(isset($xss)){ echo '$xss.'">'; }else{ echo ''; } ?>

页面效果:

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输入二

现在我输入,字符串正常输入,明显的可以看到,并没有弹出对话框:

此时网页代码:

<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="">  center>
body>

分析输出代码:

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

3.4 输入三

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

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

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

3.5 输入四

如果我输入:">

显示效果:

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攻击。

那么,我在