
連載インデックスへ
Webアプリの常識をJSPとStrutsで身につける(11)Webアプリにおける11の脆弱性の常識と対策
株式会社メセナ・ネットコム
山中 秀樹
2009/9/1
バリデーション(入力データチェック)の必要性
Webアプリケーションの共通的な安全対策として「バリデーション」(入力データチェック)があります。例えば、「特殊文字のエスケープ」や「想定外の文字・文字列が存在した場合エラーを返す」などがあります。
入力データチェックは、今回説明したXSSやSQLインジェクション、HTTPレスポンス分割、OSコマンドインジェクション、ディレクトリトラバーサルの予防になります。
バリデーションの常識については、連載第7回の「Webアプリ開発の常識、バリデーションとテンプレート」をご参照ください。
■ 特殊文字のエスケープを行うプログラム例1(XSS対策)
<html:html>
<head><title>特殊文字のエスケープ</title></head>
■ 入力されたIDとパスワードを<bean:write>タグで表示。<br>
<br>
name:<bean:write name="HelloForm" property="name" /><br>
pass:<bean:write name="HelloForm" property="password" /><br>
<br>
■ 入力されたIDとパスワードを<nested:write>タグで表示。<br>
<br>
<nested:root name="HelloForm" >
name:<nested:write property="name" /><br>
pass:<nested:write property="password" /><br>
</nested:root>
</html:html>
![]() |
| 図2 実行イメージ |
実行イメージのHTMLソース
<html>
<head><title>特殊文字のエスケープ</title></head>
■ 入力されたIDとパスワードを<bean:write>タグで表示。<br>
<br>
name:<>&"'<br>
pass:<>&"'<br>
<br>
■ 入力されたIDとパスワードを<nested:write>タグで表示。<br>
<br>
name:<>&"'<br>
pass:<>&"'<br>
</html>
<bean:write>タグには特殊文字のエスケープ(HTMLエンコードまたはURLエンコード)機能が実装されています。ソースコードを見ると、特殊文字「<」「>」「&」「"」「'」が「<」「>」「&」「"」「'」に置き換わっているのが確認できます。
また、プログラム例のように<nested>タグであっても、特殊文字のエスケープは行われます。
■ 特殊文字のエスケープを行うプログラム例2(SQLインジェクション、OSコマンドインジェクション対策)
public static String escape(String str) {
char c;
StringBuffer returnValue = new StringBuffer();
for( int i=0; i < str.length(); i++ ) {
c = str.charAt(i);
if ( c == '<' ) {
returnValue = returnValue .append("<");
} else if( c == '>' ) {
returnValue = returnValue .append(">");
} else if( c == '&' ) {
returnValue = returnValue .append("&");
} else if( c == '"' ) {
returnValue = returnValue .append(""");
} else if( c == '\'' ){
returnValue = returnValue .append("'");
} else {
returnValue = returnValue .append(c);
}
}
return new String(returnValue);
}
■ URLエンコーディングを行うコード例(HTTPレスポンス分割対策)
response.addHeader("Location: " + URLEncoder.encode(value));
■ 想定外の文字や文字列が存在する場合、エラーを返すプログラム例(パス/ディレクトリトラバーサル対策)
public void pathCheck(String path) {
if(-1 != path.indexOf("../")){
//エラー処理を記述
}
}
セキュリティを意識した開発は、Webアプリ開発者の常識
以上、11種類の脆弱性について説明しました。これで、Webアプリにおける脆弱性に関する理解が深まったと思います。いまだ、Webアプリケーションの脆弱性を突く攻撃は増加しているので、アプリケーション開発時には、「セキュリティを意識した開発」が常識といえるのではないでしょうか。
次回はいよいよ最終回。スクリプトの常識と題し、JavaScriptの実装やAjaxの組み込みについて説明していこうと思います。
■ @IT関連記事
| [これはひどい]IEの引用符の解釈 教科書に載らないWebアプリケーションセキュリティ(1) Webアプリケーションとセキュリティは切り離せない。セキュアなコードを書くために知っておくべき小ネタを取り上げる 「Coding Edge」フォーラム 2009/2/27 |
||
| 無料でWebアプリにありがちな脆弱性を調べて治す Tomcatはどこまで“安全”にできるのか?(5) Webアプリを作ったが、どこに脆弱性があるか分からない! という人のために無料ツールを紹介し対処法の例も解説します 「Java
Solution」フォーラム 2008/3/5 |
| TERASOLUNAのセキュリティ機能でWebアプリを強化 オープンソースTERASOLUNAで作るWebアプリ(最終回) ログオンした情報を管理するユーザー情報保持機能と特定アクセスの画面を作るアクセス権限チェック機能を紹介 「Java Solution」フォーラム 2009/3/10 |
| J2EEのセキュリティのキホンを知る [連載]J2EEの基礎(7) J2EEのセキュリティには、プログラムコードによる手続き型のセキュリティだけでなく、コンポーネントのdeploy時にセキュリティを設定する方法がある 「Java
Solution」フォーラム 2001/12/7 |
||
| 規模や信頼性で決めるWebサイトの構成 [連載]Java初心者のためのWebシステム入門(8) Webサイトの構築方法は、サイトの規模や信頼性をどの程度確保するかで決まってくる 「Java
Solution」フォーラム 2002/8/27 |
||
| Webサイト設計時の考慮点を知ろう [連載]Java初心者のためのWebシステム入門(2) システム構築の前に、まずWebサイトの構成を設計する必要があります。今回は設計時の考慮点をやさしく解説します 「Java
Solution」フォーラム 2002/3/5 |
||
| Webアプリケーションを作る前に知るべき10の脆弱性 Security&Trustウォッチ(47) 知ることはは力なり! OWASPが発表したWebアプリの脆弱性トップテンを基に、エンジニアが知っておくべきポイントをもう一度復習しよう 「Security&Trust」フォーラム 2007/6/13
|
||
| スーパーユーザーの特権を制限する 止められないUNIXサーバのセキュリティ対策(4) 管理者の些細なミスがシステム全体に及ぶためrootになれるユーザーは限定したい。よりセキュアな権限の制限方法とは 「Security&Trust」フォーラム 2005/3/4 |
||
| プロフィール |
| 山中 秀樹(やまなか ひでき) 株式会社メセナ・ネットコム所属 Strutsを使用したWebアプリケーション開発に携わっている。現在は無事に開発を終え、保守を担当している。広い視野と柔軟な発想力を持った技術者を目指し、日々勉強を行っている。趣味はサッカー観戦、読書 |
| Index | ||||||||||
|
||||||||||
Webアプリの常識をJSPとStrutsで身につける バックナンバー 連載インデックスへ»
- 第1回 いまさら聞けない、Webアプリケーションの常識
- 第2回 Strutsの常識を知り、EclipseとTomcatの環境構築
- 第3回 Webアプリにおけるサーバとクライアントの常識
- 第4回 HTMLやStrutsに必須の“タグ”と“サブミット”の常識
- 第5回 もはやWeb利用者の常識、“URL”の意味を理解しよう
- 第6回 発掘! Webの“あるある”問題点−ステートの常識
- 第7回 Webアプリ開発の常識、バリデーションとテンプレート
- 第8回 MySQLの常識を知りセットアップしてJSPからDB操作
- 第9回 Hibernateで覚えるO/RマッピングとBeanの常識
- 第10回 JUnitとEclipseを使って学ぶ、“テスト”の常識
- 第11回 Webアプリにおける11の脆弱性の常識と対策
- 最終回 JavaScript/Ajaxで知るWebアプリとスクリプトの常識
| Java Solution全記事一覧 |
TechTargetジャパン
Java Solution フォーラム 新着記事
- Scalaのパッケージ、アクセス修飾子、オブジェクト継承 (2012/5/22)
インポート、パッケージオブジェクト、抽象クラス/抽象メソッド、オーバーライド、final、シールドクラスなども - 基幹系システムでCloud SQLは使えるか試してみた (2012/5/17)
サンプルとしてMRPシステムを作成して動かし、「再帰呼び出し」などのパフォーマンスを測定して検証してみます - アジャイル管理ツール9選+Pivotal Tracker入門 (2012/5/14)
群雄割拠のアジャイルプロジェクト管理ツールを9つ紹介し、特に注目を集めているPivotal Trackerの基本的な使い方を解説します - サーバサイドJSやJavaでWebアプリが作れるXPages (2012/5/11)
Notes/Dominoの資産をサーバサイドJavaScriptやJavaで操作し、HTMLやJavaScript、CSSをUIにできる技術を紹介
|
|
@IT 新着記事
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -
お勧め求人情報
転職/派遣情報を探す
**先週の人気講座ランキング**
〜 Android編 〜
ホワイトペーパー(TechTargetジャパン)
ソリューションFLASH

![図2 [新規 JUnit テスト・ケース]ダイアログ](03.gif)