我的网站上有一个comerce css。我使用IIS和供应商说其他人可以使用我的css字体,因为他们知道网址。是否可以设置服务器或其他东西,只有我的网站可以使用它?这是关于cufon
答案 0 :(得分:2)
你可以做的事情:
UserControl
,它可以在任何地方放置一个位图,所以这实际上并没有那么多工作要做或维护。但它确实增加了页面的带宽要求。它还会强制您手动执行一些通常由浏览器处理的布局,这可能会增加大量维护成本或最低维护成本,具体取决于站点布局的工作方式。与#2一样,它可能会对用户的浏览体验产生负面影响。它也会伤害可访问性,但并非荒谬,因为您的UserControl
可能会使用替代文字来复制文本。我强烈推荐#1。
答案 1 :(得分:2)
如果您使用的是IIS7或更高版本,则可以在不编写任何自定义代码的情况下执行Referer检查,只需在讨论的here庄园中使用IIS URL Rewrite。然而,仅作为Referer检查,它有其他答案中讨论的缺点。
(有关IIS URL重写的介绍,请参阅here。)
摘自第一个链接:
现在让我解释一下我们做了什么 在这个属性页面上:
- 规则的名称为“Prevent Leeching”。这必须是一个 独特的规则。
- 每个请求的URL都将匹配,因为模式为“。*”并且是a 正则表达。
- 添加了两个条件并指定了要满足的条件 (参见“逻辑分组”是“匹配 所有“)
- HTTP_REFERER与空匹配,因为它可以直接引用 图像
- HTTP_REFERER与我自己的网站http://www.contoso.com
不匹配如果满足以上两个条件 满意(显然意思是 请求来自任何其他 网站),我们只是将其重定向到 拿起一些其他可能的图像 什么就是这样。所以没有 我们甚至编写一行代码 能够防止热链接。
我可能会定制您的Rewrite配置,以便它只对您的字体URL(以及其他相关的静态资产)执行,而不是每个传入请求。
如果您没有远程桌面访问权限或只是编辑web.config
,您的重写规则可能类似于:
<rule name="block font leaching" stopProcessing="true">
<match url="myFontFile.woff" />
<conditions logicalGrouping="MatchAny">
<add input="{HTTP_REFERER}" pattern="^$" /><!-- no referrer -->
<add input="{HTTP_REFERER}" pattern="yourdomain.com" negate="true" /><!-- or not your site -->
</conditions>
<action type="AbortRequest" /><!-- block the request -->
</rule>
在此示例中,我选择完全阻止请求(通过AbortRequest
),但您也可以通过友好通知重定向到页面。
答案 2 :(得分:1)
不可靠。为了提供嵌入式字体,他们需要公众可读,并且可以通过CSS进行处理。
你可以做的是创建一个asp.net页面,或者一个带有字体文件参数的处理程序,从你网站的某个地方读取文件(APP_DATA是放置它们的好地方 - 你不能浏览到APP_DATA)并将其吐出。在脚本中,您可以检查HTTP_REFERER服务器端变量,如果它是空白的,或者来自您的站点,则为服务器提供文件,如果不是,则不是。
MSDN有how to serve up a binary file in C#的示例。您需要确保正确获取MIME类型,但请注意,这可能会破坏浏览器或代理提供的任何缓存。这也不会阻止人们通过在浏览器中输入URL并将其保存在本地来下载字体,但是如果带宽是关注点并不是真正的问题。
如果您使用的是IIS7,您可以编写一个Http模块,可以为您进行引荐来检查,Scott Hansleman很久以前就为image leeching prevention编写了一个,您可以编辑它以符合您的目的。
答案 3 :(得分:0)
您可以创建一个http处理程序来提供css文件。在自定义http处理程序中,检查request.Url.Host是否等于request.UrlReferrer.Host。如果它们不匹配,请将响应设置为404或提供空的css文件。
这是未经测试但应该接近你需要的。 你可以添加一个链接到css,如:
<link rel="Stylesheet" href="CustomCSSHandler.ashx?file=site.css" />
public class CustomCSSHandler : IHttpHandler
{
public void ProcessRequest(HttpContext ctx)
{
HttpRequest req = ctx.Request;
//Get the file from the query stirng
string file = req.QueryString["file"];
//Find the actual path
string path = ctx.Server.MapPath(file); //Might need to modify location of css
//Limit to only css files
if(Path.GetExtension(path) != ".css")
ctx.Response.End();
if (req.UrlReferrer != null && req.UrlReferrer.Host.Length > 0)
{
if (CultureInfo.InvariantCulture.CompareInfo.Compare(req.Url.Host, req.UrlReferrer.Host, CompareOptions.IgnoreCase) != 0)
{
path = ctx.Server.MapPath("~/thiswontexist.css");
}
}
//Make sure file exists
if(!File.Exists(path))
{
ctx.Response.Status = "File not found";
ctx.Response.StatusCode = 404;
ctx.Response.End();
}
ctx.Response.StatusCode = 200;
ctx.Response.ContentType = "text/css";
ctx.Response.WriteFile(path);
}
}