wasbook reading #10

「体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践」読書会の第10回。
今回読んだのは以下の範囲。

6章 文字コードと セキュリティ

6.1 文字コードとセキュリティの概要

僕はJavaを使う上で、何度か文字コードについて勉強したけど、ちょっと複雑でややこしい。まずはこれを意識する必要がある。

文字字コードとは、以下の2つの概念を合わせたものと考えられます。

6.2 文字集合

文字集合は、そのままだけど文字を集めたもの。厳密には、さらに符号をつけた文字集合のことを符号化文字集合という。本ではあわせて「文字集合」という用語で統一されている。
具体的にはASCIIとかISO-8859-1とかJIS X 0213とか。
そして文字に割り当てられたコードが、文字集合によってことなる場合がある。

ISO-8859-1およびUnicodeでは、0xA5の場所に円記号「\」が割り当てられていますが、日本 では歴史的にバックスラッシュの位置0x5Cに円記号「\」を割り当てていました。

¥や\は、プログラムで特別な意味を持つことがある。そこでエスケープ処理などが抜けると、脆弱性になってしまう可能性がある。

6.3 文字エンコーディング

次に文字エンコーディング文字集合には符号がついているけど、いろいろな文字集合がある。そのため複数の文字集合を併用する必要がある。それをなんとかするために「文字エンコーディング」がある。
具体的にはShift_ JISやEUC-JP、UTF-16UTF-8とか。
繰り返しになってしまうけど、Unicode文字集合UTF-8は文字エンコーディングになる。

6.4 文字コードによる脆弱性の発生要因まとめ

文字コードごとに、それぞれ問題があるけど、まとめるとこんな感じ。

6.5 文字コードを正しく扱うために

以下のポイントが紹介されていた。

そもそも上記のようなことを意識しないと、文字化けに悩まされそう。最近はUTF-8に統一することが多くなってきたのでだいぶ楽になった。

6.6 まとめ

基本的に、文字列の入出力があるところでは、文字コードを意識する必要がある。開発では早めに文字コードを意識し、決めておく必要がある。

まとめ

サーバのOS、Webサーバで扱う文字コード、APサーバで扱う文字コード、DBサーバで扱う文字コードなどを確認し、統一できないのであれば早めに動作確認を行う。
wasbookの文字コードの章は、とてもよくまとまっていると感じた。分量がほどほどで、細かすぎることもなく、わかりやすかった。
あわせてこちらも読んでおくと、理解が深まると思う。(wasbookと使っている用語が異なるので、ちょっと混乱するかもしれないけど。)


wasbookに関するものは、こちらのタグで。



電子書籍版はこちら。