3

pg_escape_literal PHP関数を使用して、次のようにユーザー入力データをエスケープしています。

  <?php
  $dbconn = pg_connect('dbname=foo');
  $escaped = pg_escape_literal($_GET['name']);
  pg_query("INSERT INTO participants (name) VALUES ({$escaped})");
  ?>

PostgreSQLを初めて使用するので、私の質問は次のとおりです。

  • このコードでSQLインジェクションを実現する方法はありますか?
  • このコードで未処理のままになっている他の脆弱性はありますか?

PHP5.4およびPostgreSQL9.2を使用します。

4

2 に答える 2

5

ユーザー入力を信頼せず、それに応じてエスケープするため、そこにインジェクションはありません。さらに、プリペアドステートメントを使用して、エスケープを忘れないようにし、文に対して正しいデータ型を使用することができます。

エスケープを1つだけ忘れると、残りのすべてがエスケープされる可能性があるにもかかわらず、システム全体が危険にさらされることに注意してください。

于 2012-11-05T15:59:03.807 に答える
1

これは、クエリをエスケープし、SQLインジェクション攻撃が機能しないようにするための推奨される方法です。

非常に妄想的である場合、または単に安全を確保したい場合は、データをエスケープする前に、不要な文字を削除してデータの長さをチェックするために正規表現を実行することもできます。

于 2012-11-05T15:58:01.747 に答える