tag:crieit.net,2005:https://crieit.net/tags/%E3%83%91%E3%83%BC%E3%82%BB%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89/feed 「パーセントエンコード」の記事 - Crieit Crieitでタグ「パーセントエンコード」に投稿された最近の記事 2022-04-25T23:31:20+09:00 https://crieit.net/tags/%E3%83%91%E3%83%BC%E3%82%BB%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89/feed tag:crieit.net,2005:PublicArticle/18174 2022-04-25T23:31:20+09:00 2022-04-25T23:31:20+09:00 https://crieit.net/posts/apache-log-backslash-x-percent-encode-20220428 \xe3\x83\xbc ... のような \x 始まりのエンコードがされた文字列について <p>時折 Apache のログで見かける \xe3\x83\xbc ... のような \x 始まりのエンコードがされた文字列の正体がようやく分かったのでメモ。</p> <h2 id="経緯"><a href="#%E7%B5%8C%E7%B7%AF">経緯</a></h2> <p>事の発端は、 Apache のログを眺めていると時折</p> <blockquote> <p>\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</p> </blockquote> <p>のような何某かのエンコードがされた文字列を見かけることがあったのですが</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://do-gugan.com/~furuta/archives/2021/02/wpap.html">WordPressが原因不明に遅いのが解消(WPアソシエイトポストR2のキャッシュテーブル不具合?) | 道具眼日誌:古田-私的記録</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.mt-megami.com/article/460600017">読めないエラー:\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 ? 女神山の麓より</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://isalu.org/mr-database-error/">【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</a></li> </ul> <p>長らくその正体が杳として知れない状態が続いていました。</p> <h2 id="調査"><a href="#%E8%AA%BF%E6%9F%BB">調査</a></h2> <p>ところが、別件で検索していたら、偶然正体が分かったのでメモ。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://ozuma.hatenablog.jp/entry/20130714/1373811634">Apache 2.2.25とRewriteLogのエスケープと日本語 (CVE-2013-1862) - ろば電子が詰まつてゐる</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://rikuga.me/2014/04/15/apache%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%AD%E3%82%B0%E3%81%AE%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%82%A8%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%97%E3%81%8C%E9%81%A9%E5%BD%93%E3%81%AA%E6%B0%97/">インフラ関係のメモ書き | Apacheのアクセスログの日本語エスケープが適当な気がする</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://alaki.co.jp/blog/?p=2394">日本語URLを含むリダイレクトの罠にかかっても無事でいられる2つの対策</a></li> </ul> <p>これは Apache 2.2.25 で修正されたログ出力の脆弱性対策とのこと。</p> <p>具体的には、</p> <ul> <li>Apache のログを CLI やシェルスクリプトで処理する際に、制御文字を含ませることで意図しない動作を引き起こすことを防ぐためにあえてエスケープするようになった <ul> <li>特にこうした作業をするのは管理者権限のケースが多いと想定されるため</li> </ul></li> <li>これにより、日本語などの文字列のパーセントエンコーディングの際に <code>%</code> を <code>\x</code> に変換している</li> </ul> <p>ということ。</p> <p>てっきり UTF-8 や UTF-16 の特殊形のようなものかと思ったのですが、実際はパーセントエンコーディングの変形に過ぎなかった、と。</p> <p>ルールさえ分かればデコードも楽にできますね。ただ、わざわざ脆弱性対策のためにエスケープしているので無暗に元に戻さない方が良いのではありますが、ログを確認する際に読めないのは困るのでサンドボックス内等でケースバイケースで、という感じでしょうか。</p> <h2 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h2> <h3 id="サンプルケース"><a href="#%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%B1%E3%83%BC%E3%82%B9">サンプルケース</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://do-gugan.com/~furuta/archives/2021/02/wpap.html">WordPressが原因不明に遅いのが解消(WPアソシエイトポストR2のキャッシュテーブル不具合?) | 道具眼日誌:古田-私的記録</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.mt-megami.com/article/460600017">読めないエラー:\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 ? 女神山の麓より</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://isalu.org/mr-database-error/">【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</a></li> </ul> <h3 id="正体"><a href="#%E6%AD%A3%E4%BD%93">正体</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://ozuma.hatenablog.jp/entry/20130714/1373811634">Apache 2.2.25とRewriteLogのエスケープと日本語 (CVE-2013-1862) - ろば電子が詰まつてゐる</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://rikuga.me/2014/04/15/apache%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%AD%E3%82%B0%E3%81%AE%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%82%A8%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%97%E3%81%8C%E9%81%A9%E5%BD%93%E3%81%AA%E6%B0%97/">インフラ関係のメモ書き | Apacheのアクセスログの日本語エスケープが適当な気がする</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://alaki.co.jp/blog/?p=2394">日本語URLを含むリダイレクトの罠にかかっても無事でいられる2つの対策</a></li> </ul> <h3 id="変換フォーム"><a href="#%E5%A4%89%E6%8F%9B%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0">変換フォーム</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://maku77.github.io/js/web/encode-uri.html">URL エンコード/デコードを行う (encodeURI, encodeURIComponent) | まくまくJavaScriptノート</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/DecoratedKnight/items/103ab57431b6c448e535">特定の文字列を全て置換する[Javascript] - Qiita</a></li> </ul> arm-band