Noneの確認前の参照

Noneの確認前の参照

説明

リクエストのパラメーターを.get()で取得すると、値がない場合はNoneになることがあります。確認せずにメソッドを呼び出したり長さを求めたりすると、例外が発生します。

想定される影響

  • 必須パラメーターの省略によって、サービスのエラーやサービス拒否につながる可能性があります。
  • デバッグ設定と組み合わさると、内部情報が漏えいする可能性があります。

対処方法

  • .get()の結果を使う前にis not Noneで確認するか、適切な既定値を指定してください。
  • 必須のリクエスト値は、フレームワークの検証機能で宣言してください。

例

リクエストを処理する関数内部の抜粋です。

変更前

python
filename = request.POST.get("filename")
return filename.count(".")

変更後

python
filename = request.POST.get("filename")
if filename is not None:
    return filename.count(".")
return 0

説明:

  • 変更前: request.POST.get()などの戻り値は、値がない場合にNoneになり得ます。確認せずにメソッド呼び出し、属性参照、長さの計算に使うと例外が発生します。
  • 変更後: .get()の結果を確認してから使います。適切な既定値を指定する方法もあります。

参考資料