入力ではなく出力で文字をエスケープするだけで十分であり、推奨されることさえあります。
get 変数はフォーム レベルからデータベースに挿入されないため、すべての get 変数に簡単に適用できます。
ただし、すべての投稿変数をどうするかはわかりません。データベースからのものではない場合、つまり生の入力データである場合は、完全にエスケープする必要があります。しかし、すべての変数をエスケープするために PDO の準備/実行を使用しています。今すぐ質問:
- select ステートメントと insert ステートメントの両方で PDO の準備/実行を使用しても問題ありませんか? 変数を2回エスケープしていませんか?
- PDO exeute ステートメントを使用して変数を取得したとしましょう。この変数をエスケープせずに $_POST['variable'] で表示しても問題ありませんか (PDO 関数で既に実行されている場合)。
- htmlspecialchars() は、データベースに由来しない GET 変数などをエスケープするのに十分ですか?
そして最も重要なことは、これらすべて、PDO の準備/実行、および htmlspecialchars() は、すべての XSS 攻撃を防ぐのに十分かということです。それとも私ももっとやるべきですか?もしそうなら、これは何ですか?入力からすべての html タグを削除しますか? 代わりに BB コードを使用しますか?