CSRF Security Token
vào mọi truy vấn Ajax
trong CodeIgniter
khi bạn cấu hình bật bảo vệ CSRF (Cross Site Request Forgery)
.Trong
CodeIgniter
, khi bạn thiết lập cấu hình bật bảo vệ CSRF (Cross Site Request Forgery)
trong config.php $config['csrf_protection'] = TRUE;
thì mọi truy vấn từ client
tới server
đều được kiểm tra xem có chứa token hay không. Khi làm việc với các truy vấn ajax thì bạn sẽ phải thêm tham số token vào thủ công khá là mệt. Trong bài viết này, mình sẽ chỉ các bạn một cách để tự động thêm token vào mọi truy vấn ajax.
Các thư viện cần sử dụng
Chúng ta sẽ dùng tới jQuery và một plugin với tên gọi JS Cookies.
Tự động thêm CSRF Token
vào mọi truy vấn Ajax
Để làm việc này, chúng ta sẽ sử dụng API ajaxSetup()
, với API
này thì chúng ta có thể thiết lập trước các tùy chọn mặc định cho mọi truy vấn tiếp theo được gọi qua ajax()
, get()
hoặc post()
.// Auto add CSRF token to all Ajax requests $.ajaxSetup({ beforeSend: function(xhr, settings) { if (settings.data.indexOf('csrf_test_name') === -1) { settings.data += '&csrf_test_name=' + encodeURIComponent(Cookies.get('csrf_cookie_name')); } } });
beforeSend
- cái tên nói lên tất cả - đây là một hook sẽ được gọi trước mọi truy vấn ajax. Tại đây, chúng ta có thể thêm, sửa hoặc xóa dữ liệu của một truy vấn. Tớ sẽ dùng câu điều kiện If để kiểm tra xem trong dữ liệu truyền đi có chứa CSRF token
hay chưa, nếu chưa thì chèn thêm vào cuối dữ liệu.Chú ý:
csrf_test_name
và csrf_cookie_name
là giá trị các bạn thiết lập trong config.php
nhé!$config['csrf_protection'] = TRUE; $config['csrf_token_name'] = 'csrf_test_name'; $config['csrf_cookie_name'] = 'csrf_cookie_name'; $config['csrf_expire'] = 7200; $config['csrf_regenerate'] = TRUE; $config['csrf_exclude_uris'] = array();
Nếu không muốn sử dụng plugin
JS Cookies
thì các bạn có thể tự viết một hàm đơn giản như sau:function getToken() { var ck = document.cookie.match(/csrf_cookie_name=([a-z0-9]+)/); if (ck.length === 2) return ck[1]; return null; }
Qua thủ thuật trên mọi người có thể kiểm tra và áp dụng website của mọi người thật tốt nhé.
Theo Junookyo.Com
Comments