Нужен URL, чтобы быть не безопасными при отодвигании от безопасного канала (без hardcoded URL в HTML)?

У меня есть сайт asp.net. Это имеет бланк заявки, который доступен в https://secure.example.com/order.aspx. Ссылки на сайт не включают доменное имя. Таким образом, например, домашняя страница является 'default.aspx'.

Проблема - то, что, если я нажимаю на ссылку как домашняя страница от защищенной страницы, URL становится https://secure.example.com/default.aspx вместо http://www.example.com/default.aspx.

Что хороший путь состоит в том, чтобы обработать это? Схема должна автоматически работать с помощью любого доменного имени на основе того, откуда это запускается. Таким образом, если сайт запускается от 'localhost', переезжающего от защищенной страницы, URL должен быть http://localhost/...

Навигационные ссылки находятся на основной странице.

1
задан Tony_Henrich 25 April 2010 в 17:57
поделиться

1 ответ

Думаю, лучшим решением для этого будет http-модуль.

Самая простая реализация приведена ниже. Переменная useUnsecureConnection содержит значение, указывающее, требуется ли отойти (должно быть рассчитано самостоятельно).

public class SecurityModule : IHttpModule
{
    #region IHttpModule Members
    public void Dispose()
    {
    }

    public void Init(HttpApplication application)
    {
        application.BeginRequest += new EventHandler(application_BeginRequest);
    }
    #endregion

    #region Events Handling
    protected void application_BeginRequest(object sender, EventArgs e)
    {
        HttpApplication application = ((HttpApplication)(sender));
        HttpRequest request = application.Request;
        HttpResponse response = application.Response;

        // here should be you condition to determine
        // whether to move away from secure page or not
        bool useUnsecureConnection = true;
        if (useUnsecureConnection && request.IsSecureConnection)
        {
            string absoluteUri = request.Url.AbsoluteUri;
            response.Redirect(absoluteUri.Replace("https://", "http://"), true);
        }
    }
    #endregion
}

И, конечно же, не забудьте зарегистрировать модуль в своем web.config:

        <httpModules>
                <!--Used to redirect secure connections to the unsecure ones
                    if necessary-->
                <add name="Security"
                     type="{YourNamespace}.Handlers.SecurityModule,
                     {YourAssembly}" />
                ...
        </httpModules>
    </system.web>

Кстати, для localhost условие может выглядеть так:

useUnsecureConnection = request.IsLocal;

который будет истинным , если IP-адрес отправителя запроса 127.0.0.1 или если IP-адрес запроса совпадает с IP-адресом сервера.

2
ответ дан 3 September 2019 в 01:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: