逐页强制SSL(https)

时间:2010-09-09 23:35:08

标签: c# asp.net

如何在我的代码中设置我的页面加载事件以重定向到具有https前缀的URL?我需要它来处理附加了查询字符串的网址。

构建直接连接到https页面的链接是一回事,但我不希望用户能够手动将其更改为http页面。

此外,我不想使用javascript,因为它可能已关闭。

我猜一个正则表达式?

5 个答案:

答案 0 :(得分:2)

在Page_Load

的顶部添加此项
if (Request.ServerVariables["HTTPS"] != "ON")
{
    Response.Redirect("https://" + Request["HTTP_HOST"] + Request.RawUrl);
}

答案 1 :(得分:2)

我们使用特殊属性ForceSslAttribute标记我们的SSL必需页面。然后我们有一个HttpModule来拉下当前页面的类并检查它的属性。

如果页面上存在该属性,则会获取传递的确切网址,并将协议从http更改为https,然后调用重定向。

可能有一些更简单的方法,但这就是为我们做的。

属性:

[AttributeUsage(AttributeTargets.Class, AllowMultiple=false, Inherited=true)]
public sealed class ForceSslAttribute : Attribute
{
    // Marker Attribute
}

页面示例(CodeBehind):

[ForceSsl]
public partial class User_Login : Page
{
    //...
}

你可以像这样找出页面的类型:

HttpContext.Current.CurrentHandler.GetType()

所有Page的实施IHttpHandler,当您访问某个网页时,它都会有效。

关于这种方法的一个很酷的部分是你可以标记任何IHttpHandler并且它也会强制重定向:)

答案 2 :(得分:1)

我在Global.asax Application_BeginRequest

中使用以下内容
If needsSSL <> Request.IsSecureConnection Then
    If needsSSL Then
        Response.Redirect(Uri.UriSchemeHttps + Uri.SchemeDelimiter + Request.Url.Host +  Request.Url.PathAndQuery, True)
    Else
        Response.Redirect(Uri.UriSchemeHttp + Uri.SchemeDelimiter + Request.Url.Host + Request.Url.PathAndQuery, True)
    End If
End If

答案 3 :(得分:0)

URL rewriting有一个IIS7模块。非常方便,但您需要访问IIS,并且需要一些时间来学习如何编写规则。一个简单的http-&gt; https规则只需几秒钟。

请注意,因为您添加的任何规则都将存储在您的web.config中,因此请勿删除/覆盖它,否则您将不得不再次编写它们。

答案 4 :(得分:0)

使用ASP强制SSL 要使用ASP强制SSL,请按照下列步骤操作:

Click Start, click Run, type Notepad, and then click OK.
Paste the following code into a blank Notepad document. On the File menu, click Save As, and then save the following code in the root of your Web server as an include file named ForceSSL.inc:

<%
   If Request.ServerVariables("SERVER_PORT")=80 Then
      Dim strSecureURL
      strSecureURL = "https://"
      strSecureURL = strSecureURL & Request.ServerVariables("SERVER_NAME")
      strSecureURL = strSecureURL & Request.ServerVariables("URL")
      Response.Redirect strSecureURL
   End If
%>


For each page that requires SSL, paste the following code at the top of the page to reference the include file from the previous step:

<%@Language="VBSCRIPT"%>
<!--#include virtual="/ForceSSL.inc"-->


When each page is browsed, the ASP code that is contained in the include file detects the port to determine if HTTP is used. If HTTP is used, the browser will be redirected to the same page by using HTTPS.