2011年2月26日土曜日

HTML5

この頃、HTML5について調べ始めているのですが・・・
いろいろできるよ、という評判のわりにHTML5単体では大したことが出来ないのがわかりました。

・・・といっても、筆者はHTML5を「使えない」と言っているのではありません。

HTML5で追加されたタグは、HTML文書の階層構造を定義するタグ(見た目には影響しないタグ)が多く、目立つのはCANVASタグくらいのものです。

「HTML5 サンプル」などと打ち込んで検索してみるとわかりますが、多くのサンプルはCANVASタグで何が出来るかを競っている状況です。
確かに、CANVASタグで定義した領域内に.net言語のような形で描画可能であるのは面白いです。
ただ、描画を行うのはJavaScriptだったりするのが実体です。
静的なものをHTMLに、動的なものをJavaScriptに、と明確に分けて行くのは歓迎ですが、バリバリのスクリプターでもないと動きのあるHTML5のページは作れなさそうですね。


色々やる為にはJavaScriptを使わねばならないのですが、自分で全て作るのは大変です。
そこで出てくるのがajaxだったりします。
というか、HTML5の知識はCANVASタグとそれに関連するオブジェクトだけで良くて、あとは全てJavaScriptの知識や経験が要求されるのではないかと考えています。
数年前、JavaScriptを軽んじていた人に疑問を持っていた筆者なのでこの流れは歓迎ですね。
IDE的にイマイチな状況なので開発効率は悪目ですけどね^^;
(かといって、eclipseプラグインが出てきても自分からは使わないことは確定的に明らか)




2011年2月8日火曜日

SQLインジェクション対応で思うこと

絶賛単純作業(見た目のみ)中の筆者です。

SQLインジェクション対応というのをやっているのですが、作業的には
1、共通関数(無毒化を行う関数)の作成
2、作成した共通関数を対象プロジェクトのソースの『適切な場所』に組み込む
だけのことです。
2、が対象プロジェクトの規模に比例して作業量が増えるのですけどね~
具体的には2プロジェクトで2000本程度のSQL文の確認と共通関数組み込みとなります。

組み込んでよい場所だめな場所の判別もしているので、脳内では単純作業じゃないのですが、見た目は共通関数のコピペなので単純作業に見える、と・・・ orz


そんな作業をしていると、ふとWebシステムのセキュリティ対策について考えてしまったりします。
今回対象となっている「SQLインジェクション」はSQL文の可変部分に与える文字列を工夫することで悪さをしようというものです。
具体的にいうと・・・

Select カラムA From テーブルA Where カラムB = '(入力値)';

というSQL文があり、(入力値)は画面上のテキストボックスの入力値をそのまま入れるとします。
一昔前のクライアント-サーバ型システムでのDBアクセスではお約束といえる書き方です。
ここで、入力値に

”' or 'A' = 'A”

と入れるとどうなるでしょう・・・

Select カラムA From テーブルA Where カラムB = '' or 'A' = 'A';

条件部分が
「カラムB=""」 または 「"A" = "A"」
となってしまいました。

テーブルAの全レコードのカラムAの情報が取れそうな感じですね。

まぁ、これだけならあまり害はないのですが、いくらでも好きなSQL文に出来てしまう可能性があるのがわかると思います。
具体的には書きませんが、色々DBを弄くれる可能性も・・・ ということで極めて危険なわけです。

対応の方法は色々とありますが、最低限「'」(シングルクオート)を「''」に置換する必要があります。


実はSQLインジェクションというものは、厳密に画面の入力を定義してやればかなり防ぐことが可能だったりします。
入力値で攻撃する性質上、数値だけしか入力できないテキストボックスからは何も出来ません。
入力をプルダウンメインにしてしまえばもちろん何も出来ません。
入力可能な文字数が短ければやはり攻撃しづらい、と・・・
まぁ、フレームワーク側での対応が進んでいるので意識しなくても良いともいえるのが現在の開発環境だったりするのですけどね。