その文字列はセーフ? 本当は奥深いデコード処理:もいちどイチから! HTTP基礎訓練中(4)(2/3 ページ)
今日も楽しいメッセンジャータイム! ところが、ジュンさんから飛んできたのはまったく読めないけど、どこかで見たような文字列でした。今回はHTTPを取り扱う上では欠かせない「パーセントエンコード」について、気をつけなくてはならないことを学んでいきましょう(編集部)
あれ、%00が表示されない?!
クウは、パーセントエンコードを勉強するために、リスト2のような入力された文字列をデコードして出力するだけの簡単なWebアプリケーションを作ってみた。
クウ 「まずは、0からスタートだな♪」
クウは挙動を把握するために、「%00」から順に「%01」、「%02」……と打ち込んでみた。
クウ 「あれ……。ブラウザ上に何も表示されない」
試しに英数字のようなものを入力してみると、ちゃんと表示される。どうしてだろう?と思い、再度「%00%01%02……」と打ち込んでみたが、やはりブラウザ上には何も表示されない。
クウ 「うーん。HTMLのソースの中に何か入ってるのかな……」
ブラウザ上には何も表示されていなかったのだが、メモ帳でソースの表示をしてみたところ、変な文字が入っていた。
クウ 「なんだろ。これ……」
@IT messenger v1.4
ジュン ただいまー。
クウ おかえりなさい。なんかいろいろ試してたんですけど……。%00%01%02……とかやってみると変な文字になるみたいなんですよね
ジュン あー。0から試していったんだ。これは制御文字だよー♪
クウ 制御文字っすか……。それでちゃんと表示されないんですね……。
ジュン でもなかなか面白いところから試してるねー。
クウ そして、いきなりつまずいてます
ジュン よく出てくる制御文字でいくと、%00はNULL文字、%09はTab、%0d%0aは改行とかそういうようなものかな。
クウ むう……
ジュン ここらへんね。結構Webアプリで問題になりやすいとこなんだよねー。
クウ そうなんですか?! あんまり意識してなかったかもしれないです……。
パーセントエンコードでは、記号や日本語のようなマルチバイト文字はもちろん、制御文字も表現することができる。コードが00〜1f、7fの文字が制御文字に相当するが、これらにパーセントを付与し「%00」のように表現することで 、デコード処理を行った際に制御文字として扱われることとなる。
従って、Webアプリケーションとしては文字列が渡されることを期待している個所に対し、「%00」のような文字列を挿入するといった簡単な操作を行うことによって制御文字を入力することができてしまう。
Copyright © ITmedia, Inc. All Rights Reserved.