0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【初心者向け🔰】SQLインジェクションとは?仕組みと対策をやさしく解説

0
Posted at

Webアプリを作り始めると、
セキュリティって難しそう…」と感じませんか?😵‍💫

今回はその中でも超有名で超危険な攻撃
👉 SQLインジェクション を初心者向けに解説します!


🧨 1. SQLインジェクションとは?

SQLインジェクション(SQL Injection) とは、

🧑‍💻 ユーザーの入力欄を使って
💣 意図しないSQL文を実行されてしまう攻撃

のことです。

つまり…

本来は「データ」として扱うはずの入力を、データベースが「命令」として実行してしまう。すると👇

⚠️ データの漏洩・改ざん・ログイン突破などが起きます。

📌 2. よくある例:ログイン処理

それでは実際にログイン処理を見てみましょう👇

実行したいSQL

SELECT * FROM users
WHERE username = 'user'
AND password = 'pass';

Python風のコード(危険⚠️)

sql = f"""
SELECT * FROM users
WHERE username = '{username}'
AND password = '{password}'
"""

📌 ポイント
ユーザー入力を 文字列連結 しているのが問題です。

😱 攻撃されるとどうなる?
攻撃者がこんな入力をしたらどうでしょう?

入力内容

username: admin
password: ' OR '1'='1

実際に実行されるSQL

SELECT * FROM users
WHERE username = 'admin'
AND password = '' OR '1'='1';

🚪 ログイン突破の理由

'1'='1' は 必ず真(true)
OR があるので条件が成立

  • 👉 パスワードが正しくなくてもログイン成功

  • 😨 管理者ログイン突破も可能です。

🤔 なぜこんなことが起きるの?
原因はシンプルです👇

❌ SQL文とユーザー入力を 同じ「文字列」 として扱っている

その結果…

DBが「命令」と「データ」を区別できない
その結果、攻撃用のSQLがそのまま実行される

📌 一言で言うと

データベースに「これは命令です」と教えていない

✅ 3. SQLインジェクション対策

① プレースホルダ(最重要🔥)

プレースホルダを使うと安全になります。

安全な書き方(Python例)

sql = """
SELECT * FROM users
WHERE username = %s
AND password = %s
"""
cursor.execute(sql, (username, password))

なぜ安全?

%s は「穴」🕳️

値は後から安全に埋め込まれる

DBが 命令とデータを完全に分離して処理

👉 SQLを書き換えられなくなる!

② ORMを使う(初心者におすすめ✨)

ORM(Object Relational Mapper) を使うと、SQLを直接書かずにDB操作できます。

Django ORMの例

User.objects.get(username=username, password=password)

📌 ポイント

  • 内部で安全なSQLを生成

  • 基本的にSQLインジェクションを防げる

💡 Django / Rails / SQLAlchemy を使っているなら、ORMを使うのが安心です。

❌ よくある勘違い(要注意⚠️)

  • ❌ 入力チェックすればOK
  • ❌ エスケープすればOK
  • ❌ 管理画面だから安全

👉 全部NGです

✅ 正解は

プレースホルダ or ORM

📝 4. おわりに

✅ SQLインジェクションは今でも危険
✅ 原因は「文字列連結」
✅ 対策は プレースホルダ or ORM

🔐 セキュリティは「知っているだけ」で防げることが多いです!

最後までご覧いただきありがとうございました!🎉

よろしければ他の記事も是非ご覧頂けるとすごくうれしいです。

👍 いいね / 💬 コメントいただけると励みになります!

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?