2

ユーザー入力にPDOを使用していますが、現在、MySQLデータベースのコンテンツを表示するときにPDOを使用していません(SQLコマンドを使用した昔ながらの方法です)。

MySQLデータベースにデータを挿入するときに、ユーザーからの入力をフィルタリング/サニタイズする必要がありますか?

そして、代わりに出力をサニタイズする方法がある場合、出力をサニタイズするための最良の方法は何ですか?使用するだけの場合、または使用htmlspecialchars()する必要がある場合など、私は行っstrip_tags()てもいいですか?

プレースホルダーとプリペアドステートメントを使用しています。

ありがとうございました。

4

2 に答える 2

6

あなたはここで異なる消毒を混乱させています:

  • DBに挿入するデータをサナタイズするSQL。paramsを使用して準備されたクエリを使用すると、エスケープする必要はなく、PDOは内部でそれを実行します。準備されたクエリを使用しない場合は、それらを使用してください。それは防弾です(私が知る限り)。

  • DBから取得してHTMLとして出力するデータ:ここでは、エスケープまたは削除する対象に応じてhtmlspecialchars()htmlentites()またはを使用して、ユーザーに出力する前に(XSSを防ぐために)サナタイズする必要があります。strip_tags()

于 2012-04-12T18:29:30.503 に答える
5

パラメータ化されたクエリを適切に使用している場合は、いいえ、エスケープする必要はありません。これにより、実際にはエスケープされたデータがデータベースに挿入されるため、後でデータを選択したときにエスケープが返されます。

ただし、PDOに切り替えるだけでは、コードが安全になるわけではありません。

$sth = $db->prepare("INSERT INTO sometable (x) VALUES ($_GET[x])");

プレースホルダーを使用していないため、インジェクション攻撃に対して完全に脆弱です。

于 2012-04-12T18:29:32.313 に答える