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.
790 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
145 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 hơn 2 năm trước
145 15
White
77 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 hơn 1 năm trước
77 15
White
54 6
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 hơn 1 năm trước
54 6
Bài viết liên quan
White
35 11
Có 1 kiểu tấn công vào website mà chúng ta không thể nào chống được, dù có làm thế nào đi nữa: DDOS. Đây cũng là một từ rất hay dc nhắc đến và rất...
quocnguyen viết hơn 2 năm trước
35 11
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


White
{{userFollowed ? 'Following' : 'Follow'}}
24 bài viết.
790 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á!