一人勉強会シリーズの、「日経SYSTEM」前についてきた付録、『システム構築完全読本」から、お勉強になりそうな話。
今日は、2章2部「SQLインジェクションはパラメータ・クエリーで防ごう」。
その話題自体は、
ASP.NETの場合、SqlCommandをつかってSQL文(パラメータは@をつけて)を指定し
SqlParameterでパラメータの値を設定する
で、本に書いてないけど、
Java(JDBC)の場合はConnectionのprepareStatementでSQL文(パラメータは?)を指定
その返り値のPreparedStatementを使って値をセットする
っていうことをすると、エスケープしてくれるのでOKと
(エスケープが目的なので、たった1回の処理でもPreparedStatementを使う)
言う話がのってるんだけど、これは、もうこのブログにもさんざん書いた話なので
(サニタイジングについて)、いいとして、今日は別の話。
その後にのっている話で、「文字化けを防ぐには」がお勉強内容。
JAVAのJDKにおいて、Shift_JISとは
JDK1.1.8、JDK1.2 SJIS
JDK1.2~JDK1.4.1 MS932(Windows-31J)
JDK1.4.1以降 SJIS
をさすんだそーな(P49)。
で、SJISとMS932でUNICODEへのマッピングが違うものは、SJISコードで
0x5c(半角の¥)、0x7e(半角の~)
0x815c,815f,8160,8161,817c,8191,8192,81ca
だそーな。(P47)
なので、
・これらの文字は、JDKのバージョンの違いによって、変換の問題が出る可能性がある。
・全部UNICODEにするというのが1つの解法
・ただしUNICODEにしても半角の¥とバックスラッシュは同じSJISコードなので問題がある
ってなことが載っていました。
今日のお勉強はここまで。