Tìm hiểu về CSRF

CSRF là một kiểu tấn công diễn ra khá phổ biến hiện nay trên các website không bảo mật. Nếu bạn là một developer thì bạn cần hiểu được về kiểu tấn công này để đảm bảo tính bảo mật cho ứng dụng viết ra.

CSRF Là Gì

CSRF là một kiểu tấn công sử dụng trình duyệt để khiến người dùng thực hiện những hành động không mong muốn trên một website khác mà họ đã đăng nhập.

Để hiểu rõ hơn CSRF là gì thì chúng ta cùng tham khảo một ví dụ như sau:

Người dùng sau khi đăng nhập vào Facebook và mở một tab khác để tải phim miễn phí. Trên trang tải phim có một banner quảng cáo một game với phần thưởng dành cho người thằng cuộc là một chiếc iPhone. Người dùng click vào banner này mà một lúc sau quay trở lại trang A và phát hiện ra anh ta đã viết rất nhiều post spam lên tường của mình.

Update: Facebook đã chống lại kiểu tấn công này.

Cách Thực Hiện Tấn Công CSRF

Trong banner của trang tải phim có một form được ẩn như sau:

<form action="http:s//facebook.com/posts/store" method="POST">
    <textarea type="hidden" name="content">This great product is on sales. Click this link to buy it....!</textarea>
    <button type="submit">Win iPhone 7</button>
</form>

Bạn để ý thẻ <textarea>ở form trên sử dụng thuộc tính type="hidden" để người dùng không phát hiện ra. Do người dùng đã thực hiện việc đăng nhập trên Facebook nên trên trình duyệt lúc này trang tải phim có thể gửi request tới Facebook sử dụng chính cookie của người dùng. Khi người dùng bấm vào Win iPhone 7 thực ra họ đã gửi request tới Facebook để tạo post.

Chống Lại Tấn Công CSRF

Cách hiệu quả lại tấn công CSRF đó là sử dụng một CSRF Token trong mỗi form gửi tới client (ví dụ như trong form để người dùng post lên tường với ví dụ trên của Facebook). Lúc này thì khi trang tải phim gửi request lên Facebook thì mặc dù có thể lấy token của người dùng thì trang này sẽ không có được với token của người dùng cho form tạo post của anh ta. Còn nếu họ sử dụng token của chính form được Facebook tạo cho trang này thì khi nhận được request giả mạo danh tính người dùng để tạo post thì Facebook sẽ so sánh token nhận được so với token thực sự của người dùng. Và lúc này do người dùng không trực tiếp thực hiện request nên Facebook sẽ biết rằng request này đến từ một người dùng khác chứ không phải từ chính anh ta.

Content must not be empty

Related Blog