SQLインジェクションとは?知らないとヤバいWebアプリの脆弱性

0

2025年02月24日 9:11

1. SQLインジェクションの概要

SQLインジェクションとは、悪意のあるユーザーがSQLクエリを不正に操作し、データベースにアクセスしたり、データを改ざん・削除したりする攻撃手法のことです。

例えば、以下のような影響があります。

  • ユーザーの個人情報が漏洩
  • データベース内のデータが削除・改ざん
  • 認証バイパスによる不正ログイン

開発者としては、SQLインジェクションを防ぐための適切な対策を講じることが重要です。


2. SQLインジェクションの具体例(Node.js)

2.1 脆弱なコードの例

以下のコードは、Node.jsとExpressを使用したシンプルなログイン処理です。このコードにはSQLインジェクションの脆弱性があります。

img

2.2 SQLインジェクション攻撃の例

例えば、悪意のあるユーザーが以下のようなデータを送信したとします。

img

このデータがクエリに埋め込まれると、SQL文は次のようになります。

img

このSQL文では、'1'='1' が常に真になるため、実際のパスワードがわからなくてもログインが成功してしまいます。


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

3.1 プレースホルダーを使用する

SQLインジェクションを防ぐために、プレースホルダーを使用してクエリを構築しましょう。

img

プレースホルダーを使用すると、MySQLのクエリパーサーが自動的にエスケープ処理を行い、SQLインジェクションを防ぎます。

3.2 ORM(Object-Relational Mapping)を使用する

ORM(例:Sequelize)を使用すると、SQLインジェクションのリスクを低減できます。

img

ORMを利用すると、クエリの構築をフレームワーク側で適切に処理してくれるため、SQLインジェクションのリスクが軽減されます。


4. まとめ

  • SQLインジェクションは、データベースのデータを不正に操作できる危険な攻撃手法。
  • 文字列連結を用いたクエリ構築は脆弱性を生む。
  • プレースホルダーを使用したクエリや、ORMを導入することでSQLインジェクションを防げる。
  • セキュリティ対策を怠ると、深刻な情報漏洩やデータ改ざんのリスクがある。

アプリケーションを開発する際は、SQLインジェクションのリスクを常に意識し、安全なコードを書くように心がけましょう!

[cv:issue_marketplace_engineer]

# セキュリティ
0

診断を受けるとあなたの現在の業務委託単価を算出します。今後副業やフリーランスで単価を交渉する際の参考になります。また次の単価レンジに到達するためのヒントも確認できます。