Web ページに埋め込むことを目的とした JavaScript スニペットがあります。このスニペットは、フォームが埋め込まれているページにフォームをロードします。次に、スニペットはフォーム データを安全な URL に送信します。ここに問題があります。スニペットがフォームをロードするページは安全ではない可能性がありますが、フォーム データを安全な外部 URL に安全に転送する必要があります。可能であれば、これをどのように実装できますか?
3 に答える
フォームの ACTION 属性が HTTPS 宛先に送信する場合、フォーム HTML 自体が最初に送信された方法に関係なく、コンテンツは暗号化されて送信先に安全に送信されます。ユーザーがフォームを送信すると、ブラウザーは新しい接続を開始し、現在のブラウザーの場所ではなく、宛先に対する POST 要求 (フォームの METHOD は GET ではなく POST であると想定しています)。この場合、宛先が「https://...」であるため、その POST は HTTPS 経由で発生します。
これは、安全でないページに埋め込まれている可能性のある XSS やその他の固有のセキュリティ リスク、または JavaScript を介して HTTP 経由で送信されている間にフォーム HTML に対する MITM 攻撃については何も述べていません。あなたのプロジェクトにとって価値があります。おそらく、あなたの JavaScript は、FORM 自体の代わりに、(IFRAME の SRC に HTTPS を使用して) フォームを含む IFRAME を埋め込むことができます。これは、安全でないページで実行されている他のスクリプトがフォームとそのデータにアクセスするのを防ぐために、Facebook やその他の企業が行っていることです。ブラウザーは、同一生成元ポリシーに基づいて、他のスクリプトからのそのような試みをブロックします (すべての一般的な最新ブラウザーは信頼できます)。 IFRAME が要求すると、フォームは HTTPS 経由で送信されます。
HTTPページにロードされたJavaScriptは、トラフィックを変更している攻撃者によって置き換えられます。変更されたJavaScriptは、データをどこかに公開するだけです。したがって、HTTPページからHTTPSページにデータを安全に転送することはできません。私が見逃している「安全」の他の定義がない限り?
フォームを送信するときに重要なのはアクション URL であるため、フォームが URL を使用する場合、フォーム自体がまたはページhttps://
でホストされているかどうかにかかわらず、その URL に対して POST 要求が行われます。http://
https://
ただし、 を介してフォーム ページも提供する必要がありますhttps://
。WASP TLS チート シートの最初のルールを参照してください(この原則はログイン ページだけでなく、同様のフォームにも適用されます)。
https://
問題は、ユーザーが確認できるアドレスを介してフォームのページを提供しないと、MITM 攻撃者がこのフォームを変更していないことをユーザーが信頼できないことです。たとえば、そのような攻撃者は、action
属性を透過的に置き換えて別のサイトにリダイレクトしたり、フォームに入力されたすべてのキーを記録する JavaScript を挿入したりして、機密データを収集する可能性があります。