2010-01-16 78 views
1

我有一個asp.net應用程序,在一個頁面中顯示一個模型圖像,如果你用右鍵單擊圖像並查看圖像它顯示的路徑使用圖像ID存儲它,所以人們可以看到其他圖像也如何避免這種情況。在asp.net應用程序中的圖像保護

+0

請學會正確使用標籤。標籤是一種查找機制 - 快速搜索。沒有人會點擊「in」來找到你的問題。 – 2010-01-16 14:16:22

回答

0

總之:你不能。您的客戶端瀏覽器需要知道該映像位於何處,因此可以下載並呈現它。

但您有一個選擇:您可以將該圖像放入只有經過身份驗證的用戶才能訪問的文件夾中。所以,你需要在你的網站上建立這個功能。並不難:Introduction to Membership

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); 
    } 
} 

一些示例代碼,您應該能夠適應它加載從磁盤上的文件。

0

這聽起來像你後圖片盜鏈保護,也被稱爲inline-linking或深層鏈接等

實現這一目標的一般方法通常是寫自己的HTTP模塊(或HTTP處理程序),它有效地攔截請求/響應流水線,並且當需要向瀏覽器顯示圖像時,HTTP處理程序/模塊通常逐字節地將圖像文件內容輸出到從web服務器發送的響應流到客戶端網頁瀏覽器。

試試以下資源:

Stopping hot-linking with IIS and ASP.NET

ASP.Net HTTP Module to Prevent Deep Linking