0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SQLアンチパターン:SQL インジェクション

Posted at

SQLアンチパターンを読み始めたので、1つ1つ書いてのメモです

目的

  • 動的SQLを記述する
    • SQLクエリの文字列を作成し、実行する
    • アプリケーション内で文字列を作成、実行

アンチパターン

  • 未検証の入力をコードとして実行する

SELECT * FROM Bugs WHERE bug_id = $bug_id
$bug_id = "1234; DELETE FROM Bugs"
SELECT * FROM Bugs WHERE bug_id = 1234; DELETE FROM Bugs
  • SQL インジェクション は、SQL ステートメントが解析される前に構文を改変する

  • 'プリペアドステートメント' を用いて防ぐことが多い

    • プレスホルダーを使いSQLを実行する
    • 最も強力な防御手段。だが万能ではない
      • 値のリストを扱えない(IN句)
      • テーブル識別子、列名、SQL予約語、もパラメータとして扱えない

用いてもいいパターン

  • ない

解決策

  • 誰も信用しない
    • 入力のフィルタリング
    • プリペアドステートメント
    • ユーザの入力をコードから隔離する
    • コードレビューしてもらう

まとめ

ユーザーには、値の入力は許可しても、コードの入力を許可してはいけません。

感想

用いてもいいパターンの説明がはっきり書いてあります。
最大限注意するしかない

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?