1

mysql_real_escape_stringmySQLデータベースにコンテンツを保存するために使用しています。保存するコンテンツは、フォームを介したHTMLです。必要なときにDBに書き込むPHPファイルを削除して再アップロードします。

HTML入力を正しく表示するために使用しますstripslashes()

それ以外の場合、を付けずに挿入すると、出力にmysql_real_escape_stringは使用しません。stripslashes()

あなたの意見は何ですか?stripslashesパフォーマンスに悪影響を及ぼしますか?

4

5 に答える 5

3

使用しないでくださいstripslashes()。セキュリティの観点からはまったく役に立たず、追加の利点はありません。この慣行は、「魔法の引用符」の暗黒時代に由来し、次の PHP バージョンでは廃止された過去のものです。

代わりに、入力のみをフィルタリングします。

  • ストリング:mysql_real_escape_string($data)
  • 整数:(int)$data
  • フロート:(float)$data
  • ブール値:isset($data) && $data

出力は別の問題です。HTML を保存している場合は、javascript に対して HTML をフィルタリングする必要があります。

編集:出力が正しく見えるようにする必要がある場合はstripslashes()、おそらく魔法の引用符がオンになっています。一部の CMS は、独自の魔法の引用符を作成するという重大な間違いを犯しました (例: Wordpress)。上でアドバイスしたように常にフィルタリングし、魔法の引用符をオフにすれば問題ありません。

于 2011-08-18T21:47:43.300 に答える
1

いいえ、逃げないでください。代わりに準備済みステートメントを使用してください。データを未加工の形式で保存し、必要に応じて表示用に処理します。たとえば、適切な方法を使用して、ユーザーが提供する HTML を表示するときに Javascript が実行されないようにします。

このテーマの詳細については、Bill Karwin のSql Injection Myths and Fallaciesの 講演スライドを参照してください。

出力用に HTML をフィルタリングするいくつかの方法については、HTML Purifierhtmlspecialcharsを参照してください。

于 2011-08-18T22:13:27.883 に答える
1

パフォーマンスについて考えるのではなく、セキュリティについて考えてください。mysql_real_escape_stringDBにデータを挿入するたびに使用

于 2011-08-18T21:43:41.720 に答える
0

エラーをスローしたりデータベースを破損したりする可能性のある潜在的な悪意のある、または見落とされた特殊文字をデータからスクラブすることが常に最善です。

PHP ドキュメントによると、「この関数を使用してデータをエスケープしない場合、クエリはSQL インジェクション攻撃に対して脆弱です」とさえ書かれています。

于 2011-08-18T21:43:51.010 に答える
0

http://adodb.sourceforge.net/の ADOdb など、これらすべてを自動的に行うデータベース抽象化ライブラリを確認してください。

セキュリティ/パラメータ化など、他の人が提起した多くの懸念に対処します。開発者がすべてのクエリを手動で実行する手間を省いたり、セキュリティ プラクティスを犠牲にしたりする価値があるとは思えません。

于 2011-08-18T22:21:04.177 に答える