远离安全链接时需要网址不安全(html中没有硬编码网址)?

时间:2010-04-25 17:57:18

标签: asp.net html web

我有一个asp.net网站。它有一个订单表格,可在https://secure.example.com/order.aspx访问。网站上的链接不包含域名。例如,主页是'default.aspx'。

问题是,如果我从安全页面点击主页之类的链接,则网址将变为https://secure.example.com/default.aspx而不是http://www.example.com/default.aspx

处理这个问题的好方法是什么?该方案应根据其启动位置自动使用任何域名。因此,如果网站是从“localhost”启动的,那么远离安全页面,网址应为http://localhost/ ...

导航链接位于母版页中。

1 个答案:

答案 0 :(得分:2)

我认为最好的解决方案是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>

BTW,对于localhost,条件可能如下:

useUnsecureConnection = request.IsLocal;

如果请求发起方的IP地址为true,或者请求的IP地址与服务器的IP地址相同,则为127.0.0.1