从输入字段过滤xss /脚本

时间:2018-05-28 02:24:56

标签: php

我有一张表格:

<form class="search" id="searchName" action="results.php" method="GET">
      <div class="container-search">
           <input type="text" id="wifiname" placeholder="WiFi name" name="wifiname"> <!-- input -->
           <button type="submit"><i class="fa fa-search"></i></button>
      </div>
</form>

我正在使用$_GET['wifiname']并搜索数据库。但是,我试图删除在此输入字段中提交脚本的任何机会。我有一些php根据输入搜索数据库,并在搜索之前尝试trim/stripslashes/htmlspecialchars输入:

// Search by WifiName
if (isset($_GET["wifiname"])) {
    $wifiname = $_GET["wifiname"];
    $wifiname = trim($wifiname);
    $wifiname = stripslashes($wifiname);
    $wifiname = htmlspecialchars($wifiname);
    $sql = "SELECT * FROM items WHERE wifiName LIKE :wifiname;";
    $q = $pdo->prepare($sql);
    $q->bindValue(':wifiname', '%' . $wifiname . '%');
    $q->execute();

    $nRows = $q->rowCount();
    if ($nRows == 1) {
        echo "<p>" . $nRows . " result found from search...</p>";
    } else {
        echo "<p>" . $nRows . " results found from search...</p>";
    }
} else {
    $wifiname = null;
}

但是,当我在输入字段中输入results.php?wifiname=<script>alert%28"Hacked"%29<%2Fscript>时,提交时会输出:<script>alert("Hacked")</script>。我做错了什么?

编辑:任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

这就是发生的事情

  1. 用户将数据输入表格
  2. 浏览器将表单中的数据转换为URL
  3. 浏览器导航到该网址
  4. PHP接收URL中的数据
  5. PHP修改该数据
  6. PHP在数据库查询中使用该修改后的数据
  7. 您正在查看地址栏中的URL,即步骤3中的州的状态。

    直到第5步,您的代码才对其执行任何操作。

    这不是问题。