さて、前回はHTTPの基本を理解しました。
今回は、実際に画面からパラメータを送信しリクエスト・レスポンスを覗いてみようと思いますが、ここで問題になるのが「hidden」です。
hiddenはよく隠し項目として画面に保持するために使用しますが、実はこのhiddenパラメータは書き換えが可能です。
hiddenパラメータの書き換えを体験することで、セキュリティを身近に感じることができると思うので一緒に勉強していきましょう。
※決して悪用したいわけではありません。セキュリティの理解を深めるためにやっています。
僕のプロフィールはこちら
hiddenパラメータの書き換えをするための環境
hiddenパラメータを書き換えるために、「OWASP ZAP」というツールを利用します。
「OWASP ZAP」の使い方はここでは解説しません。
あくまで、hiddenパラメータの書き換えを身近に感じてもらうための利用するだけですので。
hiddenパラメータの書き換え
上のような画面があるとします。
画面に値を入力します。
確認画面です。
さて、この確認画面ですが、実際のソースコードは以下のようになっています。
※ソースコードは、「右クリック」⇒「ページのソースを表示」から見ることができます。
このソースコードに「hidden」と記載のある箇所があります。
これがいわゆるhiddenパラメータです。実際に送信される値を隠し項目として画面に保持していることになります。
今からやることは、このhiddenパラメータをWebサーバに送信される途中で、「OWASP ZAP」内でいったん処理を掴み、パラメータを変更し、Webサーバに送信するというものです。
画面の登録ボタンを押す前に、「OWASP ZAP」のブレークポイント設定を行います。
これにより、「OWASP ZAP」内でいったん処理を掴むことができます。
処理を掴んだ後のパラメータの内容です。
画面から渡されたhiddenパラメータの値が表示されていますね。
※日本語が文字化けしていますが、これは「OWASP ZAP」のバグです。
次に、このhiddenパラメータの値を変更します。
中断していた処理を実行します。
すると、登録内容が田中さんになっていますね。
画面からはいずみんで送信しましたが、「OWASP ZAP」で処理を中断し、hiddenパラメータの内容を書き換えることで、このような結果になったわけです。
ブラウザから送信する値はユーザが書き換え可能です。
hiddenパラメータのメリットとは
さて、hiddenパラメータは「OWASP ZAP」などのツールを使うことで書き換えが可能ということは理解できました。
では、このhiddenパラメータのメリットは何でしょうか?
情報漏洩や第3者からの書き換えに対しては堅牢
hiddenは利用者からの書き換えはできますが、それ以外からの書き換えに対しては堅牢です。
逆にセッション変数やクッキーなどはセッションIDの固定化攻撃に弱いことがあります。
つまり、利用者自身によっても書き換えられては困る認証や認可に関する情報はセッション変数に保存すべきですが、それ以外はhiddenパラメータに保存する方が良いことになります。
まとめ
hiddenパラメータは個人的にセキュリティ観点から見てあまりよろしくないと思っていましたが、他の手法をとっても欠点はあるわけで、それぞれ一長一短がありますね。
それぞれのメリット・デメリットをしっかり理解しておけばよさそうですが、hiddenパラメータ自体は悪いものではないということが理解できたので収穫でした。
また、今回はhiddenパラメータの書き換えを実際に行えたので勉強になりました。
やはり実際に動かして体験するのは違いますね。
おすすめ本
僕がセキュリティの勉強をする際に購入した本になります。
この本があれば、セキュリティの基礎は理解できるのでおすすめですよ!