ASP.NET MVC HTML5 Boilerplate - политика безопасности контента убивает все внешние скрипты, даже "белые"

Текущий проект:

  • ASP.NET 4.5.2
  • MVC 5
  • HTML5 Boilerplate
  • Google ReCaptcha (любой пакет NuGet, сделайте свой выбор, я уже пробежал три из них)

Таким образом, кажется, что все, что находится за пределами сайта, который я разрабатываю, полностью прекращается политикой безопасности контента. Да, в нижней части этой формы должна быть Google ReCaptcha. Не видишь это? Да... Это несмотря на такие вещи, как ajax.googleapis.com быть якобы "в белый список" через FilterConfig.cs,

Когда я захожу на свой сайт и пытаюсь загрузить его, я получаю ошибку консоли:

Content Security Policy: The page's settings blocked the loading of a resource at https://www.google.com/recaptcha/api.js ("script-src http://http://www.taskgenerator.ca http://localhost:* http://ajax.googleapis.com http://ajax.aspnetcdn.com").

Когда я добавлю www.google.com к CspScriptSrcAttribute() внутри FilterConfig.cs Я получаю следующую ошибку:

Content Security Policy: The page's settings blocked the loading of a resource at https://www.gstatic.com/recaptcha/api2/r20160913151359/recaptcha__en.js ("script-src http://http://www.taskgenerator.ca http://localhost:* http://www.google.com http://ajax.googleapis.com http://ajax.aspnetcdn.com").

Когда я добавлю www.gstatic.com Я получаю следующую ошибку:

Content Security Policy: The page's settings blocked the loading of a resource at https://www.google.com/recaptcha/api2/anchor?k=6LdHZB4TAAAAAMj_6F7h1ahYTNAjtHqRvWLj_FBx&co=aHR0cDovL3Rhc2tnZW5lcmF0b3IubG9jYWxob3N0Ojgw&hl=en&v=r20160913151359&size=normal&cb=lvhf93b5gk4z ("default-src 'none'").

несмотря на то, что уже в белом списке www.google.com как указано выше.

Это происходит на всем протяжении & # $!%(@ Кроличья нора. Кажется, этому нет конца. Все, чего я хочу, - это добавить на сайт глупую ReCaptcha - насколько это должно быть сложно??

Меня всерьез убеждают беспричинно оторвать шаблон HTML5 от проекта и перейти к исходному / нестандартному / стандартному, просто чтобы избежать этих труднопреодолимых критических ошибок.

Пожалуйста, скажите мне:

  1. Как отключить CSP из HTML5 Boilerplate, или
  2. Как исправить эту проблему для функции, которая уже должна быть в белом списке (Google API).

Страница HTML5 MVC Boilerplate содержит нулевые рекомендации в этом отношении.


РЕДАКТИРОВАТЬ:

Код в моем FilterConfig.cs изначально был таковым:

filters.Add(
  new CspScriptSrcAttribute() {
    CustomSources = string.Join(
      " ",
#if DEBUG
      "localhost:*",
#endif
      ContentDeliveryNetwork.Google.Domain,
      ContentDeliveryNetwork.Microsoft.Domain
    ),
    Self = true,
  });

С константами (contentdeliverynetwork.cs) в качестве таких:

public static class ContentDeliveryNetwork {
  public static class Google {
    public const string Domain = "ajax.googleapis.com";
    public const string JQueryUrl = "//ajax.googleapis.com/ajax/libs/jquery/2.2.3/jquery.min.js";
  }
  public static class MaxCdn {
    public const string Domain = "maxcdn.bootstrapcdn.com";
    public const string FontAwesomeUrl = "//maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css";
  }
  public static class Microsoft {
    public const string Domain = "ajax.aspnetcdn.com";
    public const string JQueryValidateUrl = "//ajax.aspnetcdn.com/ajax/jquery.validate/1.15.0/jquery.validate.min.js";
    public const string JQueryValidateUnobtrusiveUrl = "//ajax.aspnetcdn.com/ajax/mvc/5.2.3/jquery.validate.unobtrusive.min.js";
    public const string ModernizrUrl = "//ajax.aspnetcdn.com/ajax/modernizr/modernizr-2.8.3.js";
    public const string BootstrapUrl = "//ajax.aspnetcdn.com/ajax/bootstrap/3.3.6/bootstrap.min.js";
  }
}

И даже модификация к следующему:

filters.Add(
  new CspScriptSrcAttribute() {
    CustomSources = string.Format("google.com www.gstatic.com www.google.com localhost:* ajax.googleapis.com ajax.aspnetcdn.com"),
    Self = true,
  });

не помогает.

1 ответ

Chrome обычно говорит вам, что блокируется, как вы нашли. Вам просто нужно добавить все исключения, о которых он говорит. Тем не менее, если вы хотите отключить CSP, закомментируйте следующую строку:

public static class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        AddSearchEngineOptimizationFilters(filters);
        AddSecurityFilters(filters);
        AddContentSecurityPolicyFilters(filters); // Comment this out
    }

    // ...Omitted
}
Другие вопросы по тегам