Làm cách nào để xác định và buộc người dùng chỉ xem trang web của mình bằng HTTPS? Tôi biết nó có thể được thực hiện thông qua IIS, nhưng muốn biết làm thế nào nó thực hiện lập trình.C# Cách xác định xem HTTPS
Trả lời
Bạn có thể viết một HttpModule
như thế này:
/// <summary>
/// Used to correct non-secure requests to secure ones.
/// If the website backend requires of SSL use, the whole requests
/// should be secure.
/// </summary>
public class SecurityModule : IHttpModule
{
public void Dispose() { }
public void Init(HttpApplication application)
{
application.BeginRequest += new EventHandler(application_BeginRequest);
}
protected void application_BeginRequest(object sender, EventArgs e)
{
HttpApplication application = ((HttpApplication)(sender));
HttpRequest request = application.Request;
HttpResponse response = application.Response;
// if the secure connection is required for backend and the current
// request doesn't use SSL, redirecting the request to be secure
if ({use SSL} && !request.IsSecureConnection)
{
string absoluteUri = request.Url.AbsoluteUri;
response.Redirect(absoluteUri.Replace("http://", "https://"), true);
}
}
}
đâu {use SSL}
là một số điều kiện xem có sử dụng SSL hay không.
EDIT: và, tất nhiên, đừng quên thêm một định nghĩa module để một web.config
:
<system.web>
<httpModules>
<!--Used to redirect all the unsecure connections to the secure ones if necessary-->
<add name="Security" type="{YourNamespace}.Handlers.SecurityModule, {YourAssembly}" />
...
</httpModules>
</system.web>
Hầu hết các ứng dụng web có một trang _global.asax_ mà cũng có thể bao gồm các mã tương tự như được chỉ ra bởi Alex. Chỉ cần cung cấp trình xử lý Application_BeginRequest – Rajiv
Điều gì đã giúp tôi giải quyết vấn đề của tôi là Yêu cầu.IsSecureConnection, đảm bảo viết hoa Yêu cầu trong trường hợp này, trừ khi bạn tạo một yêu cầu có tên var như Alex đã làm. Chỉ là một thứ để ghi nhớ trong đầu. –
Có một lưu ý nhỏ về điều này: Bạn phải tắt cấu hình chế độ tích hợp trong 'system.webServer' với thuộc tính' validateIntegratedModeConfiguration' của thẻ 'validation' được đặt thành' false' (xem [câu trả lời này] (http://stackoverflow.com)/a/4210026) để biết thêm chi tiết). Ngoài ra, nếu bạn muốn sử dụng IIS Express hoặc IIS 6, bạn nên lưu ý [câu trả lời này] (http://stackoverflow.com/a/963975) –
Bài viết này đề cập đến các yêu cầu di chuyển vào và ra khỏi SSL. Đôi khi bạn không muốn người dùng xem một trang trong SSL vì nó ghi chu kỳ proc cho các trang không cần bảo mật.
http://weblogs.asp.net/kwarren/archive/2005/07/08/418541.aspx
Bạn sẽ phải chuyển đổi này từ VB.NET sang C#, nhưng đây là những gì tôi sử dụng trong các trang web của mình:
Imports System.Web.HttpContext
Public Shared Sub SetSSL(Optional ByVal bEnable As Boolean = False)
If bEnable Then
If Not Current.Request.IsSecureConnection Then
Dim strHTTPS As String = "https://www.mysite.com"
Current.Response.Clear()
Current.Response.Status = "301 Moved Permanently"
Current.Response.AddHeader("Location", strHTTPS & Current.Request.RawUrl)
Current.Response.End()
End If
Else
If Current.Request.IsSecureConnection Then
Dim strHTTP As String = "http://www.mysite.com"
Current.Response.Clear()
Current.Response.Status = "301 Moved Permanently"
Current.Response.AddHeader("Location", strHTTP & Current.Request.RawUrl)
Current.Response.End()
End If
End If
End Sub
Đó là mã nhiều hơn một số kỹ thuật khác, nhưng có lý do. Phương thức này sẽ chỉ chuyển hướng khi nó không ở trong chế độ nó nên ở. Và khi nó thực hiện chuyển hướng, nó sẽ chuyển hướng 301 (vĩnh viễn). Lợi ích ở đây là các công cụ tìm kiếm sẽ thực hiện theo chuyển hướng 301 và điều đó sẽ ngăn chặn bất kỳ khả năng nào của chúng lập chỉ mục cùng một trang hai lần (ở chế độ http và https). Bạn có thể so sánh điều này với hành vi mặc định của Response.Redirect (chuyển hướng tạm thời 302) mà Google, ví dụ, không xử lý theo cùng một cách. Họ sẽ không thay đổi chỉ mục của họ dựa trên chuyển hướng tạm thời.
Vì vậy, nếu bạn đang ở trên một trang mà bạn muốn được mã hóa SSL, hãy gọi nó như thế này:
SetSSL (True)
Nếu không:
SetSSL (False)
Và nếu bạn thực sự cần điều này để được áp dụng trên toàn cầu, tôi sẽ gọi SetSSL (True) trong Application_BeginRequest của global.asax của bạn. Hãy coi chừng rằng SSL sẽ làm chậm mọi thứ xuống một chút. Vì lý do đó, tôi thường rất chọn lọc khi chuyển đổi giữa http và https. Thực tế, trong số hàng tá trang web tôi đã phát triển, chỉ có hai trang web sử dụng SSL trên toàn bộ trang web.
IIR bạn có thể kiểm tra theo yêu cầu (HttpContext.Current.Request) cho tên miền mà sau đó bạn có thể kiểm tra những gì giao thức đang được sử dụng (http, https, ftp, vv)
Một chút cứng mã hóa nhưng straighforward!
if (!HttpContext.Current.Request.IsSecureConnection)
{
Response.Redirect("https://www.foo.com/foo/");
}
+1 một mô-đun http có vẻ như quá mức cần thiết ở đây nhưng tôi thích điều này bởi vì nó ngắn và ngọt ngào, cảm ơn. –
đơn giản, ngắn gọn và hoạt động, – dvdmn
Bạn cũng có thể thiết lập quy tắc ghi lại trong web.config dưới thẻ system.webServer
. ví dụ:
<rewrite>
<rules>
<rule name="Redirect to HTTPS" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" matchType="Pattern" pattern="^localhost(:\d+)?$" negate="true" ignoreCase="true" />
<add input="{HTTP_HOST}" matchType="Pattern" pattern="^127\.0\.0\.1(:\d+)?$" negate="true" />
<add input="{HTTPS}" pattern="off" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
</rule>
</rules>
</rewrite>
- 1. Không xác định lỗi chỉ số sử dụng $ _SERVER [ 'HTTPS']
- 2. Xác định xem Linux hoặc Windows trong C++
- 3. C++ xác định xem lớp có thể so sánh được
- 4. Làm cách nào để xác định giao thức https trong định tuyến thông số với rspec?
- 5. Xác thực IOS https
- 6. C# WebClient với https
- 7. Xác định xem ASP.Net có được đăng ký đúng cách
- 8. Cách sử dụng https trong C#?
- 9. C# cách xác định tài khoản khách?
- 10. C# xác định loại chung
- 11. Xác thực HTTPS và BASIC
- 12. Cách xác định xem chuỗi có phải là URL trong Mục tiêu-C
- 13. Mẫu C++: cách xác định xem loại có phù hợp với phân lớp
- 14. Cách xác định xem một loại có thực hiện giao diện với C# reflection
- 15. Làm cách nào để xác định xem hệ điều hành có là POSIX trong C?
- 16. Cách xác định xem một chuỗi có phải là số trong C#
- 17. C++, Cách xác định xem một tiến trình Windows có đang chạy không?
- 18. Đối tượng động - Cách xác định xem thuộc tính có được xác định không?
- 19. Xác định một cách xác định xem một số lớn là số nguyên tố hay composite?
- 20. Cách xác định xem bảng có cột nhận dạng
- 21. Cách xác định xem GraphicsEnvironment có tồn tại hay không
- 22. Cách xác định xem NSString có trống không
- 23. Cách xác định xem EXE có phải là WPF
- 24. Cách xác định xem CKEditor có được tải không?
- 25. Cách xác định xem ParameterInfo có thuộc loại chung không?
- 26. Xem tất cả biến đã xác định
- 27. POCO C++ - NET SSL - cách POST yêu cầu HTTPS
- 28. Xác định xem chuỗi C là một int hợp lệ trong C
- 29. Xác định mã chết (C++)
- 30. Xác định xem loại là điển
Như thế này: http://www.jameskovacs.com/blog/HowToAutoRedirectToASSLsecuredSiteInIIS.aspx –