俺のメモ帖

とあるインフラ系SEのメモ帖。日常的なものや、趣味や技術的なもとか書けたらいいなぁ。

【URLエンコード】Web関連で使われる文字変換について【文字参照】

Webでよく使われている文字変換には、以下などが存在している。
以下の2つはよく使われ、混同したり一緒くたにされたりするが、用途も内容も別物だ。

最近までよくわかって居なかったので備忘としてメモしておく。

URLエンコード(パーセントエンコード

概要

アドレスバーなどに入力するURLなどに使用できない文字を使用したい場合に用いる文字変換方式。
予約文字については、1バイト文字でもエンコードする必要があり、2バイト文字は全てエンコードする。

予約文字

以下の一般デリミタとサブデリミタの複合のこと。

  • 一般デリミタ
    : / ? # [ ] @
  • サブデリミタ
    ! $ & ' ( ) * + , ; =

用途

URLエンコードという名称の通り、URLに使用する。
単なるURLという訳ではなく、フォームなどからGETメソッドでパラメーターを送信したり、REST-APIなどでパラメーターをURLに含めたい場合など、何かしらパラメーターをWebサーバに送信したい場合に使用される。
大体はパラメーターとして日本語などの2バイト文字を使用したい場合が多いと思われる。

悪用事例

迷惑メールなどで、ぱっと見リンク先が判らないようになっている騙しリンクに使用したりする。
他には、パラメーターとしてNullや改行文字などを渡し、意図せぬ動作をさせようとしたり。
など。

文字参照(数値文字参照、文字実体参照

概要

HTML文書やXML文書にて、タグ文字とかの特殊記号を文字データとして使用したい場合に用いる文字変換方式。
ただし、特殊文字でない普通の文字も文字参照で表す事が出来る。

代表的な変換文字

< > & ' (ノーブレイクスペース)

用途

概要にも記述した通り、HTML文書やXML文書にて、上記の特殊文字を表現したい場合

悪用事例

迷惑メールの件名や本文を全て文字参照で記述する事で、通常の文字で迷惑メールフィルターを実行してもすり抜けてしまい、迷惑メールとしてフィルタリングされないようにする。
少し前から増えている、Amazonとか楽天とかAppleを装った迷惑メールは大抵本文が文字参照変換されている。
こいつらをフィルタリング使用とする場合は、文字参照変換後の文字列を登録する必要がある。
全くもって面倒くさい。
など。