我正在一个网站上工作,我需要防止直接链接到几个pdf文件。我正在使用ASP.net 2.0。代码中有一个简单的方法来做到这一点?或一些简单的IIS设置?我如何防止直接链接到几个pdf文件?
现在我只是使用一个标准的锚标记链接到文件。我可以在包含锚标记的页面上验证用户,但仍然不会阻止用户抓取网址并将其传递给其他人。
我正在一个网站上工作,我需要防止直接链接到几个pdf文件。我正在使用ASP.net 2.0。代码中有一个简单的方法来做到这一点?或一些简单的IIS设置?我如何防止直接链接到几个pdf文件?
现在我只是使用一个标准的锚标记链接到文件。我可以在包含锚标记的页面上验证用户,但仍然不会阻止用户抓取网址并将其传递给其他人。
我已经解决了这个问题,通过使用file-fetcher asp页面并使用头中正确的内容类型来流式传输所需文件的字节。大致为:
创建页面fetchfile.aspx
样品网址:yoursite/fetchfile.aspx N = pdfname.pdf
在fetchfile:
- Verify user is permitted to access file.
- Check chosen directory for presence of file from query string.
- Set content-type appropriately for file type.
- Open the file and stream all bytes of it to the client.
- Close the file and end the response.
除了文件的字节之外,不要在响应中发送任何内容。如果发生错误,请将内容类型集正确地重定向或返回错误html。
我最后一次做这个时,我提供了图像,所以我找到了一个合适的免费图书馆,并将我的错误消息写入一个新的自定义图像,然后可以显示。为了好玩,你可以使用这种技术就可以提供的内容是意想不到的,当有人通过热联这样偷你的带宽:
创建不必要的引用名称的黑名单,在数据库表或文本文件。
当文件请求进入时,如果用户不被允许,检查引用者是否在黑名单中,如果没有,则让文件被读取。
定期检查参考页面并决定合适的pdf返回来惩罚该网站。
将您想要返回到您的黑名单中的内容添加到每个推荐人,以及当推荐人IS位于黑名单中时,然后返回备用内容。
这是让人们真的不太可能偷走你的东西的好方法。他们的体验如下:
他们发现一些他们想要“借”的好内容。
他们发布在他们的网站上,它工作得很好。
第二天你看到他们的动作并将它们添加到黑名单表中,但是让所有尝试获取内容的人都可以获得某种好消息:“example.com正在窃取来自所有者的此内容在somecoolsite.com。请让他们知道你对他们的行为感到不满。“
你有一个良好的笑。
如果被盗的内容,这可能特别美妙的图像。糗事嘉豪在等着带宽小偷!
一些额外的巧妙IP -address和时间比较可能会使得可以显示正确的内容,以实际行为人,但错误的内容,他的任何网站访问者...邪恶和美味的。
将PDF文件放入目录。使用.htaccess和或robots.text。
将文件放在您的App_Data文件夹中,并为他们提供服务我们一个HttpHandler。在处理程序中,您可以检查Session.IsNewSession属性以查看请求是否来自网站外部。但是你可能想要在处理程序中包含某种认证和验证。
创建一个HttpHandler来处理.pdf的所有请求。由于ASP.Net并不处理PDF文件,HttpHandler将干预并且web.config告诉IIS这样做。
守则
namespace YourNameSpace
{
public class HttpHandlerClassName: IHttpHandler
{
public bool IsReusable
{
//We dont want this class to be reused simply
//because we dont want other requests to wait and lie pending
//suggests that an instance of this class cannot
//be reused to serve more than one request.
get { return false; }
}
public void ProcessRequest(HttpContext context)
{
string MyReferrer = context.Request.UrlReferrer.ToString();
//do some regex to determine if the request is originating from
//your site.
//Put logic for the behavior your want for the outcome of your
//RegEx match here
}
}
}
的web.config
<system.web>
<httpHandlers>
<add verb="*" path="*.pdf" type="YourNameSpace.HttpHandlerClassName,YourAssemblyName"/>
</httpHandlers>
</system.web>
是的,这是另一种做法! – ErikE 2010-09-22 16:07:44
这是**正确**的方式来做到这一点。使用aspx页面是一个沉重的过程,因为它贯穿整个页面生命周期。 – 2011-12-11 08:04:41
是否与ASP.NET/IIS工作? – 2010-09-22 02:24:49
robots.txt适合表现良好的服务,任何滥用行为都会忽略它。 – annakata 2010-09-22 08:03:57
Annakata - true。 – Moshe 2010-09-22 14:01:39