Tự động thêm CSRF Token vào mọi truy vấn Ajax trong CodeIgniter

csrf

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_namecsrf_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;
}

Theo: Juno_okyo's Blog


:point_right: Theo dõi Juno_okyo trên Kipalog · Facebook · Twitter · Google+

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Juno_okyo

24 bài viết.
866 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
153 15
(Ảnh) Biểu thức chính quy (hay regex) là một công cụ mạnh mẽ mà mỗi nhà phát triển nên biết. Nó có thể khớp với một chuỗi các ký tự dựa trên các t...
Juno_okyo viết 3 năm trước
153 15
White
82 15
(Ảnh) Trong bài viết này tôi sẽ chia sẻ 12 thủ thuật vô cùng hữu ích cho JavaScript. Những thủ thuật này sẽ giúp bạn giảm lượng code cũng như làm ...
Juno_okyo viết gần 2 năm trước
82 15
White
57 7
Bạn thấy chán các trang web cũ? Muốn tìm một vài góc mới của Internet để giúp bạn tìm lại sự hứng thú? Tốt thôi, bạn đã gặp may đấy. Dù bạn đang tì...
Juno_okyo viết gần 2 năm trước
57 7
Bài viết liên quan
White
24 10
Giới thiệu Tản mạn chút: Chắc hẳn sẽ có nhiều bạn cảm thấy kì cục như kiểu mình ở nông thôn mới ra thành thị khi dùng một framework gần 10 năm tu...
Kiên Trung Đặng viết 3 năm trước
24 10
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
24 bài viết.
866 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!