Bobby Tables:SQLインジェクションを防止するためのガイド

0 Comments

なぜBobbyの学校はレコードを失ったのですか?

学校は、学生の名前をStudentsというテーブルに保存しているようです。 新しい学生が到着すると、学校はこのテーブルに彼/彼女の名前を挿入します。 挿入を行うコードは次のようになります。

最初の行は、SQL INSERTステートメントを含む文字列を作成します。 $studentName変数の内容は、SQLステートメントに接着されています。, 次の行は、結果のSQL文をデータベースに送信します。 このコードの落とし穴は、外部データ(この場合は$studentNameの内容)がSQLステートメントの一部になることです。

まず、Johnという名前の学生を挿入した場合のSQLステートメントの外観を確認しましょう。

これは、まさに私たちが望むことを行います:それはStudentsテーブルにJohnを挿入します。

ここで、$studentNameRobert"); DROP TABLE Students;--に設定して、小さなボビーテーブルを挿入します。, SQLステートメントは次のようになります。

これにより、RobertがStudentsテーブルに挿入されます。 ただし、INSERTステートメントの後には、Studentsテーブル全体を削除するDROP TABLEステートメントが続きます。 痛っ!

ボビーテーブルを回避する方法

ボビーテーブル攻撃を回避する唯一の方法があります

  • 外部データを含むSQLステートメントを作成しないでください。
  • パラメーター化されたSQL呼び出しを使用します。

それはそれです。 無効な文字をエスケープしようとしない。 それを自分でやろうとしないでください。 パラメータ化されたステートメン いつも、いつも。,

ストリップは一つのことが決定的に間違っています。 答えは、”データベース入力をサニタイズする”ことではありません。 それはエラーになりやすいです。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です