パスワードのハッシュ化
パスワードを平文(生のテキスト)で保存することは厳禁です。Passlib(Passlib / bcrypt / argon2)などを用いて不可逆なハッシュ値に変換します。
Python
from passlib.context import CryptContext
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
# パスワードのハッシュ化
hashed_password = pwd_context.hash("MySecurePassword123")
# パスワード検証
is_valid = pwd_context.verify("MySecurePassword123", hashed_password)
JWT(JSON Web Token)によるステートレス認証
サーバー側にセッション状態を持たせないため、分散サーバーやSPA・モバイルアプリ認証で広く採用されています。
Python
import jwt
from datetime import datetime, timedelta, timezone
SECRET_KEY = "your_jwt_secret_key"
ALGORITHM = "HS256"
# JWTの生成
def create_access_token(data: dict):
to_encode = data.copy()
expire = datetime.now(timezone.utc) + timedelta(minutes=30)
to_encode.update({"exp": expire})
return jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)
Webセキュリティの主要な脆弱性と対策
- SQLインジェクション: 悪意あるSQL文の注入。
- 対策: ORM(SQLAlchemy)やプレースホルダを用いたパラメータ化クエリを徹底する。
- XSS(クロスサイトスクリプティング): 悪質なスクリプトの実行。
- 対策: HTML出力時にエスケープ処理(Jinja2は自動処理)を実施。
- CSRF(クロスサイトリクエストフォージェリ): ユーザーの意図しない不正リクエストの送信。
- 対策: CSRFトークンの付与・検証。
- CORS(Cross-Origin Resource Sharing)設定: 異種オリジン間通信の制御。
- 対策: FastAPI等のMiddlewareで許可するドメインを厳格に指定する。
Python
from fastapi.middleware.cors import CORSMiddleware
# CORSの設定例
app.add_middleware(
CORSMiddleware,
allow_origins=["https://your-frontend-domain.com"], # 許可オリジン
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)

コメント