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.

Lên trên