9

Máy chủ sản xuất của chúng tôi đã tạo lỗi mã thông báo xác thực không hợp lệ trong vài tháng ngay bây giờ. Các lỗi được tạo ra trên hầu như tất cả các biểu mẫu gửi (PUT | POST | DELETE) yêu cầu. Đôi khi lỗi xảy ra, đôi khi họ không. Dường như không có vần điệu hay lý do nào khiến chúng xảy ra. Bản thân lỗi không xảy ra thường xuyên nhưng nó là một lo lắng cho chúng ta. Dưới đây là ví dụ về biểu mẫu điển hình gây ra lỗi này.Gỡ lỗi ngẫu nhiên Mã xác thực không hợp lệ lỗi

<form class="button_to" method="post" action="/lesson_progress_trackers/333"> 
    <input type="hidden" name="_method" value="patch"> 
    <input class="finish-lesson-button" type="submit" value="Done!"> 
    <input type="hidden" name="authenticity_token" value="Qd3FsJZY2UXR9vahuFmaY5rrqA+J5xzGpl4cGI2Vwerx8PZPQtDMugz6oqoe3iviC+/U5zTYPdeX3apwbap09E=="> 
    <input type="hidden" name="completed" value="true"> 
</form> 

Đây là những gì tôi đã khám phá cho đến nay.

  1. Chúng tôi sử dụng Turbolinks 2.5.3 (chúng tôi chưa cập nhật điều này trong hơn một năm).
  2. Trong mọi trường hợp lỗi mã thông báo không hợp lệ, người dùng đã chuyển mã thông báo xác thực cho máy chủ, nó chỉ kết thúc là không hợp lệ.
  3. Hiện tại chúng tôi đang sử dụng protect_from_forgery with: :exception trong bộ điều khiển ứng dụng của chúng tôi.
  4. Các lỗi bắt đầu xuất hiện khi chúng tôi đẩy một loạt mã mới vào sản xuất vài tháng trước. Mã mới này kéo dài hàng trăm tệp nhưng cho đến nay tôi không tìm thấy mã nào có liên quan đến vấn đề này.
  5. Lỗi có thể xảy ra trên bất kỳ loại trình duyệt và thiết bị nào.
  6. Không có sự tương quan giữa lưu lượng truy cập tăng lên và mã thông báo xác thực không hợp lệ xuất hiện.
  7. Người dùng có thể đến từ bất kỳ quốc gia nào.
  8. Đây không phải là bot gặp phải các sự cố này. Chúng tôi thậm chí đã có một đồng nghiệp kinh nghiệm lỗi này mặc dù họ không thể nhớ lại những gì họ đã làm để sản xuất nó.
  9. Người dùng theo hành vi điển hình nếu không mong đợi. Họ đang sử dụng ứng dụng như dự định. Tôi đã xem qua các nhấp chuột của họ và lịch sử hành vi được ghi lại để kết thúc điều này.

Cuối cùng tôi muốn tìm ra cách giải quyết vấn đề này. Bước đầu tiên của tôi là tạo lại lỗi thành công, nhưng tôi thậm chí không thể làm điều đó. Câu hỏi của tôi là: tôi có thể làm gì để giúp tôi tìm ra nguyên nhân gây ra điều này? Tôi đang hết các lựa chọn. Cảm ơn!

+0

Vâng, tôi đã làm điều đó. Điều này xảy ra với người dùng thực. Đây không phải là bot. Các mẫu mà tôi đã phát hiện là hành vi người dùng điển hình. Không có gì bất thường trong những gì họ đang làm. Tôi sẵn sàng nói rằng đây là hành vi mong đợi. Đây là lý do tại sao nó rất đáng sợ. – jason328

+0

Bạn có thể loại trừ mọi thứ hết hạn không? Cookies chỉ là một điều, nó có thể là một số so sánh thời gian liên quan, sai thời gian trong máy chủ, cơ sở dữ liệu lĩnh vực dự kiến ​​thời gian cụ thể hoặc bất cứ điều gì như thế. – Smar

+0

Tôi không nghĩ vậy? Bạn có thể làm rõ câu hỏi của bạn một chút. – jason328

Trả lời

1

Dunno nếu quá muộn để có ích, nhưng tôi cũng gặp vấn đề tương tự. Tôi đã có thể sinh sản bằng:

  1. Hãy chắc chắn rằng bạn đang đăng xuất khỏi ứng dụng
  2. mở một tab trình duyệt để đăng nhập trang
  3. Hãy để nó ngồi đủ lâu để hết hạn phiên/CSRF token (có thể là vài giờ)
  4. mở một tab khác đến trang đăng nhập và đăng nhập
  5. quay lại tab cũ và thử đăng nhập lại - Ngoại lệ InvalidAuthenticityToken xảy ra.

Tôi nghĩ rằng điều này xảy ra với tôi vì hai tab được chia sẻ một phiên duy nhất, phiên được tạo khi tab mới được mở. Tuy nhiên, tab cũ vẫn có mã thông báo csrf từ phiên cũ trong biểu mẫu đăng nhập. Khi cookie phiên mới và mã thông báo csrf cũ được gửi cùng nhau, chúng không khớp và do đó lỗi được ném.

Tôi không chắc chắn cách thực sự sửa lỗi này, ngoài việc xử lý lỗi một cách duyên dáng hơn để người dùng không thấy trang lỗi khó hiểu.

BTW, tôi đang sử dụng thiết lập, nhưng tôi không nghĩ rằng nó cụ thể cho Devise.

Các vấn đề liên quan