04 | 2025/05 | 06 |
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
現在携わっているプロジェクトで開発中のシステムが
やたらと「記号」に対して脆弱である。
(一応リリースはしたけど・・・)
そこで、記号に対して強いシステムを作るポイントを少しずつまとめていく。
ちなみに
・ASP.NET(VB)
・Oracle 10g
が前提。
【ポイント1】
「プログラムによってJavaScriptを動的に生成する際、シングルクォーテーションや円記号の扱いに注意する。」
DBから取得したデータの値を含んだJavaScriptをHTML上に展開する際、シングルクォーテーションや円記号が含まれていると、JavaScriptの構文エラーとなり、正しく動作しなくなる。
極端な例であるが、DBから取得した値をダイアログに表示させるスクリプトを動的に生成したとする。
例:alert('名称');
データが「MOS BURGER」の場合、
alert('MOS BURGER');
となり、正しく動作する。
しかし、データが「McDonald's」の場合、
alert('McDonald's');
となり、動作しない。
対策として、文字列を囲う文字をダブルクォーテーションに変更するという方法もあるが、
文字列にダブルクォーテーションが含まれていた場合、同じ問題が発生する。
そこで、「'」を「\'」に置換してから、展開するようにする。
ただし、円記号もJavaScript上では特殊文字であるので、「\」を「\\」に置換する必要がある。
■検証
テキストエディタに
<script>alert('McDonald's');</script>
と入力し、test1.htmlとして保存。
テキストエディタに
<script>alert('McDonald\'s');</script>
と入力し、test2.htmlとして保存。
test1は何も起きないが、test2の方はちゃんとアラートが表示される。
-------------------------------------------------------------------------
得意先検索ポップアップの一覧に「McDonald's」が表示されると、
チェックボックスにチェックを入れて選択ボタンを押しても
「選択されていません。」と出るのは、
シングルクォーテーションによってJavaScriptが壊れたからです。
(今のプログラム、作り悪すぎ・・・)
-------------------------------------------------------------------------
↓↓↓ システム屋なら読んでおいて損はないかも。
活動の記録をWebに残したい、
文章力を向上させたい、
2012年こそは何か始めたい、
そんな思いからブログを始めてみました。
稚拙な文章・内容ですが、
お付き合いいただけたら幸いです。