Webアプリケーションのセキュリティについては私もまだまだ初心者なのですが、
いろいろなWebサイトや書籍を参考に勉強した内容をメモしています。
この分野、特に技術や規約の進歩が激しいので、
ソフトウェアのバージョンアップとともに無効化・陳腐化するかもしれません。
●主なセキュリティ対策
一応、次の4つの話題について概要をメモしてみました。
●入力文字列のフィルタ
例えばアンケート入力フォームの「感想」のように長い文章が入力可能なTEXTAREAに、
HTMLタグを使って、
悪意のある別のWebサイトのスクリプトを実行する処理を書き込んだとします。
すると、その「感想」をそのまま表示する処理があると、
表示しようとした段階でスクリプトが実行され、
ブラウザを落とすなどの危険な処理が行われる可能性があります。
これを防ぐには、入力内容の文字列をチェックして、
特にHTMLタグの<と>を含んでいれば削除するか、別の安全な文字に置き換える処理を行います。
簡単なフィルタ処理は例えば次のようなクラスで行えます。
package ushi.wui;
/**
* セキュリティのため、入力された文字列に含まれるHTMLタグ文字を
* フィルタリングします。
*/
public class StringFilter {
/**
* 渡された文字列に含まれるタグ開始・終了文字<>をエスケープします。
* @param s 変換元の文字列
* @return 変換後の文字列
*/
public static String checkTag(String s){
if((s.indexOf('<') == -1) && (s.indexOf('>') == -1)){
return s;
}
StringBuffer sb = new StringBuffer();
for(int i=0; i<s.length() ;i++){
char c = s.charAt(i);
if(c == '<') sb.append("<");
else if(c == '>') sb.append(">");
else sb.append(c);
}
return sb.toString();
}
}
/* end. */
|
またちょっと趣旨がずれますが、INPUT TEXTタグには、
必ずMAXLENGTH属性で最大入力可能文字数を指定しておくのも有効な対策と言えるでしょう。
●REFERER、METHODのチェック
REFERERとは、そのページへのリンク元のページのURLのことです。
これをヘッダ情報からチェックして、想定しない外部のサイトから直接リンクされていたり、
クライアントユーザが直接URLを叩いてアクセスしてきたときにはエラーではじくようにすると効果的です。
またMETHODは付帯的なものですが、
POSTでアクセスされるべきページの場合は、
GETで変なクエリー文字列をつけてアクセスされたときにはじくようにするとより安全です。
REFERERとMETHODを取得するには、次のようなコードを書きます。
String referer = request.getHeader("Referer");
String method = request.getMethod();
|
●アクセス可能なクライアントの制限
特定部門、特定ユーザのみにアクセスを制限したい場合は、
Apacheの場合は.htaccessファイルを使って、Webサーバ側で制御ができますが、
TomcatなどのWebアプリケーションサーバの場合は、
Webアプリケーションの内部で制御をかけることになると思います。
その方法は、ヘッダ情報からクライアントのホスト名やIPアドレスを取得して、
これを元に判別を行います。それらを取得するためのコードは次のようになります。
String hostname = request.getRemoteHost();
String ipaddress = request.getRemoteAddr();
|
●パスワード認証とSSLの導入
そして大事な情報を保護するために欠かせない対策が、パスワード認証です。
Webアプリケーションの一般的なパスワード認証は、
入力されたパスワードが解読可能な形でネットワークを流れるので、
通信の暗号化を行うSSLと併用するのが普通です。
これらについてはそれぞれ別のページで紹介しているので、
そちらをご覧になってくださいね。
(first uploaded 2002/09/22 last updated 2002/09/23, URANO398 - KQ TAURA)
|