禁止从外部访问asp.net Web应用程序的静态资源

时间:2014-01-17 10:15:10

标签: asp.net-mvc

我有一个asp.net应用程序,其URL为“mysite.com”,我有一个子域“static.mysite.com”,它托管静态资源(图像,css和js文件)。

我希望这些资源只能从“mysite.com”和“static.mysite.com”访问。我的意思是其他人不应该从他/她的网站上反馈我的资源。

怎么可能?

问候。

1 个答案:

答案 0 :(得分:1)

如果您有权访问服务器IIS,最简单的方法是在IIS中为未知请求设置过滤器。但是当你使用asp.net MVC和.net 4或更高版本(?)(可以在.net 4及更高版本中请求静态文件)时,你可以通过在asp.net MVC中启用CORS来实现:

public static void Register(HttpConfiguration config)
        {
            config.EnableCors();

            config.Routes.MapHttpRoute(
                 "DefaultName",
                 "{controller}/{id}",
                new { id = RouteParameter.Optional }
            );
        }

EnableCORS为您提供跨所有类型请求的原点,例如:

[EnableCors(origins: "http://www.Domain.com", headers: "*", methods: "*")]

所以,如果你想禁止所有未知的资源访问,你可以通过定义来源拒绝所有请求:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false)]
public class MyCorsPolicyAttribute : Attribute, ICorsPolicyProvider 
{
    private CorsPolicy _policy;

    public MyCorsPolicyAttribute()
    {
        // Create a CORS policy.
        _policy = new CorsPolicy
        {
            AllowAnyMethod = true,
            AllowAnyHeader = true
        };

        // Add allowed origins.
        _policy.Origins.Add("http://subdomain.domain.com");
        _policy.Origins.Add("http://www.domain.com");
    }

    public Task<CorsPolicy> GetCorsPolicyAsync(HttpRequestMessage request)
    {
        return Task.FromResult(_policy);
    }
}

请参阅文章,因为我在解决问题时使用了它:

http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api