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 от проекта и перейти к исходному / нестандартному / стандартному, просто чтобы избежать этих труднопреодолимых критических ошибок.
Пожалуйста, скажите мне:
- Как отключить CSP из HTML5 Boilerplate, или
- Как исправить эту проблему для функции, которая уже должна быть в белом списке (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
}