メインのウェブサイトにはプロフィールページがあります。プロファイル画像を「Images」フォルダに保存しますが、それは悪い考えだったと思います。そこで、ImagesフォルダーをApp_Dataに移動して、そのフォルダーへのリモートアクセスが許可されないようにしました(セキュリティとプライバシーの強化)。そのため、私のコードは、ユーザー名が渡されるgetimagesというメソッドを持つServiceImagesというサービスを呼び出すようになりました。つまり、「username」+extensionという名前の画像を返します(画像をユーザー名の名前で保存します)。ただし、リモートツールを使用して、アルファベットと数字の順列をユーザー名として使用してすべての画像をハッキングして取得し、画像を取得して保存することができます。それは確かに私が望むものではありません。少なくとも、すべてのプロフィール画像を簡単に取得できるようにしないでください。では、どうすればそのような自動化ツールへのアクセスを制限できますか?IPチェックを使用することは良い考えであり、それを行う方法はありますか?画像をデータベースに保存したくありません。このような自動化されたハッキングツールやスクリプトをブロックできる、他のエレガントな方法はありませんか?私のウェブサイトがハッキングされたというニュースを作ってほしくありません。
2 に答える
app_data、またはそのサブフォルダーに画像を配置すると、直接ブラウザーが停止するだけです。あなたが持っているのは、一種の「安全でない直接オブジェクト参照」です。したがって、間接的なオブジェクト参照に切り替える必要があります。たとえば、username.jpg ではなくプロファイル画像のファイル名に GUID を使用し、ユーザーのファイルを要求するときにユーザーを検索します。 -> マッピング テーブルからの GUID。
もちろん、これですべての GUID を通過する人が止まるわけではありませんが、かなり時間がかかります。あなたは卑劣かもしれません.IPアドレスがy分間にx回の失敗したルックアップを持っている場合、それらからのすべてのリクエストをz時間停止します。これはハンドラー内で行うのに十分簡単です.
しかし、本当に、それは価値がありますか?プロフィール写真をログインしているユーザーだけに限定したい場合を除いて、プロフィール写真を取得することはほとんどハックではありません.
IMHO: 現在のセットアップでは、許可されたユーザーのクライアント リクエストに基づいてプロファイル イメージを提供する必要があるため、IP アドレスを制限する方法はないと思います。
App_Data フォルダーは、データベース、xml データを格納するように設計されています。ユーザー画像を App_Data に保存するのは良い考えではないと思います。いつでも画像フォルダーを保持し、そのフォルダーのディレクトリ参照を無効にすることで、フォルダーの場所を保護できます。
画像名のブルートフォース/順列の組み合わせを避けるために、プロファイル画像に名前を付けるより良い方法が必要だと思います. GUIDのある種の一意のキー、またはUserNameにマップされた文字/数字のランダムな組み合わせを好み、そのキーをデータベースに保存します。これには、画像名をその一意のキーに1回変換し、それらのキーをデータベースに保存する必要があります。
どのような方法でプロファイル イメージを提供する場合でも (http パスを直接使用するか、ハンドラーを使用して動的に)、ブルート フォース メソッドを使用しても推測しにくい強力なファイル名が必要です。