Series bảo mật trong ASP.NET MVC - 2: Cross-Site Request Forgery (CSRF) Bảo mật


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. Cho phép kẻ tấn công giả mạo thông tin user để thực hiện các hành vi ngoài mong muốn.

Hãy xem ví dụ sau.

  • Người dùng đăng nhập vào tài khoản ngân hàng
  • Ngân hàng cấp quyền và một session bảo mật được khởi tạo giữa user và hệ thống ngân hàng.
  • Hacker gửi một email với link nói rằng bạn có thể kiếm 1.000.000 USD ngay bây giờ.
  • Người dùng click vào link nguy hiểm trên, site sẽ chuyển tiền từ account của bạn về tài khoản của hacker. Bởi vì sesion đó được khởi tạo và các đoạn mã đọc sẽ thực thi thành công.

https://www.codeproject.com/KB/aspnet/1116318/Fig12.jpg

Microsoft đã biết vấn đề này và để ngăn chặn nó bạn chỉ cần gọi AntiForgeryToken.

Giải pháp:-

 Chúng ta cần thêm @Html.AntiForgeryToken() vào trong thẻ form. Và các Action Method nhân jcacs request Post này cần phải đặt attribute [ValidateAntiForgeryToken] để kiểm tra nếu token là hợp lệ.

Thêm [AntiForgeryToken] vào View

https://www.codeproject.com/KB/aspnet/1116318/Fig13.jpg

Hình 2. Adding AntiForgeryToken on View.

Adding [ValidateAntiForgeryToken] Attribute to HttpPost[HttpPost] Method.

https://www.codeproject.com/KB/aspnet/1116318/Fig14.jpg

Hình 3. Thêm ValidateAntiForgeryToken vào phương thức [HttpPost]

Cơ chế của AntiForgeryToken

Khi chúng ta thêm AntiForgeryToken vào View sẽ tạo ra một hidden field và gán một token duy nhất vào trong khi một session cookie được gửi về trình duyệt.

Khi chúng ta gửi request POST lên nó sẽ kiểm tra token hidden field có tên __RequestVerificationToken có tồn tại hay không. Nếu cookie hoặc hidden field __RequestVerificationToken bị thiếu, hoặc giá trị khống đúng. ASP.NET MVC sẽ không xử lý requesst này. Việc này ngăn chặn việc tấn công giả mạo.

RequestVerificationTokenon View.

https://www.codeproject.com/KB/aspnet/1116318/Fig15.jpg

Hình 4. RequestVerificationToken sẽ được tạo ra trong form.

RequestVerificationToken Cookie.

https://www.codeproject.com/KB/aspnet/1116318/Fig16.jpg

Hình 5. RequestVerificationToken được tạo ra trong cookie.



Trích nguồn từ: (codeproject.com)