0

クラスに登録されている学生の「写真名簿」を表示する Web アプリケーションを継承しました。これらの画像はさまざまな規制によって保護されているため、名簿はクラスのインストラクターのみが利用できます。画像は SQL Server データベースにバイナリ データとして保存されます。

元の設計では、学生 ID の値に基づいて画像を返す Web ハンドラー ファイル (.ashx) を介して画像が提供されていました。名簿ページは、ユーザーが自分に適したコースを選択するように制限し、画像を保護しました。

一部の管理者は、URL を変更して Web ハンドラー ファイルを直接呼び出す方法を習得しています。これを防ぎたいのですが、代わりに、ビジネス ルールに基づいてアクセスを制限する別の保護されたページに管理者を送ります。

管理ページに埋め込まれたリクエストにのみ応答するように Web ハンドラー/Web サービスをロックダウンするには、どのようなオプションがありますか? ユーザーがハンドラーを直接呼び出せないようにするにはどうすればよいですか?

4

1 に答える 1

0

このように、ハンドラー内で認証/承認ロジックを実行できます。

たとえば、次のコードは、ユーザーがログインしていない場合に 404 エラーを表示します。

public class ImageHandler : IHttpHandler, IRequiresSessionState 
{
    // 1x1 transparent GIF
    private readonly byte[] GifData =
    {
        0x47, 0x49, 0x46, 0x38, 0x39, 0x61,
        0x01, 0x00, 0x01, 0x00, 0x80, 0xff,
        0x00, 0xff, 0xff, 0xff, 0x00, 0x00,
        0x00, 0x2c, 0x00, 0x00, 0x00, 0x00,
        0x01, 0x00, 0x01, 0x00, 0x00, 0x02,
        0x02, 0x44, 0x01, 0x00, 0x3b
    };

    public void ProcessRequest(HttpContext context)
    {
        //if (context.User.IsInRole("Administrators"))
        if (context.User.Identity.IsAuthenticated)
        {
            context.Response.ContentType = "image/gif";
            context.Response.Buffer = false;
            context.Response.OutputStream.Write(GifData, 0, GifData.Length);
        }
        else
        {
            context.Response.Write("File not found.");
            context.Response.StatusCode = 404;
        }
    }

    public bool IsReusable
    {
        get { return false; }
    }
}
于 2013-10-16T19:45:16.100 に答える