Webサイトのすべての要素は、悪意のあるユーザーによって変更される可能性があります(非表示のフィールド、div、スタイル、ajax呼び出し、名前を付けます...)。
とはいえ、すでにプリペアドステートメントを使用している場合は、SQLインジェクションについてあまり心配する必要はありません。これは、mysqlが実行されるステートメントをすでに知っているためです。
代わりに、Webサイトでレンダリングされているすべての出力をサニタイズする必要があります。
あなたのフォームで、私がこのように住んでいる国を尋ねているとしましょう:
<select name="country">
<option value="Mexico">Mexico</option>
<option value="USA">USA</option>
<option value="Canada">Canada</option>
</select>
しかし、私は悪意のあるユーザーであり、Chromeのコードインスペクターを使用してHTMLを変更し、メキシコを選択しましたが、その値を
に変更しました。
この方法でその値を別のページに出力する場合:
Your country is: <?=$country?>
次に、次のように記述します。
Your country is:
<script type="text/javascript">alert("Hello World")</script>
警告ボックスに「HelloWorld」というテキストが表示されます
あなたが不思議に思うかもしれないことで私はどんな害を及ぼすことができますか...
ええと、私はそれでやりたいことが何でもできます。Cookieを盗むことができます。または、その値が公開されている場合(たとえば、フロントページにその値を表示している場合)、ユーザーを別のWebサイトにリダイレクトし、Webサイトのコンテンツを変更できます。 。私が欲しいものは何でも。
ユーザーの出力をサニタイズするには、次を使用できます
htmlentities
これにより、たとえば、<
が変換されます >コード> それぞれのコードへの記号:
&lt;
および&gt