Fiddler を使用するとリクエストパラメーターを簡単に改ざんすることができます。具体的なアプリケーションで Fiddler を使用して簡単さを感じてみましょう。
具体的なアプリケーション
今回は、PHP で以下の画面遷移をする Web アプリケーションを作成します。入力画面→確認画面→Welcome 画面といった簡単なものです。注意点は、確認画面で HIDDEN フィールドに入力した名前を非表示で持っているところです。
PHP のソースコード
・input.php
<html> <body> <h1>名前を入力してください</h1> <form action="confirm.php" method="post"> 名前:<input type="text" name="name"><br> <input type="submit" value="送信"> <input type="reset" value="リセット"> </form> </body> </html>
・confirm.php
<?php $name = $_POST['name']; ?> <html> <body> <h1>登録しますか?</h1> <form action="welcome.php" method="post"> 名前:<?php echo htmlspecialchars($name, ENT_QUOTES, "UTF-8"); ?><br> <input type="submit" value="登録"> <input type="button" value="戻る" onclick="javascript:history.back();"> <input type="hidden" name="name" value="<?php echo htmlspecialchars($name, ENT_QUOTES, "UTF-8"); ?>"> </form> </body> </html>
・welcome.php
<html> <body> <h1>ようこそ、<?php echo htmlspecialchars($_POST['name'], ENT_QUOTES, "UTF-8") ?>さん</h1> </body> </html>
入力値パラメーターの改ざん
まずは、通常通りに Fiddler を使ってリクエストの内容を確認しましょう。ブラウザで入力画面を表示して、Fiddler を起動します。そして名前を「yamada」と入力して「送信」ボタンをクリックします。すると、以下の画面が表示されます。
ここで Fiddler を見てみましょう。リクエスト内容の下の方に、「name=yamada」と記述されているところがあります。ここがリクエスト送信された値の内容になります。
今度は、入力画面を表示してから、Fiddler で次のように設定してみましょう。ツールバーの Rules > Automatic Breakpoints > Before Requests を選択します。
この状態で、入力画面で名前を「yamada」と入力して「送信」ボタンをクリックします。すると、Fiddler が以下のように表示され、リクエストが途中でブレーク(中断)されます。
ここでリクエストパラメーターの「name=yamada」となっている場所を、「name=sato」と書き換えて「Run to Completion」ボタンをクリックします。すると、以下のように確認画面が表示されるので、パラメーターの改ざんが成功したことが分かります。簡単ですね。
HIDDEN パラメーターを改ざんする
HIDDEN フィールドに格納されたパラメーターは、ユーザーには見えないので安全だと思っている人はいないでしょうか。実は、HIDDEN パラメーターも普通のパラメーターと同じように簡単に改ざんされてしまいます。具体的に見てみましょう。
入力画面で名前を「yamada」と入力し、確認画面で「登録」ボタンをクリックすると以下の画面が表示されます。名前は、確認画面の HIDDEN フィールドに格納されていたものです。
先程は、入力画面表示時に Fiddler のブレークポイント設定をしましたが、今度は確認画面表示時にブレークポイント設定をしてください。そうすると、ブレークされて以下のようにリクエスト内容が表示されます。
HIDDEN フィールドだったのに、通常のフィールドと同じように表示されていますね。これは同じように改ざん可能だということです。「name=yamada」を「name=sato」に書き換えて、「Run to Completion」ボタンをクリックしてみましょう。
すると、以下のように Welcome 画面が表示されるので、改ざんが成功したことが分かります。HIDDEN フィールドだからといって安全ではないということですね。
おわりに
Fiddler を利用するとリクエストパラメーターを簡単に改ざんできることが分かったと思います。HIDDEN フィールドも安全ではありません。
今回は、Fiddler というツールを用いてリクエストパラメーターの改ざんを行いましたが、ツールを使わない方法や、別のツールもあるので HTTP のリクエストパラメーターは改ざん可能であることを前提として Web アプリケーションを構築する必要があります。
特に、ユーザーに改ざんされて困る情報、例えばショッピングサイトの価格などはブラウザにパラメーターを持つのではなく、サーバーにパラメーターを保存して安全に処理してください。
この記事が Web アプリケーションを安全に構築するきっかけになれば幸いです。
コメント