http://www.postgresql.org/docs/techdocs.50
via http://lwn.net/Articles/184760/rss
via http://traiss.tabesugi.net.nyud.net:8090/lwn.html
今日はこれで半日は潰れた……どうも単純なアップデートだと、アプリケーションによっては痛い目を見る気がします。
取るべき対策は
1. PostgreSQLサーバのアップデート
2. クライアント側のドライバのアップデート
3. いくつかのアプリでは、改修も必要
こんな感じでしょうか?
目を通しておくべきドキュメントは
http://www.postgresql.org/docs/techdocs.52
からリンクのある
FAQ
User's Guide
Technical Information on the Security Hole
の3つ。
このアップデートで、PostgreSQLサーバには
1. UTF-8, SJIS などマルチバイトなエンコードで、不正な文字コードをきちんとチェックするようになった。
2. default で、文字コードが SJIS, BIG5, GBK, GB1803, UHC の場合、エスケープ文字として "\" が使えなくした。
の2つの変更が加えられています。特に後者が曲者で、SJIS を使っており、なおかつエスケープ文字として "\" を利用しているようなアプリを書いてると、該当部分の書き直しが必要になるようです(あってるよね?)
ちなみに、このエスケープ文字の挙動に関しては
* backslash_quote = on : Allow \' always (old behavior; INSECURE
* backslash_quote = off : Reject \' always
* backslash_quote = safe_encoding : Allow \' if client_encoding is safe
こんな感じで、以前の挙動に戻せたりするらしい。ちなみに前記したように、default の挙動は
backslash_quote = safe_encoding
だそうです。
アプリが動かなくなった!とか、クライアント側のドライバのアップデートが抜けてた! とかありそうな話だ……
ちなみになぜマルチバイトエンコードを利用して、SQL Injection が可能となるのか? それについては、上でも挙げた
Technical Information on the Security Hole
に、非常に詳しく書いてあるので、ご一読をお奨めします。そっか表か……
IPv4/IPv6 meter |
思ったより安い……時もある、Amazon |