回答
我已经产生,为了防止盗链以下的HttpHandler。
它似乎在我的项目上工作,但我不肯定知道这是不是最好的做法。
public void ProcessRequest(HttpContext context)
{
//write your handler implementation here.
//Http
HttpRequest request = context.Request;
HttpResponse response = context.Response;
//Header - Properites
int Index = -1;
string[] Keys = request.Headers.AllKeys;
List<string[]> Values = new List<string[]>();
//Header - Loop to get key values
for (int i = 0; i < Keys.Length; i++)
{
Values.Add(request.Headers.GetValues(i));
//Check if property "Accept" exists
if (Keys[i].CompareTo("Accept") == 0)
Index = i;
}
//Check if URL and URL Referrer are null
if (context.Request.Url != null && context.Request.UrlReferrer != null && Index >= 0)
{
//Check image types
if (!context.Request.UrlReferrer.AbsolutePath.EndsWith(".bmp") ||
!context.Request.UrlReferrer.AbsolutePath.EndsWith(".jpg") ||
!context.Request.UrlReferrer.AbsolutePath.EndsWith(".jpeg") ||
!context.Request.UrlReferrer.AbsolutePath.EndsWith(".png"))
{
//Check header "Accept"
if (Values[Index][0].CompareTo("*/*") == 0)
{
//Get bytes from file
byte[] MyBytes = File.ReadAllBytes(context.Request.PhysicalPath);
//new HttpContext(context.Request, context.Response).Request.MapPath(context.Request.RawUrl).ToString()
context.Response.OutputStream.Write(MyBytes, 0, MyBytes.Length);
context.Response.Flush();
}
else
//Redirect
context.Response.Redirect("/Home");
}
else
//Redirect
context.Response.Redirect("/Home");
}
else
//Redirect
context.Response.Redirect("/Home");
}
另外,的Web.config修改如下:
<system.webServer>
<handlers>
<!--My-->
<add name="PhotoHandler-BMP" path="*.bmp" verb="GET" type="MVCWebApplication.Handlers.PhotoHandler" resourceType="File" />
<add name="PhotoHandler-JPG" path="*.jpg" verb="GET" type="MVCWebApplication.Handlers.PhotoHandler" resourceType="File" />
<add name="PhotoHandler-JPEG" path="*.jpeg" verb="GET" type="MVCWebApplication.Handlers.PhotoHandler" resourceType="File" />
<add name="PhotoHandler-PNG" path="*.png" verb="GET" type="MVCWebApplication.Handlers.PhotoHandler" resourceType="File" />
</handlers>
</system.webServer>
随意在任何改进意见。
使用的认证系统,如ASP .NET Membership,需要一定的凭据来访问内容。除此之外,真的没有办法。如果用户具有直接链接并访问您网站的该区域,则根据Web服务器的工作原理,无法阻止它。
有您可以采取有助于防止用户获得一个直接的联系,虽然,一个简单的人会被禁用右键单击某个安全措施。
我正在研究有关HttpHandlers,RouteHandlers和Web.config的解决方案。如下所示: [HttpHandler] ) [Web.config](http://www.c-sharpcorner.com/forums/thread/136467/how-to-prevent-direct-access-to-files-and-folders-in-asp-net。 aspx) – JEPAAB
您可以使用任何喜欢的路由,但路由仍将直接指向相关文件。如果用户具有该路线以及访问该位置,则他们将能够直接浏览它。你可以尝试和实现一些奇特的东西,比如身份验证和用户特定的文件被复制到一个临时的,唯一命名的位置,在一段时间后被删除;然而,这通常是针对下载服务器等非常具体的修复方式,它可能不适用于站点图像。 – Middas
除非您想要误导用户,否则您几乎无法做到。一种可能的(并且被广泛使用的)事情可能是检查你的引用者(并使其在应用程序中),但这很容易被欺骗。
如果对此的安全性至关重要,唯一需要考虑的是通过脚本下载所有内容以检查凭据(或者您可能需要的任何其他安全措施),但没有其他可以做的事情了。
如果浏览器确实已经下载了某些东西到本地机器上,那么绝对没有办法阻止该用户使用该数据(您可以设置一些障碍,如避免右键单击等,但所有这些都可以以某种方式避免)。
我正在研究有关HttpHandlers,RouteHandlers和Web.config的解决方案。如下所示: [HttpHandler] ) [Web.config](http://www.c-sharpcorner.com/forums/thread/136467/how-to-prevent-direct-access-to-files-and-folders-in-asp-net。 aspx) – JEPAAB
- 将您在一个非web访问的文件夹图像。
- 创建可读取图像文件并在HTTP响应中返回其内容的服务器端脚本(例如HttpHandler)。
- 在该脚本中,执行用户验证以确保用户有权访问该文件。
- 在HTML中,将
img
标记的src
属性指向您的脚本。
用户仍然可以直接输入脚本的URL来查看图像。但是您至少可以要求用户登录您的网站并有权查看图像。
- 1. 如何防止直接访问URL?
- 2. 如何防止直接访问文件?
- 3. 如何防止直接访问图像?
- 4. 防止直接访问PHP
- 5. 防止通过url直接访问fancybox iframe内容
- 6. 如何防止非会员直接访问私人内容与PHP
- 7. 防止直接加载Ajax内容
- 8. 如何按节点号阻止直接内容访问?
- 9. 防止直接访问JSON Web服务
- 10. 防止直接访问PDF文件 - Nginx
- 11. 防止直接访问网址
- 12. 防止图像直接访问
- 13. 防止直接访问数据库
- 14. 防止直接访问URL的文件?
- 15. spring mvc防止直接访问方法
- 16. 防止直接访问.htaccess文件
- 17. PHP:防止直接访问页面
- 18. 防止通过.htaccess直接访问robots.txt
- 19. 防止直接访问.htaccess文件
- 20. 防止直接访问php文件
- 21. 如何防止某人直接访问页面链接?
- 22. .htaccess防止ajax请求的直接访问防止技术
- 23. 如何防止用户直接访问我的html页面
- 24. 如何防止直接访问iframe页面
- 25. 如何防止对操作类的直接URL访问
- 26. 如何防止CSS和JS直接访问文件
- 27. Glassfish的如何防止HTML文件直接访问
- 28. 如何防止从jsp页面的url直接访问页面
- 29. PHP:如何防止直接访问JavaScript文件?
- 30. 如何防止JavaScript盗链和直接访问?
你的意思[目录浏览](http://technet.microsoft.com/en-us/library/cc731109(V = ws.10)的.aspx)? – Silvermind
你可以发布你正在使用什么Web服务器?只是一个建议,你的Web服务器已经不安全,因为每个人都可以通过使用图像链接访问它。 –
我目前在当地工作。我需要通过输入链接来阻止用户访问图像。 – JEPAAB