Microsoft cung cấp cho chúng tôi chức năng tích hợp mà chúng tôi sử dụng trong ứng dụng của mình cho mục đích bảo mật, vì vậy không ai có thể hack trang web của chúng tôi hoặc xâm chiếm một số thông tin quan trọng.
Sử dụng ValidateAntiForgeryToken
Hãy thử với một ví dụ đơn giản để hiểu khái niệm này. Tôi không muốn làm cho nó quá phức tạp, đó là lý do tại sao tôi sẽ sử dụng một mẫu của một ứng dụng MVC, đã có sẵn trong Visual Studio. Chúng tôi sẽ làm điều này từng bước. Hãy bắt đầu.
Bước 1 - Tạo hai ứng dụng MVC với mẫu internet mặc định và đặt các tên đó lần lượt là CrossSite_RequestForgery và Attack_Application.
Bây giờ, hãy mở Cấu hình Web của ứng dụng CrossSite_RequestForgery và thay đổi chuỗi kết nối với chuỗi được cung cấp bên dưới và sau đó lưu lại.
`
<connectionStrings> <add name="DefaultConnection" connectionString="Data Source=local\SQLEXPRESS;Initial Catalog=CSRF;
Integrated Security=true;" providerName="System.Data.SqlClient" />
</connectionStrings>
Bây giờ, nhấp vào Công cụ >> Trình quản lý gói NuGet, sau đó Bảng điều khiển quản lý gói
Bây giờ, hãy chạy ba lệnh được đề cập dưới đây trong Gói quản lý gói để tạo cơ sở dữ liệu.
Bật-di chuyển bổ sung cơ sở dữ liệu cập nhật đầu tiên
Lưu ý quan trọng - Tôi đã tạo cơ sở dữ liệu với cách tiếp cận mã đầu tiên vì tôi muốn tạo ví dụ này theo cách các nhà phát triển làm việc. Bạn cũng có thể tạo cơ sở dữ liệu theo cách thủ công. Đó là sự lựa chọn của bạn.
- Bây giờ, mở Trình điều khiển tài khoản. Ở đây, bạn sẽ thấy một phương thức đăng ký có loại là bài. Trên phương thức này, cần có một thuộc tính có sẵn là [ValidateAntiForgeryToken]. Nhận xét thuộc tính này. Bây giờ, nhấp chuột phải vào đăng ký và nhấp vào Xem. Ở đó, một lần nữa, bạn sẽ tìm thấy một trình trợ giúp html là @ Html.AntiForgeryToken (). Bình luận này cũng có. Chạy ứng dụng và bấm vào nút đăng ký. URL sẽ được mở dưới dạng:
http: // localhost: 52269 / Tài khoản / Đăng ký
Lưu ý - Bây giờ tôi biết câu hỏi đang được nêu ra trong đầu mọi người đọc là tại sao hai người trợ giúp này cần được bình luận, vì mọi người đều biết những câu hỏi này được sử dụng để xác thực yêu cầu. Sau đó, tôi chỉ muốn cho tất cả các bạn biết rằng đây chỉ là vì tôi muốn thể hiện sự khác biệt sau và trước khi áp dụng những người trợ giúp này.
Bây giờ, hãy mở ứng dụng thứ hai là Attack_Application. Sau đó, mở phương thức Đăng ký của Trình điều khiển tài khoản. Chỉ cần thay đổi phương thức POST bằng cách đơn giản, hiển thị bên dưới.
Mẫu đăng ký
- @ Html.LabelFor (m => m.UserName) @ Html.TextBoxFor (m => m.UserName)
- @ Html. Nhãn hiệu (m => m.Password) @ Html.PasswordFor (m => m.Password)
- @ Html.LabelFor (m => m.ConfirmPassword) @ Html.PasswordFor (m => m.ConfirmPassword)
7. Bây giờ, giả sử bạn là một hacker và bạn biết URL từ nơi bạn có thể đăng ký người dùng trong ứng dụng CrossSite_RequestForgery. Bây giờ, bạn đã tạo một trang web Giả mạo là Attacker_Application và chỉ cần đặt cùng một URL trong phương thức đăng bài.
8. Chạy ứng dụng này ngay bây giờ và điền vào các trường đăng ký và nhấp vào đăng ký. Bạn sẽ thấy bạn được đăng ký trong ứng dụng CrossSite_RequestForgery. Nếu bạn kiểm tra cơ sở dữ liệu của ứng dụng CrossSite_RequestForgery thì bạn sẽ thấy và nhập bạn đã nhập.
- Quan trọng - Bây giờ, hãy mở ứng dụng CrossSite_RequestForgery và nhận xét mã thông báo trong Trình điều khiển tài khoản và đăng ký Xem. Hãy thử đăng ký lại với quá trình tương tự. Sau đó, một lỗi sẽ xảy ra như dưới đây.
lỗi server trong ứng dụng '/' Không được sử dụng cookie chống giả mạo "__RequestVerifyingToken".
Đây là những gì khái niệm nói. Những gì chúng tôi thêm vào Xem tức là @ Html.AntiForgeryToken () tạo __RequestVerifyingToken về thời gian tải và [ValidateAntiForgeryToken] có sẵn trên phương thức Bộ điều khiển. Phù hợp với mã thông báo này vào thời gian đăng bài. Nếu mã thông báo là như nhau, thì có nghĩa đây là một yêu cầu hợp lệ.