概述

存储型,也叫持久性。当攻击者把恶意的JS代码提交到了数据库或者redis等库里面去了以后,网页二次加载的时候,又会把这些恶意代码重写输出到浏览器里去。使正常访问者都被运行到。

代码实例

  1. <?php
  2. error_reporting(0);
  3. $name = $_GET["name"];
  4. if ($name){//连接服务器
  5. $conn = mysqli_connect("127.0.0.1","root","root","yichen");
  6. //检测连接
  7. if ($conn->connect_error)
  8. {
  9. die("connect fail".$conn->connect_error);
  10. }
  11. //插入语句
  12. $sql_insert = "insert into yichen(name) values('$name')";
  13. if (mysqli_query($conn, $sql_insert)) {
  14. echo "insert ok !";
  15. } else {
  16. echo "Error: " . $sql_insert . "<br>" . mysqli_error($conn);
  17. }
  18. //查询内容
  19. $sql_select = "select * from yichen";
  20. $result = mysqli_query($conn,$sql_select);
  21. if ($result->num_rows > 0) {
  22. // 输出每行数据
  23. while($row = $result->fetch_assoc()) {
  24. echo "<br>". " - Name: ". $row["name"];
  25. }
  26. } else {
  27. echo "0 results";
  28. }}
  29. else{
  30. echo "give me a name";
  31. }
  32. ?>

我们看一下这条语句,它把我们通过 GET 传递的参数给存到了数据库里面
$sql_insert = “insert into yichen(name) values(‘$name’)”;

之后又通过这条语句,把数据库里面的内容取出来,输出在页面上
echo “
“. “ - Name: “. $row[“name”];

而在页面上的时候被错误的解析成了 javascript 代码执行了,就弹了一个窗!

实战演练

image.png
写什么,给什么! 不错,我们写html代码就出html代码。如果写入:

image.png