我正在开发一个网站,我需要阻止直接链接到几个pdf文件。我正在使用ASP.net 2.0。代码中有一种简单的方法可以做到这一点吗?还是一些简单的IIS设置?
现在我只是使用标准锚标签链接到文件。我可以在包含锚标记的页面上验证用户,但仍然不会阻止用户抓住网址并将其传递给其他人。
答案 0 :(得分:3)
创建一个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>
答案 1 :(得分:2)
我过去通过使用文件获取器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地址和时间比较可能会让你向实际的犯罪者展示正确的内容,但是对他的任何网站访问者来说都是错误的内容......邪恶而美味。
答案 2 :(得分:1)
将文件放在App_Data文件夹中,并使用HttpHandler提供它们。在处理程序内,您可以检查Session.IsNewSession属性以查看请求是否来自您的网站之外。但是你可能也希望在处理程序中包含某种身份验证和验证。
答案 3 :(得分:0)
将PDF文件放在目录中。使用.htaccess和or robots.text。