フォームがあります:
<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 件
関連記事
- ボタンクリックで入力フィールドを追加する最良の方法は何ですか?
- 値のタイムスタンプでAngularMaterialテーブルフィールドをフィルタリングする方法は?
- 入力フィールドが変更されているかどうかを確認します
- Linq2db:ネストされたプロパティフィールドでフィルタリング
- Elasticsearch '[bool]はフィールド[filter]'例外の解析に失敗しました
- 入力フィールドの背景色の変更
- テキストフィールドにSwiftUI入力通貨フォーマット(右から左へ)
- 入力フィールドにテキストを送信する方法
- 入力フィールドの値としてのJSONデータ
- 動的フィールド入力のすべての行データを合計する方法LaravelLivewire
これが起こることです
ユーザーがデータをフォームに入力します
ブラウザはフォーム内のデータをURLに変換します
ブラウザはそのURLに移動します
PHPはURLでデータを受信します
PHPはそのデータを変更します
PHPはその変更されたデータをデータベースクエリで使用します
アドレスバーでURLを見ています。これは、ステップ3の状態の状態です。
コードはステップ5まで何もしません。
これは問題ではありません。