Безопасность HTTPS скомпрометирована клиентской средой ASP.NET Ajax - PullRequest
0 голосов
/ 18 марта 2019

У меня есть ScriptManager на моей ASP.NET веб-странице ASP.NET.

Если я использую следующее

<asp:ScriptManager EnablePartialRendering="true" AsyncPostBackTimeOut="300"
        ID="ScriptManager1" runat="server" />

Я вижу следующие ошибки в браузере

Uncaught Ошибка: клиентская структура ASP.NET Ajax не удалось загрузить. Uncaught ReferenceError: Sys не определен

когда я добавляю EnableCdn="true", я получаю предупреждение о смешанном контенте, который гласит

Безопасность HTTPS нарушена http://ajax.aspnetcdn.com/ajax/4.6/1/WebForms.js ... и http://ajax.aspnetcdn.com/ajax/4.6/1/MicrosoftAjax.debug.js

Конечно, если я форсирую загрузку, это в конце концов сработает, но это очень далеко от идеала.

Я также не понимаю, как возникла проблема при портировании с Windows Server 2012 на Windows Server 2016 с соответствующими версиями IIS 8 и 10. Видимо, на исходном сервере тот же код работает нормально - даже без EnableCdn="true" - и все эти запросы обрабатываются в https, как и ожидалось.

После принятого решения

Почти все прошло хорошо. Я добавил следующие строки внутри Global.asax.cs:

    protected void Application_Start(object sender, EventArgs e)
    {
        //....
        var defAjaxForms = new ScriptResourceDefinition();
        defAjaxForms.CdnPath = "https://ajax.aspnetcdn.com/ajax/4.6/1/MicrosoftAjaxWebForms.debug.js";
        defAjaxForms.CdnDebugPath = "https://ajax.aspnetcdn.com/ajax/4.6/1/MicrosoftAjaxWebForms.debug.js";
        defAjaxForms.CdnSupportsSecureConnection = true;
        defAjaxForms.Path = "~/Scripts/WebForms/MicrosoftAjaxWebForms.debug.js";//local resource
        defAjaxForms.DebugPath = "~/Scripts/WebForms/MicrosoftAjaxWebForms.debug.js";
        ScriptManager.ScriptResourceMapping.AddDefinition("MicrosoftAjaxWebForms.js", defAjaxForms);
        var defAjax = new ScriptResourceDefinition();
        defAjax.CdnPath = "https://ajax.aspnetcdn.com/ajax/4.6/1/MicrosoftAjax.js";
        defAjax.CdnDebugPath = "https://ajax.aspnetcdn.com/ajax/4.6/1/MicrosoftAjax.js";
        defAjax.CdnSupportsSecureConnection = true;
        defAjax.Path = "~/Scripts/WebForms/MicrosoftAjax.js";//local resource
        defAjax.DebugPath = "~/Scripts/WebForms/MicrosoftAjax.js";
        defAjax.LoadSuccessExpression = "window.Sys && Sys._Application && Sys.Observer";
        ScriptManager.ScriptResourceMapping.AddDefinition("MicrosoftAjax.js", defAjax);
        var defForms = new ScriptResourceDefinition();
        defForms.CdnPath = "https://ajax.aspnetcdn.com/ajax/4.6/1/WebForms.js";
        defForms.CdnDebugPath = "https://ajax.aspnetcdn.com/ajax/4.6/1/WebForms.js";
        defForms.CdnSupportsSecureConnection = true;
        defForms.Path = "~/Scripts/WebForms/WebForms.js";
        defForms.DebugPath = "~/Scripts/WebForms/WebForms.js";
        defForms.LoadSuccessExpression = "window.Sys && Sys._Application && Sys.Observer";
        ScriptManager.ScriptResourceMapping.AddDefinition("WebForms.js", defForms);
    }

Единственное, что все еще нокаутирует это WebForms.js: я все еще получаю

... был загружен через HTTPS, но запросил небезопасный скрипт http://ajax.aspnetcdn.com/ajax/4.6/1/WebForms.js'. Этот запрос был заблокирован; содержимое должно быть передано по протоколу HTTPS.

Окончательное решение

Наконец, я применил этот ответ (обратите внимание, что они определяют ResourceName и ResourceAssembly вместо Path и DebugPath) со всеми http://, замененными на https://

1 Ответ

0 голосов
/ 18 марта 2019

Вы можете настроить отображение ScriptManager в Code Behind. Что-то вроде этого. Page_PreRender это хорошее место для этого.

Dim def As New ScriptResourceDefinition()
def.CdnPath = "https://ajax.aspnetcdn.com/ajax/4.0/1/MicrosoftAjax.js"
def.CdnDebugPath = "https://ajax.aspnetcdn.com/ajax/4.0/1/MicrosoftAjax.js"
def.CdnSupportsSecureConnection = True
def.Path = "~/js/lib/MicrosoftAjax.js" ''//local resource
def.DebugPath = "~/js/lib/MicrosoftAjax.js"
def.LoadSuccessExpression = "window.Sys && Sys._Application && Sys.Observer"
ScriptManager.ScriptResourceMapping.AddDefinition("MicrosoftAjax.js", def)
...