0

PDO と準備済みステートメントを使用するために、サイト上のすべての SQL ステートメントを再コーディング中です。SQL インジェクションがどのように機能するかを把握するために最善を尽くしたので、質問があります。

viewitems.php というページがある場合、ページはデータベースにクエリを実行し、テーブルからすべてのデータを取得してページにすべて表示します。ユーザーには入力がないので、これを注入できますか? ユーザーがヘッダーをいじることができるため、ヘッダー変数を使用してデータをドリルダウンするページを挿入できることは承知していますが、外部変数を必要とせずに SQL がページにコード化されている場合、挿入できますか?

4

2 に答える 2

3

PDO と準備済みステートメントを使用するために、サイト上のすべての SQL ステートメントを再コーディング中です。

ブラボー。

ユーザーには入力がないので、これを注入できますか? 外部変数を必要とせずに SQL がページにコーディングされている場合、SQL を挿入できますか?

SQL ステートメントにランタイム変数がない場合、そのステートメントは SQL インジェクションに対して脆弱ではありません。そのような場合でも、準備済みステートメントを使用しても害はありません。いくつかの理由から、そうすることが有益な場合もあります。

  • 準備済みステートメントを使用する必要がある他のコードとの一貫性 (セキュリティのため)
  • クエリでパラメーターが必要な場合/いつの将来の保証
  • クエリ キャッシング (ただし、これは特定のデータベースやドライバーに依存します。1および2を参照してください)
于 2013-02-23T20:05:46.203 に答える
0

Can SELECT statements be injected?

YES
in general.

However, if the SQL is coded into the page with no variables, of course, no injection could be possible, as there is nothing to inject.

However, if the SQL is coded into the page with some variables injected, though "non-external", a second order injection is quite possible.
That's why prepared statements can do any good if used always, with no exceptions.

于 2013-02-23T20:07:38.040 に答える