ホームページを作るにはどうすればよいのか? ファイル転送・SSL・メール送信の仕組み・CGIなどをやさしく解説します
ホームページのお助けサイト 〜はじめてホームページを作る方のためのサイトです〜
トップページ | インフォメーション | プロフィール | 更新履歴 | メルマガ | お問い合わせ 

ホームページの改ざんを防ぐには? その2              

■ホームページの改ざん対策(2)
 
データの受け渡しに、hidden項目を使うことがあります。
hidden項目を使えば、ホームページ上にデータを表示させないまま、目的のページまでデータを運ぶことができます。
しかし、ソース表示で見ることができるため、書き換えられるおそれがあります。
 
今回、事例としてあげるのは、hiddenを使って会員情報を区別しているホームページです。
 
会員の種類は、シルバー会員にはじまり、ゴールド、プラチナと、次第に得られる特典も大きくなっていくものと
します。
ログイン画面から、会員IDとパスワードを入力すると、会員ページへ入れる……という仕組みになっています。
 
 
シルバー会員であれば、シルバー会員用のメニューしか見れませんし、シルバー会員用の情報しか閲覧
できません。
 
 
1.ログイン画面       
 
 
2.シルバー会員用メニューへ
 
 
3.シルバー会員専用情報へ
 
 
これが普通の使い方です。
これから、ゴールド会員用のパスワードを打ち込まずに、ゴールド会員用のページを表示さてみます。
 
4.直入力を試みる
 
その前に、直アドレスの打ち込みがブロックされていることを確認します。
ログイン画面のURLに、information.php までのフルパスを入力してみました。すると……。
 
 
5.直入力はブロックされている
 
 
会員登録への案内がでました。URLの直接入力については、対処済みというわけです。
このホームページでは、次のような処理を記述してあります。
 
hiddenに値が入っていた場合     →  該当する会員ページへ
hiddenに値が入っていなかった場合 →  会員登録の案内を表示
 
では、これから送信情報に手を加えることにしましょう。
 
6.「ソース」を表示させる
 
あなたはシルバー会員です。もうひとつ上の情報を見てみたいな……と思っています。
では、会員用メニュー画面で、「ソース」を表示してみましょう。
 
あくまで事例ですので、簡単に書いてあります。
hidden項目の行を見てください。
NAME='MEMBER' VALUE='1' という記述があります。
どうやら、このあたりが臭そうです。
 
7.ページを書きかえる
 
ACTION の指定をフルパス表記にして、hidden 項目の値を2にします。
 
 
変更したら保存します。保存する場所は、あなたのパソコンのディスクトップ(どこでも構いません)です。
 
8.作成したファイルを開く
 
ディスクトップに保存したさきほどのファイルを開きます。
URLはローカルファイルであることを指定しています。
 
 
9.情報ページへ
 
ボタンを押してみましょう。見事、ゴールド会員のページへ行けました。
本来なら見れないページです。また、サーバー内のページ(ファイル)を書きかえたわけでもありません。
 
 
hidden項目を使っているページはたくさんありますが、事例のように NAME='MEMBER' で、VALUE の値が
数値だということは、そうないと思います(これだと、そのまんま)。
hidden項目での値のやりとりは、危険性をはらんだものであると考えてください。
 
VALUE値を変更して、ACTION指定をフルパス表記にすればよいのです。
たったこれだけの作業で、サイトのセキュリティが崩れかねないのですから。
hidden項目をうかつに使えないのは分かりました。では、代わりになるものはないのでしょうか?
ひとつの解決策として、セッション変数を使う方法があります。
 
TOPページへ

 
事例はPHPで構築されています(ログイン画面は html ファイルです)。
参考までにソースを記しておきます。
logon.html
<html><title>ログイン画面</title>
<body>
ログイン画面
<Form Method="POST" Action="kaiin_page.php">
ユーザー名:<Input Type="text" Name="user"><br>
パスワード:<Input Type="text" Name="Password"><br>
<Input Type="Submit" Value="ログイン">
</Form>
</body>
</html>
 
menu.php
<?php
$strUser = $_POST['USERID'];
$strPass = $_POST['PASSWORD'];

If ($strUser == "silver" and $strPass == "pass") {
$strMember = "1";
}ElseIf ($strUser == "gold" and $strPass == "pass"){
$strMember = "2";
}ElseIf ($strUser == "platinum" and $strPass == "pass"){
$strMember = "3";
}Else{
$strMember = "0";
}

If ($strMember == "1") {
print "<html><title>シルバー会員用ページ</title>";
print "<body>";
print "シルバー会員用メニュー<BR>";
print "<FORM METHOD='POST' ACTION='information.php'>";
print "<INPUT TYPE='HIDDEN' NAME='MEMBER' VALUE='1'>";
print "<INPUT TYPE='RADIO' NAME='INFORMATION' VALUE='1' CHECKED>情報その1<BR>";
print "<INPUT TYPE='RADIO' NAME='INFORMATION' VALUE='2'>情報その2<BR>";
print "<INPUT TYPE='SUBMIT' VALUE='読む'><BR>";
print "</FORM>";
print "</body>";
print "</html>";
}ElseIf ($strMember == "2"){
print "<html><title>ゴールド会員用ページ</title>";
print "<body>";
print "ゴールド会員用メニュー<BR>";
print "<FORM METHOD='POST' ACTION='information.php'>";
print "<INPUT TYPE='HIDDEN' NAME='MEMBER' VALUE='2'>";
print "<INPUT TYPE='RADIO' NAME='INFORMATION' VALUE='1' CHECKED>情報その1<BR>";
print "<INPUT TYPE='RADIO' NAME='INFORMATION' VALUE='2'>情報その2<BR>";
print "<INPUT TYPE='SUBMIT' VALUE='読む'><BR>";
print "</FORM>";
print "</body>";
print "</html>";
}ElseIf ($strMember == "3"){
print "<html><title>プラチナ会員用ページ</title>";
print "<body>";
print "プラチナ会員用メニュー<BR>";
print "<FORM METHOD='POST' ACTION='information.php'>";
print "<INPUT TYPE='HIDDEN' NAME='MEMBER' VALUE='3'>";
print "<INPUT TYPE='RADIO' NAME='INFORMATION' VALUE='1' CHECKED>情報その1<BR>";
print "<INPUT TYPE='RADIO' NAME='INFORMATION' VALUE='2'>情報その2<BR>";
print "<INPUT TYPE='SUBMIT' VALUE='読む'><BR>";
print "</FORM>";
print "</body>";
print "</html>";
}Else{
print "<html><title>エラー情報</title>";
print "<body>";
print "会員IDまたはパスワードが違います。<BR>";
print "</body>";
print "</html>";
}
?>
 
 
 
 
 
 
 
 
 
 
TOPへ戻る




Copyright (C) starthp.com, All Rights Reserved.