GeneXusでXSS対策

GeneXusで入力項目を置いてそこにスクリプトを入力しても、そのスクリプトが動作することはありません。

ただ、一点気を付けなければならないのは、その入力項目のFormatプロパティがHTMLやRowHTMLだった場合です。
この場合は入力された値に対して開発者がサニタイズを行う必要があります。

今回はサニタイズを行わないとどうなるのか、またどのように対策するのかを書こうと思います。

FormatプロパティがTextの場合

例として商品マスタに商品メモと言う項目があるとします。
その項目のFormatはデフォルトの「Text」となっております。

その項目にScriptを入力してみます。

その後IDを入力してボタンを押すと、商品メモを取得する画面で商品メモを表示します。
その結果スクリプトが動作することはありません。

FormatプロパティがHTMLの場合

次は商品メモのFormatを「HTML」に変更してみましょう。

先ほどの商品メモを取得する画面で、IDを入力してボタンを押すとスクリプトが動作しアラートが出ます。

つまりユーザーに入力させた項目をHTMLにて表示すると、スクリプトが含まれていた場合悪さをしてしまう可能性があります。

そこでHTMLで表示する項目はサニタイズが必要になります。

サニタイズ処理の実装

サニタイズ処理をすると言っても特に難しいことはありません。

一般的にサニタイズをする時と同様、対象の文字を特定の文字列に置き換えればOKです。

今回は下記の3つを置き換えます。

表示エスケープ
<&lt;
>&gt;
&#039;

まず置き換えたい文字を受け取って。エスケープ処理をして返すプロシージャを作ります。

次にトランザクションで登録時に上記のプロシージャを呼びます。

これだけでOKです。

サニタイズ処理の検証

再度トランザクションでデータを登録しなおします。

先ほどのHTMLで出力している画面で表示してみます。

アラートは出力されずに入力したまま出力されております。

DBにどうやって格納されているか見てみましょう。

想定通りデータベースにはエスケープされて登録されてますね。

まとめ

FormatプロパティをHTMLにすることはあまりないですが、文字列内にあるURLをリンク化したいとか、一部の文字だけ色を変えたいとかそう言った特殊な要件があるとHTML化が必要になってきます。

その場合は必ずサニタイズ処理を実装しましょう。

Blog一覧へ