非SSLのフォームから安全に送信する方法はあるのか
2006年6月1日(木曜日)
非SSLのフォームから安全に送信する方法はあるのか
インターネットの世界では、通信経路がどうなるかは保証されていなかったりするため、経路上に悪い人がいるかもしれません。悪い人は、流れてくるパケットの中身を見て、それを悪用するかもしれません。ですから、悪い人がいても問題ないようにするために SSL が使われます。逆の言い方をすれば、通信経路上に悪い人がいないことが保証されているならば、SSL は必要ないわけです。
通信経路上に悪い人がいる場合、その人はパケットを改竄できます。送り先が SSL 保護つきでも、フォームが非 SSL だとすると、たとえば
<form action="https://example.com">
という記述があったとして、通信経路上の悪い人はこれを改竄して
<form action=" http://example.com">
と変更する事が可能です。こうされると、非 SSL な URL にデータを送信してしまいますから、悪い人に読まれてしまいます。ですから、フォームも SSL にしなければいけません。
ここまではまあ良いと思いますが、ふと疑問に思ったのは、「非 SSL なフォームであっても、送信前に HTML のソースを確認して form の送信先を確認すれば安全なのか?」ということです。
ちょっと考えてみると、まずスクリプトが有効な場合は NG でしょう (DOM などで action属性 を書き換えることが出来るので、HTML ソースを見ただけでは判断できない)。また、たとえ https: であっても、送信先のドメインがよく分からないものであったらやはり駄目でしょう。
では、以下の条件全てを満たしている場合、そのフォーム送信は安全 (まともな SSL 保護つきフォームと同レベルの安全性がある) といえるのでしょうか。
- フォームは http: (非SSL)
- 送信先 URL は https: (SSL保護つき)
- フォームおよび送信先のドメインは既知の信頼できるもの (どこかの怪しげな ASP サービスではなく、ちゃんと送り先の会社が所有しているドメイン)
- 送信先 URL には事前に GET アクセスして、サーバ証明書に問題がないことを確認済み
- ユーザは、スクリプト無効にしている
- ユーザには HTML の知識があり、ソースを読んで送信先を確認することができる
ちょっと考えた限りでは、この条件全てが満たされていれば大丈夫なような気がするのですが、何か別な抜け道があったりするかしら……。
※もちろん、普通のユーザにはそんな条件満たせませんから、非 SSL のフォームは駄目という結論には変わりないわけですが……。ぶっちゃけると、私が非 SSL のフォームを使わされそうになっていて、そこから安全に送信したいという話です。:-)
- 「非SSLのフォームから安全に送信する方法はあるのか」へのコメント (7件)
- 前(古い): Newスーパーマリオをクリア?
- 次(新しい): またウェンディーズで買えなかった