忍者ブログ
日々の生活や仕事における出来事などを 気分しだいで書き綴っていきます。
カレンダー
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
×

[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が壊れたからです。
(今のプログラム、作り悪すぎ・・・)

-------------------------------------------------------------------------


↓↓↓ システム屋なら読んでおいて損はないかも。

拍手[1回]

PR
この記事にコメントする
Name:
Title:
Mail:
URL:
Color:
Comment:
pass: emoji:Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
TrackBackURL:
PR
ブログ内検索
プロフィール
HN: Atchi(あっち)
年齢: 41
性別: 男性
誕生日:  1983/07/28
職業: IT業界の雑魚
趣味: 映画、音楽、ゲーム、PC、歴史
自己紹介:
活動の記録をWebに残したい、
文章力を向上させたい、
2012年こそは何か始めたい、
そんな思いからブログを始めてみました。
稚拙な文章・内容ですが、
お付き合いいただけたら幸いです。
忍者ブログ [PR]
Copyright(C) Atchiのブログ(あっちのぶろぐ) All Rights Reserved