私は最近、ラジオ ボタンのみを含むフォームに関する質問をしました.経験豊富なユーザーが回答し、SQL インジェクションに対して広くオープンであると私に言いました。誰かが方法を説明してもらえますか? - テキストのユーザー入力はありません。
4 に答える
ユーザーは HTML を簡単に編集したり、送信内容を変更したりできます。ラジオ ボタンだからといって、値を変更できないわけではありません。インジェクションを引き起こす可能性のある値を含め、何でも設定できます。
一般的なブラウザ ツールを使用すると、ユーザーは HTTP リクエストを変更できるため、誰かが簡単にラジオ ボタンの値を任意の値に変更することができます。
すべてのユーザーは、Firefox のFirebugや Chrome に含まれている DOM エクスプローラーを使用してこれらのフィールドを編集できます。(検査要素オプション)
ユーザー入力はありませんが、ユーザーは引き続き DOM 構造を編集して含むことができます。
しかし、それらを編集するだけではありません。サイトがクロスサイト スクリプティング攻撃 (XSS)に対して安全でない場合、誰でも自分のコンピューターまたはホストで自分の入力を使用してフォームを作成し、それを によってサイトに送信できますPOST
。
セキュリティと PHP の詳細については、このサイトを参照してください。
入力のフィルタリングとは別に、SQL インジェクションを回避する最善の方法は、PDOまたは準備済みステートメントを使用して DB への安全な呼び出しを使用することです。
例えば:
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);
// insert one row
$name = 'one';
$value = 1;
$stmt->execute();
フォームは、ユーザーが HTTP エンドポイントにデータを送信する手段を提供しますが、データを送信するためにフォームを使用する必要はありません。たとえば、独自のフォームを作成したり、手動で HTTP 要求を作成したりできます。
あなたがクライアントに送信するものは、人々が望むものを送信するのを妨げるものではありません.
エンドポイントは、受信する入力を制御できないため、あらゆる入力に対して安全である必要があります。
悪意のあるユーザーは、サーバーへの独自の POST 要求を作成するためにフォームを必要としません。サーバーが受け入れるフォームキーを知っているだけで、そこに独自のリクエストを作成できます。
エスケープされていない$_POST/$_GET/$_REQUEST/$_COOKIE/(some $_SERVER)
値をクエリに直接挿入できるようにしている場合は、影響を受けます。
安全のために、PDO または mysqli でパラメータ化されたクエリを使用してください。
この投稿をお読みください: PHP で SQL インジェクションを防ぐにはどうすればよいですか?