時折 Apache のログで見かける \xe3\x83\xbc … のような \x 始まりのエンコードがされた文字列の正体がようやく分かったのでメモ。
経緯
事の発端は、 Apache のログを眺めていると時折
\xe3\x83\x87\xe3\x83\xbc\xe3\x82\xbf\xe3\x83\x99\xe3\x83\xbc\xe3\x82\xb9\xe3\x82\xa8\xe3\x83\xa9\xe3\x83\xbc
のような何某かのエンコードがされた文字列を見かけることがあったのですが
- WordPressが原因不明に遅いのが解消(WPアソシエイトポストR2のキャッシュテーブル不具合?) | 道具眼日誌:古田-私的記録
- 読めないエラー:\xe3\x83\x87\xe3\x83\xbc\xe3\x82\xbf\xe3\x83\x99\xe3\x83\xbc\xe3\x82\xb9\xe3\x82\xa8\xe3\x83\xa9\xe3\x83\xbc ? 女神山の麓より
- 【PHP エラーログ】\xe3\x83\x87\xe3\x83\xbc\xe3\x82\xbf\xe3\x83\x99\xe3\x83\xbc\xe3\x82\xb9\xe3\x82\xa8\xe3\x83\xa9\xe3\x83\xbc | ISALU Blog
長らくその正体が杳として知れない状態が続いていました。
調査
ところが、別件で検索していたら、偶然正体が分かったのでメモ。
- Apache 2.2.25とRewriteLogのエスケープと日本語 (CVE-2013-1862) – ろば電子が詰まつてゐる
- インフラ関係のメモ書き | Apacheのアクセスログの日本語エスケープが適当な気がする
- 日本語URLを含むリダイレクトの罠にかかっても無事でいられる2つの対策
これは Apache 2.2.25 で修正されたログ出力の脆弱性対策とのこと。
具体的には、
- Apache のログを CLI やシェルスクリプトで処理する際に、制御文字を含ませることで意図しない動作を引き起こすことを防ぐためにあえてエスケープするようになった
- 特にこうした作業をするのは管理者権限のケースが多いと想定されるため
- これにより、日本語などの文字列のパーセントエンコーディングの際に
%
を\x
に変換している
ということ。
てっきり UTF-8 や UTF-16 の特殊形のようなものかと思ったのですが、実際はパーセントエンコーディングの変形に過ぎなかった、と。
ルールさえ分かればデコードも楽にできますね。ただ、わざわざ脆弱性対策のためにエスケープしているので無暗に元に戻さない方が良いのではありますが、ログを確認する際に読めないのは困るのでサンドボックス内等でケースバイケースで、という感じでしょうか。
参考
サンプルケース
- WordPressが原因不明に遅いのが解消(WPアソシエイトポストR2のキャッシュテーブル不具合?) | 道具眼日誌:古田-私的記録
- 読めないエラー:\xe3\x83\x87\xe3\x83\xbc\xe3\x82\xbf\xe3\x83\x99\xe3\x83\xbc\xe3\x82\xb9\xe3\x82\xa8\xe3\x83\xa9\xe3\x83\xbc ? 女神山の麓より
- 【PHP エラーログ】\xe3\x83\x87\xe3\x83\xbc\xe3\x82\xbf\xe3\x83\x99\xe3\x83\xbc\xe3\x82\xb9\xe3\x82\xa8\xe3\x83\xa9\xe3\x83\xbc | ISALU Blog
正体
- Apache 2.2.25とRewriteLogのエスケープと日本語 (CVE-2013-1862) – ろば電子が詰まつてゐる
- インフラ関係のメモ書き | Apacheのアクセスログの日本語エスケープが適当な気がする
- 日本語URLを含むリダイレクトの罠にかかっても無事でいられる2つの対策