「AddDefaultCharsetを指定しないと、セキュリティ上の問題が発生する」
という話を聞いたことがあります。
具体的にはどのような問題が発生するのでしょうか?
ご存知の方いらっしゃいましたら、お教えください。
http://web.archive.org/web/20020602092022/http://www.itboost.co....
IT Boost - Apache2 httpd.conf -
元となっているのはこの部分のコメントと思われます。
# 表示されるページのデフォルトの文字コードを設定します。これは非常に良い考
# えで、将来的なサイトの国際化の際にも役に立ちます。デフォルトの文字コード
# を設定することは、ほとんど面倒なことではありません。特に設定していなけれ
# ばiso-8859-1 (latin1)に設定されているはずです。また、javascriptやURL解析
# に関連するセキュリティー上の問題からも、デフォルトの文字コードを設定する
# ことが望ましいです。
http://mm.apache.jp/pipermail/apache-users/2005-May/005464.html
[Apache-Users 5274] Re: AddDefaultCharsetについて
apache-MLの過去ログでは、最近のapacheで「AddDefaultCharset」の指定自体消えているようですので、無効にしたところで脆弱性云々の問題は無いかと思います。
(文字コード未指定で文字化けするとかは別として)
ありがとうございます。
最新版のapacheでは、問題は解消されているのですね。
では、過去のバージョンの場合はどうなのでしょうか?
コメント内にセキュリティ上……、と書かれている以上は、何らかの脆弱性の存在を意識して書かれていると思うのですが……?
運用上は問題ないことがわかりましたが、どのような問題が想定されていたのかを知りたいです。
ご存知の方、よろしくお願いいたします。
http://httpd.apache.org/info/css-security/
Cross Site Scripting Info
先ほどの回答者です。(2回目ですのでポイントは結構です)
>コメント内にセキュリティ上……、と書かれ
> ている以上は、何らかの脆弱性の存在...
これは一般的に「クロスサイトスクリプティング脆弱性」というものを示しています。(上記URLはapacheのクロスサイトスクリプティングについての情報になります)
クライアント側で文字コードの種別が判別できないと悪意のあるスクリプトが実行されたりして危険になります。
そのため、エンコード種別の指定忘れなどが合った場合のためにApacheのhttpd.confでは嘘でもいいからデフォルトのエンコード種別を指定しましょうとなっています。
ただ、ほんとに嘘になってしまうと結局「クロスサイトスクリプティング脆弱性」になってしまうので最近ではhttpd.confではなく個別に指定するのが安全になっています。
(最近のhttpd.confから消えたのはそのためだと思います。)
もし、サーバ上の全てのコンテンツが統一されたエンコード種別ならばhttpd.confを使用し、複数のエンコード種別が存在するなら個別に指定するというポリシーで問題ないかと思います。
http://www.atmarkit.co.jp/fsecurity/special/30xss/xss01.html
@IT:クロスサイトスクリプティング対策の基本
クロスサイトスクリプティング脆弱性はこちらの情報が分かりやすいと思います。
ありがとうございます。
クロスサイトスクリプティングという脆弱性は聞いたことがありましたが、ご紹介いただいたサイトで詳細を知ることができました。
でも、文字コードの判別とクロスサイトスクリプティングの関連がわかりません(ごめんなさい)。
ただ、できるだけ全てのテキスト形式のファイルで
のようにファイルごとに文字コードの指定を行うことが推奨なのですね。
現状、動かしているCGIはインターネット上で拾ってきたものなので、できそうも無いですが、次からは文字コードの指定されているものを探してみたいと思います。
http://lovemorgue.org/xss.html#show
$B%/%m%9%5%$%H%9%/%j%W%F%#%s%0(JFAQ
まず、ご存じかとは思いますが、クロスサイトスクリプティング攻撃に関してです。
スクリプトをそのまま実行させてしまうBBSは論外としても、Cookieの盗用が可能となってしまうことが問題です。
http://lists.debian.or.jp/debian-users/200205/msg00419.html
[debian-users:33031] Re: [FAQ] /usr/share/doc/ $B$NF|K\8l(B html $BJ8=q$H(B apache (>=1.3.12)
、「ほとんどの文字コード体系では、ISO-8859-1で128以下の文字コー
ドに割当てられている文字は同じ文字コードにマップされているが、いくつかの
16bitコードでは、これら特殊文字が別の目的にも使用されているため、charset
を間違えるとマズいんじゃない?」と言ったところが、ご質問のDefaultCharsetを指定しないとセキュリティ上の問題となるのでは?との部分と合致すると思われます。
文字化けと見せかけて、悪意のあるコードを埋め込むことが出来ることが問題ですね。
http://www.itmedia.co.jp/help/tips/linux/l0564.html
ITmedia エンタープライズ : Linux Tips「Apache2.0でページが文字化けしてしまう」
故意に文字化けを発生させないために、このURLの設定を参照してください。
必ずしも、AddDefaultCharsetを指定しなくてはならないのではなく、METAタグに依存させるために、わざとoffにする手もあります。
ありがとうございます。
真ん中のURLで理解することができました。
charsetがおかしい場合、パッと見はただの文字化けであるのに、実は悪意のあるコードであったという危険性がでてくるのですね。
サーバ側でのCGIスクリプト等の入力データチェックを通り越して、クライアント側での表示段階では悪意のあるコードに化けてしまうという流れが理解できました。
これで終了したいと思います。
ご解答くださった方、お忙しい中、どうもありがとうございます。
ありがとうございます。
httpd.confの中に書いてあったのですね。
先日、ディレクトリごとにデフォルトの文字コードを変えなければならない状況になり、
とりあえず、
AddDefaultCharset off
としたのですが、脆弱性の問題が気になっています。
具体的にはどのような問題が発生するのでしょう?