7 thủ thuật giúp bảo mật ứng dụng ASP.NET developer cần biết
Việc sử dụng internet và số lượng các ứng dụng Web trên internet đã tăng với cấp số nhân, lợi dụng điều này nhiều kẻ xấu vẫn đang tiếp tục dùng các thủ thuật để hack chúng. Điều này có thể vì lợi ích cá nhân hoặc chỉ là không chuyên. Mặc dù ý định của kẻ xấu là làm hại đến các tổ chức hosting hoặc người dùng là đánh cắp tài khoản. Là một nhà phát triển web chuyên nghiệp, bạn phải biết được các chiêu thức để giúp ứng dụng bảo mật hơn. Trong bài viết này mình sẽ liệt kê và giải thích 7 thủ thuật bảo mật ứng dụng web.
Đừng để người dùng của bạn trở thành nạn nhân của trò lừa đảo Click
Bạn đã bao giờ nghĩ về việc ai đó tạo iframe website của bạn trên trang của chúng? Làm cho người dùng trở thành nạn nhân? Vâng, kẻ tấn công có thể nhúng website của bạn lên website của chúng trong 1 iframe. Chúng có thể khéo léo đặt các control trong suốt trên website của bạn và thu thập các thông tin, tài khoản người dùng, và giúp chúng thực hiện các công việc không mong muốn như lấy tài khoản VISA…
Để ngăn chặn bạn sẽ sử dụng 1 kỹ thuật chặn iframe. Đoạn script dưới đây sẽ không cho phép website của bạn được nhúng trong 1 iframe. Nó có thể đặt trong master page với WebForm và Layout.cshtml với ASP.NET MVC.
<script type="text/javascript" language="javascript">
//Check if the top location is same as the current location
if (top.location.hostname != self.location.hostname) {
//If not then set the top to you current
top.location.href = self.location.href;
}
</script>
Bổ sung vào đoạn code trên, bạn đừng quên thêm header dưới đây để thông báo cho trình duyệt từ chối đưa website của bạn voà khung iframe. Điều này giúp cho các trình duyệt ngoại trừ các trình duyệt IE với phiên bản dưới 8. Header nên được thêm vào file Global.asax trong sự kiện Application_Start
protected void Application_Start(object sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader("x-frame-options", "DENY");
}
Tạo danh sách các ký tự được phép trên Request URL
Dù bạn có nhiều các kỹ thuật để thực hiện việc bảo mật trong ứng dụng, nhưng quan trọng nhất là ngăn chặn dữ liệu bẩn từ người dùng nhập vào website của bạn đầu tiên. Hầu hết các cuộc tấn công xảy ra thông qua giá trị query string từ URL. Nó là một kỹ thuật quan trọng nhất định nghĩa một thành phần chung giống HttpModule cho URL. Chúng sẽ thanh lọc toàn bộ URL với tập hợp các ký tự cho phép giống như danh sách trắng, và bỏ hết những ký tự không nằm trong danh sách này.
Điều quan trọng là bạn biết rằng danh sách đen không thực sự rõ ràng vì chúng có thể được các hacker vượt qua dễ dàng.
Encoding dữ liệu
Khi xử lý và gửi dữ liệu trong response, nó được lấy từ bên ngoài vùng chúng ta tin tưởng nên phải luôn luôn được encode. Kiểu mã hoá có thể khác nhau dựa trên việc sử dụng của dữ liệu không tin tưởng. Ví dụ thực hiện HtmlEndcode cho dữ liệu được gửi về client.
Label1.Text = Server.HtmlEncode(Request.QueryString["BadValue"]);
Encoding dữ liệu sẽ làm cho các XSS script của hacker bị vô hiệu hoá và ngăn chúng thực thi. Microsoft đã đưa ra thư viện AntiXss, chúng cung cấp các cách thức encoding tinh vi hơn bao gồm JavascriptEndcode.
Sử dụng Cookies
Là một web developer bạn nên hết sức cẩn thận khi sử dụng cookies, chúng có thể mở ra một back door cho hacker đột nhập vào ứng dụng. Hãy tuân thủ 2 quy tắc sau khi sử dụng cookie để lưu trữ thông tin:
1. Nếu website của bạn được hỗ tợ SSL? Bạn chắc rằng cookie của bạn đã được bảo mật. Điều này chỉ có sẵn khi bạn sử dụng phương thức SSL
HttpCookie cookie = new HttpCookie("MySecureCookie");
cookie.Value = "This is a PII information";
cookie.Secure = true;
2. Nếu website của bạn không được cài đặt SSL bạn phải luôn luôn mã hoá giá trị sử dụng các cơ chế mã hoá mạnh như AES 256 và lưu trữ chúng trong cookie.
Bảo mật lời gọi Service (WCF / Web Service)
Bạn đã bao giờ cung cấp 1 WCF service API thông qua basicHttpBinding? Hãy suy nghĩ lại bởi vì các dữ liệu được truyền qua sẽ ở dạng text thông thường và bất cứ kẻ xấu nào sẽ có thể bắt các request và giả lập dễ dàng. Sử dụng wsHttpBinding, dữ liệu sẽ được truyền đi dưới dạng mã hoá, giúp cho việc xâm nhập khó khăn hơn.
Mặc dù bạn đã làm rất nhiều các cơ chế bảo mật cho WCF hay Web Service, nhưng cách tốt nhất vẫn là cài đặt các dịch vụ này trên 1 hosting có SSL.
Không bao giờ triển khai với debug=”true”
Một đề xuất nghiêm túc là không bao giờ được triển khai ứng dụng của bạn lên môi trường thật với mode là debug=”true” trong web.config. Điều này sẽ có hậu quả lớn đến hiệu năng và bảo mật của ứng dụng.
Nó có thể làm rò rỉ nhiều thông tin cho kẻ tấn công ví dụ như thông tin debug stack trace trong sự kiện không được try catch khi gặp exception. Điều này sẽ là thông tin quý giá cho kẻ tấn công.
<system.web>
<compilation debug="false" targetFramework="4.0" />
</system.web>
Suy nghĩ về việc tắt ViewStateMAC?
Tắt ViewStateMAC sẽ tạo 1 kẽ hở bảo mật trong ứng dụng ASP.NET của bạn nếu bạn đang sử dụng ViewState trên trang web. Kẻ tấn công sẽ có thể chặn và đọc mã hoá 64bit và sửa chúng làm những việc xấu. Việc bật ViewStateMAC sẽ đảm bảo rằng giá trị ViewState sẽ không chỉ được mã hoá mà còn được mã hoá sử dụng một secret key.
<pages enableViewStateMac="true"></pages>
Tôi hy vọng bài viết này sẽ có ích cho các nhà phát triển, giúp cho ứng dụng của bạn bảo mật hơn và ngăn chặn khả năng tấn công tốt hơn.
Trích nguồn từ: www.codeguru.com
Bài viết liên quan
Làm việc với User Secrets trong ứng dụng ASP.NET Core
Chúng ta tìm hiểu cách làm việc với UserSecrets để quản lý các thông tin cấu hình nhạy cảm và bí mật của ứng dụng.
Đọc thêm
Tổng quan các loại thuật toán mã hoá dữ liệu
Bài viết rất hay giới thiệu về tổng quan các loại thuật toán mã hoá dữ liệu dành cho những bạn nào muốn tìm hiểu về thuật toán mã hoá.
Đọc thêm
Series bảo mật trong ASP.NET MVC - 5: Rỏ rỉ thông tin máy chủ
Các thông tin về phiên bản được sử dụng bởi một kẻ tấn công sẽ khai thác để tấn công vào hệ thống.
Đọc thêm
Series bảo mật trong ASP.NET MVC - 4: Upload các tệp tin có hại
Qua 3 bài trước chúng ta đã từng tìm hiểu về cách bảo vệ tất cả các trường nhập liệu. Nhưng chúng ta đã bỏ qua một trường chính là trường File Upload
Đọc thêm
Series bảo mật trong ASP.NET MVC - 3: Tấn công Cross-Site Scripting (XSS)
Tấn công Cross-site Scripting (XSS) là cách tấn công bằng việc đẩy các đoạn mã javascript vào hệ thống thông qua các trường nhập liệu
Đọc thêm
Series bảo mật trong ASP.NET MVC - 2: Cross-Site Request Forgery (CSRF)
Cách tấn công CSRF này gọi là giả mạo request khi chúng giả mạo một request không phải từ chính website mà hacker sẽ giả lập request để gửi các thông tin lên server mà không qua hệ thống website.
Đọc thêm
Series bảo mật trong ASP.NET MVC - 1: Cấu hình Custom Error Page
Trong loại tấn công này, tin tặc sẽ lấy dữ liệu từ form được gửi lên từ người dùng và thay đổi giá trị sau đó gửi dữ liệu đã được sửa lên server
Đọc thêm