asp.net应用程序中的图像保护

时间:2010-01-16 13:39:59

标签: asp.net security

我有asp.net应用程序,在一个页面中它显示一个模型图像如果你右键单击图像并查看图像它显示它使用图像ID存储的路径,所以人们可以看到其他图像也如何避免这种情况。

3 个答案:

答案 0 :(得分:1)

以下是using an ASHX file to retrieve DB images

的一些示例代码
<%@ webhandler language="C#" class="NWEmpPhotoHandler" %>
using System; 
using System.Web; 
using System.Data; 
using System.Data.SqlClient; 
public class NWEmpPhotoHandler : IHttpHandler 
{ 
    public bool IsReusable { get { return true; } } 

    public void ProcessRequest(HttpContext ctx) 
    { 
        string id = ctx.Request.QueryString["id"]; 

        SqlConnection con = new SqlConnection(<<INSERT CONNECTION STRING HERE>>); 
        SqlCommand cmd = new SqlCommand("SELECT Photo FROM Employees WHERE EmployeeID = @EmpID", con); 
        cmd.CommandType = CommandType.Text; 
        cmd.Parameters.Add("@EmpID", id); 

        con.Open(); 
        byte[] pict = (byte[])cmd.ExecuteScalar(); 
        con.Close(); 

        ctx.Response.ContentType = "image/bmp"; 
        ctx.Response.OutputStream.Write(pict, 78, pict.Length - 78); 
    } 
} 

您应该能够调整它以从磁盘加载文件。

答案 1 :(得分:0)

简而言之:你不能。您的客户端浏览器需要知道该图像的位置,因此可以下载和呈现它。

但您有一个选择:您可以将该图像放入只有经过身份验证的用户才能访问的文件夹中。因此,您需要在您的网站中构建该功能。不是那么难:Introduction to Membership

答案 2 :(得分:0)

听起来你正在追求的是图片热链接保护,也称为inline-linking或深层链接等。

实现此目的的一般方法通常是编写自己的HTTP模块(或HTTP处理程序),以有效拦截请求/响应管道,并且当需要向浏览器显示图像时,HTTP处理程序/模块输出通常逐字节地将图像文件内容添加到从Web服务器发送到客户端Web浏览器的响应流中。

试试这些资源:

Stopping hot-linking with IIS and ASP.NET

ASP.Net HTTP Module to Prevent Deep Linking