私はJSPを使用しています。
したがって、ユーザーがフォームを送信すると、すべてのフォームフィールドに、ユーザー名とパスワードがクリアテキストでブラウザのメモリダンプファイルに保存されると表示されます。
私はJSP隠しフィールドで試してみましたが、その値でさえクリアテキストで保存されているようです。
しかし、Chromeでログインが行われた後にGmailのログインページのダンプを取得すると、ユーザー名のみが保存され、パスワードは保存されません。ただし、FirefoxとIEの両方を保存します。
一部の銀行サイトでは、実際にパスワードを完全に変更しますdummy@1234...
。
同じことをする方法を教えてもらえますか?
パスワードを変更したり、メモリダンプから削除したりできます。
個々のキーストロークを試し、文字を別のものに置き換えましたが、その場合でも、認証のために実際のパスワードをサーバーに送信する必要があります。
JSPかJavaScriptのどちらかを教えてください。
目標は、ブラウザの動作を効果的に制御し、ユーザーが入力および送信したパスワードを(キャッシュでもパスワードストレージでも)どこにも保存しないようにすることです。これはクライアント側のソフトウェアなので、通常はできません。しかし、私たちはあなたがほとんどの場合あなたが望むものを達成する解決策を考え出すことができます。ブラウザがRAMに保存する内容を完全に制御することはできませんが、これは実際には問題ではないことに注意してください。 RAM=を侵害できる攻撃者は、キーストロークを記録することもできます。
送信イベントが発生しないようにする
ほとんどのブラウザは、特別なボタン(_type="submit"
_)をクリックするため、フォームを送信するときに通知します。これにより、おそらく「このサイトのパスワードを保存しますか?」というプロンプトが表示されます。これを防ぐには、これを自分で実装します。 _type="submit"
_を設定せずに、ボタン<button onclick="performLogin()"
を作成します。このボタンをクリックすると、入力フィールドの値が取得され、サイトへのHTTP-POSTリクエストでラップされます。ログインが成功した場合は、セッションキーを返し、それをCookieまたは要件に適したものに書き込みます。このアプローチを使用すると、実際の「送信イベント」をトリガーすることはなく、ユーザーにパスワードの保存を要求しないクリックイベントのみをトリガーします。
キャッシュの問題はよりトリッキーであり、私は恐れています。ブラウザーはランダムなWebサイトがRAMをどのように構成するかを指示できないため、これに対する一貫性のある信頼できるソリューションはありません。しかし、それを無視すると大きな欠点は見えません。上記のように、任意のRAM=を読み取ることができる悪意のあるコードは、おそらく(常にではありません)キーストロークを記録し、パスワードを危険にさらすことができます。これは、回避しようとしていることです。
PS:セキュリティ対策や認証メカニズムを自分で実装するときは、常に注意してください。ゴトゥグルが正しく言ったように、「独自のセキュリティソリューションの実装には落とし穴があるかもしれません」。私はこれを「適切に処理されない場合、予期せぬさまざまな方法であなたをねじ込むことができる落とし穴が絶対にある」に増やします。
Jsで独自の入力フィールドを作成できます。キーストロークをキャプチャし、ダミーの入力ボックスにアスタリスクを入力します。パスワードをローカルでハッシュし(サーバーから提供されたソルトを使用)、このハッシュをサーバーに送信して、任意の方法(非表示フィールド、ajax、websocket)で確認できます。
ストリーミングハッシュを実装することもできます。これにより、パスワードがメモリ全体に保存されることはありません。
もちろん、専用の攻撃者がコードをリバースエンジニアリングする可能性がありますが、それでもメモリダンプからパスワードを取得することは非常に困難です。
警告の言葉:独自のセキュリティソリューションの実装には落とし穴があるかもしれません。