Planet Python 日本語 フォロー セス・マイケル・ラーソン:Pythonにおけるstr.lower()がセキュリティ脆弱性となる場合 インターネット標準では、非ASCII文字のサポートが不足していることが多く、ドメイン名のマッピングが必要となります。RFC 3491で定義されているNamePrepは、IDNA 2003の一部としてこの目的のために設計されました。この古いIDNA標準は、その後、RFC 5890-5893で指定されているIDNA 2008に置き換えられました。Pythonは両方のバージョンをサポートしており、IDNA 2003はidnaコーデックを介して、IDNA 2008は外部のidnaパッケージを介してアクセスできます。Pythonの標準ライブラリにあるstringprepモジュールは、StringPrepを実装しています。StringPrepの重要なステップは「ケースフォールディング」であり、大文字小文字を区別しない比較のために文字を小文字または大文字にマッピングすることを含みます。このプロセスは、Unicode 3.2.0のルールに基づいたRFC 3454のテーブルB.2およびB.3を使用します。Pythonの実装では、新しいUnicodeバージョンを使用する標準のstr.lower()関数が、必要なUnicode 3.2.0のケースフォールディングルールから逸脱するという脆弱性が特定されました。この不一致により、特定の文字に対して異なるIDNAエンコーディングが発生しました。修正には、Pythonのstr.lower()の動作がStringPrepおよびIDNA計算のためにUnicode 3.2.0と一致することを保証するための特定の例外を作成することが含まれていました。この修正により、IDNA 2003の仕様との一貫性が保証されます。 Seth Michael Larson: When str.lower() is a security vulnerability in Python sethmlarson.dev Planet Python 日本語 RSS thenote.app
str.lower()関数が、必要なUnicode 3.2.0のケースフォールディングルールから逸脱するという脆弱性が特定されました。この不一致により、特定の文字に対して異なるIDNAエンコーディングが発生しました。修正には、Pythonのstr.lower()の動作がStringPrepおよびIDNA計算のためにUnicode 3.2.0と一致することを保証するための特定の例外を作成することが含まれていました。この修正により、IDNA 2003の仕様との一貫性が保証されます。