Cách sử dụng CSRF Protection trong CodeIgniter

Cross Site Request Forgery, là lỗ hổng phổ biến nhất trong các trang web và ứng dụng web. Lỗ hổng này đã được phát hiện từ rất lâu nên tôi không đi vào chi tiết về nó mà chỉ nói về cách sử dụng trong framework CodeIgniter. Nếu bạn muốn biết thêm về nó thì đọc trên wikipedia

codeigniter-csrf-security-token-ajax


Để kích hoạt CSRF Protect trong CodeIgniter, bạn vào trong file config tìm $config['csrf_protection'] = FALSE; và đổi giá trị lại là TRUE. Và thay các giá trị phía bên dưới theo ý bạn. Như vậy, sau mỗi lần request thì CI sẽ làm mới token và lưu vào cookie với tên bạn đã cấu hình $config['csrf_cookie_name']. 

Sau khi cấu hình bật csrf protect thì tất cả các form và ajax trong trang web sẽ không hoạt động. CI sẽ không sử lý dữ liệu được POST lên nếu không gửi kèm token này.

Cách dùng trong view

Với các view có form, trong controller gọi view bạn cần phải lấy name và token trong lớp Security và truyền vào cho view, bằng cách gọi phương thức get_csrf_token_name() cho name và get_csrf_hash() cho token. Ví dụ:

Sau đó trong form bạn thêm thẻ input này vào:

Cách dùng với ajax jquery

Với ajax jquery, chúng ta sẽ bắt sự kiện beforeSend để thêm token vào trước khi data được gửi lên server. Để làm điều này đơn giản hơn thì sử dụng hàm ajaxSetup của jquery. Tất cả code gọi ajax đều sẽ lấy cấu hình từ ajaxSetup này.

Chúng ta sẽ lấy token được lưu trong cookie nên cần import thêm file jquery cookie vào:


Nhớ thay csrf_test_namecsrf_cookie_name như đã cấu hình trong file config.php của CI nhé.

Cách dùng với Angular

Với angular thì quá đơn giản, từ angular 1.2 đã mặc định hỗ trợ CSRF Protect, chỉ cần đặt csrf_cookie_name là X-Token là angular sẽ tự biết để lấy gửi lên server.

0 nhận xét:

Đăng nhận xét