[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:33031] Re: [FAQ] /usr/share/doc/ の日本語 html 文書と apache (>=1.3.12)



池田@オレンジです。

On Mon, 20 May 2002 12:37:50 +0900
In /usr/share/doc/ の日本語 html 文書と apache (>=1.3.12)
MATSUDA Yoh-ichi / 松田陽一 <matsuda@xxxxxxxxxxxx> Wrote
> こんにちは。松田陽一@PAL-NET三鷹です。
> 
> 「 128個以上の文字コード体系(マルチバイトコード体系)の中には、
> ISO-8859-1 にある特殊文字、例えば < > & 等を含むものも存在する。
> これらが charset を誤って解釈されることにより、予想し得ないクロス
> サイトスクリプティング攻撃ができる可能性がある。」
> 
> ということじゃないかと読み取りました。

というか、「ほとんどの文字コード体系では、ISO-8859-1で128以下の文字コー
ドに割当てられている文字は同じ文字コードにマップされているが、いくつかの
16bitコードでは、これら特殊文字が別の目的にも使用されているため、charset
を間違えるとマズいんじゃない?」って感じかな?

> ただ、これだけで <script> 等の文字列に誤解釈できる可能性って、
> 本当にあるのでしょうか?

たとえばJISコードの中には< > &などが漢字コードとして使われています。
「紗智賓埔α熔餐」という文字列のJISコードは「^[$B<SCRIPT>&AMP;A^[(B」に
なります。

それはさておき、元の井上さんの提起された対処法ですが、一つ決定的な間違い
があります。それは

> * といって,AddDefaultCharset を切ってしまう (出現行をコメント
>   アウトするとか off にするとか) のは **危険** です。
>   Cf. http://httpd.apache.org/info/css-security/

という認識です。

元々、この問題は「charsetの指定が(デフォルトで)無いため、charsetを誤っ
て解釈する場合があり、それがクロスサイトスクリプティング脆弱性を引き起こ
す可能性があるので、charsetはちゃんと付けましょう」という話なのですが、
Apacheの「誤った」解決法は「(ウソでもいいから)何でもcharset付けましょ
う」という事になってしまっています。

ですから、「現時点では」AddDefaultCharsetをonにするのは「誤ったcharsetが
付く可能性が高い」ため、むしろoffにする場合より危険性が増します。

ですから「Apache Projectがoffにすると危険だと言ってるのでoffにすべきでな
い」という認識は誤りだと思います。

で、解決策としては、

1:本来的解決策
 元々ApacheがMETAタグを無視して何でもDefaultCharsetを付けてしまうのが間
違いの元なので、これを解決すべき。

2:とりあえずの解決策
 井上さんが書かれているような「誤った動作をするhttpdの挙動に合わせて
/usr/shar/docを弄る」よりも、「誤った動作をさせないために、
AddDefaultCharsetをoffにする」という方がマシだと思います。
というか、単一のcharsetの文書のみしか存在しないサイトを除けば、
AddDefaultCharset onという指定は(Apache Projectの主張とは裏腹に)誤った
charset解釈を生む可能性が高く、より危険になります。
なので、「少なくとも現状では」AddDefaultCharsetは「offにすべき」と私は考
えます。

もちろん、そのサイトにある文書が、全て同一のcharsetを使っているのであれ
ば、そのcharsetをAddDefaultCharsetNameに指定した上でAddDefaultCharsetを
onにするというのも良いかもしれませんが、「全て同一のcharset」である事と
いうのはなかなか難しいかもしれませんし、「ついうっかり」別のcharsetのも
のを置いてしまう可能性もあるので、あまり積極的に勧めるのはどうかと思いま
す。

また、ISO-2022-JPをデフォルトにするのであれば、「ついうっかり」でEUC-JP
やShift-JISのファイルを置いたとしてもこのような危険性が生まれる可能性は
低い(EUCは全ての漢字コードが0x80以上ですし、Shift-JISは必ず1byteおきに
0x80以上の文字が来る)ので、まぁ良いかもしれませんが、デフォルトをEUC-JP
やShift-JISにするのは危険かもしれません。

--

Masaki Ikeda <masaki@xxxxxxxxxxxx>
    Orange System Co.