bugfix> 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 件
  • これが起こることです

    ユーザーがデータをフォームに入力します

    ブラウザはフォーム内のデータをURLに変換します

    ブラウザはそのURLに移動します

    PHPはURLでデータを受信します

    PHPはそのデータを変更します

    PHPはその変更されたデータをデータベースクエリで使用します

    アドレスバーでURLを見ています。これは、ステップ3の状態の状態です。

    コードはステップ5まで何もしません。

    これは問題ではありません。

あなたの答え