Python中級

中級 Pythonで学ぶセキュリティ基礎|練習問題編

導入

セキュリティは現代のソフトウェア開発において欠かせない要素です。特に、データの取り扱いに関するセキュリティは、実務においてしばしば直面する課題です。この記事では、Pythonを用いて、実際の業務で遭遇する可能性があるデータ漏洩のリスクを考慮したセキュリティ対策に焦点を当てます。

教科書レベルの解説(セキュリティ基礎)

重要な概念の整理

データ漏洩は、意図しない情報の公開や不正アクセスによって発生します。特に、ユーザーの個人情報や機密データを扱う場合、適切な対策が求められます。例えば、パスワードを平文で保存することは避け、ハッシュ化を行うことが基本です。また、入力データの検証やエスケープ処理も、SQLインジェクションやクロスサイトスクリプティング(XSS)を防ぐために重要です。

コード例(Python)


import hashlib

def hash_password(password):
    # SHA-256を用いてパスワードをハッシュ化
    hashed = hashlib.sha256(password.encode()).hexdigest()
    return hashed

def store_user_data(username, password):
    # ユーザー名とハッシュ化されたパスワードを保存
    hashed_password = hash_password(password)
    with open('user_data.txt', 'a') as f:
        f.write(f"{username}:{hashed_password}\n")

# 使用例
store_user_data("user1", "securepassword123")

コードの行ごとの解説

  1. import hashlib: ハッシュ化を行うためのライブラリをインポートします。
  2. def hash_password(password):: パスワードをハッシュ化する関数を定義します。
  3. hashed = hashlib.sha256(password.encode()).hexdigest(): SHA-256アルゴリズムを用いて、パスワードをハッシュ化します。
  4. return hashed: ハッシュ化されたパスワードを返します。
  5. def store_user_data(username, password):: ユーザー名とパスワードを保存する関数を定義します。
  6. hashed_password = hash_password(password): パスワードをハッシュ化します。
  7. with open('user_data.txt', 'a') as f:: ユーザーデータをファイルに保存するために、ファイルを開きます。
  8. f.write(f"{username}:{hashed_password}\n"): ユーザー名とハッシュ化されたパスワードをファイルに書き込みます。

練習問題編

以下の練習問題に挑戦してみてください。

  1. 問題1: パスワードをハッシュ化する際に、どのようなアルゴリズムを選ぶべきか説明してください。

    模範解答: SHA-256やbcryptなどの強力なハッシュアルゴリズムを選ぶべきです。bcryptはソルトを自動的に生成し、ハッシュ化の計算量を調整できるため、より安全です。

  2. 問題2: SQLインジェクションを防ぐための方法を2つ挙げてください。

    模範解答: 1) プレースホルダを使用したパラメータ化クエリを利用すること。2) ユーザーからの入力データを適切にエスケープ処理すること。

  3. 問題3: XSS攻撃を防ぐために、どのような対策が有効か説明してください。

    模範解答: HTMLエスケープを行うことや、Content Security Policy(CSP)を設定することで、XSS攻撃を防ぐことができます。

まとめ

  • データセキュリティは、特にパスワードの取り扱いにおいて重要です。
  • ハッシュ化や入力データの検証は、実務において必須のスキルです。
  • 具体的な攻撃手法を理解し、それに対する対策を講じることが求められます。