Python
 Computer >> コンピューター >  >> プログラミング >> Python

SQLインジェクションとは?仕組みと防止策をわかりやすく解説

SQLインジェクションとは、Webアプリケーションを標的としたハッキング手法のひとつです。Webページの入力フォームなどを通じて悪意のあるコード(SQL文)をデータベースに注入し、情報の窃取やデータベースの破壊を引き起こす「コードインジェクション」攻撃の一種です。

SQLインジェクションが起こる原因

最大の原因は、ユーザーからの入力値を検証せずにSQLクエリへ直接組み込んでしまうことです。攻撃者は入力欄に細工した文字列を送り込むことで、開発者の意図しないSQL文を実行させ、データベース内のデータを自由に操作できてしまいます。

具体例:学生情報テーブルの場合

たとえば、学生のデータを管理するテーブルがあり、各学生が自分の学籍番号(ID)を入力すると自分の情報だけを閲覧できるシステムを考えてみましょう。このSQLクエリは、学生が入力した学籍番号を受け取るように設計されています。

しかし、ここである学生が学籍番号として「12345 or 1=1」と入力したらどうなるでしょうか。実際に実行されるクエリは次のようになります。

SELECT * FROM Students WHERE id = 12345 OR 1=1

「1=1」は常に真(True)となるため、この条件はすべてのレコードに対して成立します。その結果、本来なら閲覧できないはずの他の学生のレコードまで返されてしまいます。つまり、他の学生の個人情報が保護されず、悪意ある第三者(ハッカー)に不正利用される危険があるのです。

SQLインジェクションの防止策

SQLインジェクションを防ぐ最も基本的な方法は、プレースホルダ(%s)を使ったパラメータ化クエリ(プリペアドステートメント)を利用することです。PythonのMySQL Connectorモジュールには、クエリの値を安全にエスケープする仕組みが用意されています。

ここでは、次のようなテーブル「MyTable」を例に説明します。

+----------+---------+-----------+------------+
|    Name  | Class   |    City   |    Marks   |
+----------+---------+-----------+------------+
|    Karan |    4    | Amritsar  |    95      |
|    Sahil |    6    | Amritsar  |    93      |
|    Kriti |    3    | Batala    |    88      |
|   Khushi |    9    | Delhi     |    90      |
|    Kirat |    5    | Delhi     |    85      |
+----------+---------+-----------+------------+

サンプルコード

import mysql.connector

db = mysql.connector.connect(host="your host", user="your username",
                             password="your password",
                             database="database_name")

cursor = db.cursor()

query = "SELECT * FROM Students WHERE Name=%s"
name = ("Karan",)

cursor.execute(query, name)

myresult = cursor.fetchall()
for row in myresult:
    print(row)

上記のコードでは、クエリ内に値を直接埋め込む代わりに、プレースホルダ「%s」を使用しています。入力値はexecute()メソッドの引数として別途渡されるため、ユーザーの入力内容がSQL構文の一部として解釈されることはなく、安全にクエリを実行できます。

出力結果

('Karan', 4, 'Amritsar', 95)

このようにプレースホルダを使うことで、ユーザー入力がSQL文として実行されることを防ぎ、SQLインジェクション攻撃からデータベースを守ることができます。セキュリティ対策の基本として、必ずパラメータ化クエリを活用しましょう。

  1. Google Discover(ディスカバー)フィードとは?仕組みとカスタマイズ・管理方法を徹底解説

    Androidスマートフォンのユーザーはもちろん、iPhoneでGoogleのアプリやサービスを利用している人にとっても、Googleには日常的に使われている機能が数多くあります。しかし、その中にはあまり知られていない機能も存在します。そのひとつが「Google Discover(ディスカバー)フィード」です。実は誰もが無意識のうちに使っているこの機能を少し理解すれば、Googleの意図ではなく、自分自身のニーズに合わせてカスタマイズできるようになります。 Google Discoverフィードとは何か? Google Discoverは、Googleアプリに搭載された機能のひとつで、ユーザー

  2. Windows 11の「推奨アクション」とは?電話発信や予定作成を自動化する便利機能の使い方

    Googleなどの検索エンジンでは、検索ワードを入力すると自動的に候補が表示されますよね。実はMicrosoftも、Windows 11ユーザー向けにこれによく似た機能を導入しました。その機能の名前は「推奨アクション(Suggested Actions)」。Windows上での操作をよりシンプルにすることを目指した、Microsoftの最新の取り組みです。この記事では、推奨アクションの使い方と効果的な活用方法について詳しく解説します。Windows 11で推奨アクションを有効にする方法推奨アクション機能を有効にすると、電話の発信やイベント(予定)の登録を自動的に行えるようになります。電話番号や