Tắt mã thông báo CSRF trong rails 3


105

Tôi có một ứng dụng rails cung cấp một số API cho một ứng dụng iPhone. Tôi muốn có thể chỉ cần đăng trên một tài nguyên mà không cần quan tâm đến việc lấy đúng mã thông báo CSRF. Tôi đã thử một số phương pháp mà tôi thấy ở đây trong stackoverflow nhưng có vẻ như chúng không còn hoạt động trên rails 3 nữa.

Cảm ơn vì đã giúp tôi.

Câu trả lời:


175

Trong bộ điều khiển nơi bạn muốn tắt CSRF, hãy chọn:

skip_before_action :verify_authenticity_token

Hoặc để vô hiệu hóa nó cho mọi thứ ngoại trừ một số phương pháp:

skip_before_action :verify_authenticity_token, :except => [:update, :create]

Hoặc chỉ tắt các phương pháp được chỉ định:

skip_before_action :verify_authenticity_token, :only => [:custom_auth, :update]

Thông tin thêm: RoR Request Forgery Protection


1
Đây là câu trả lời chính xác cho các ứng dụng có sự kết hợp của các biểu mẫu thông thường có thể truy cập trình duyệt và các điểm cuối API. Câu trả lời từ Markus Proske sẽ đúng nếu bạn hoàn toàn chắc chắn rằng mình sẽ không có bất kỳ biểu mẫu nào có thể truy cập được trên trình duyệt trong ứng dụng của mình.
Asfand Qazi

Chính xác thì điều này sẽ đi đến đâu? Điều gì sẽ xảy ra nếu bộ điều khiển một phần của một số đá quý?
Quăng tài khoản đi

Tôi có thể hỏi bạn nếu bạn có thể trả lời câu hỏi tương tự này? stackoverflow.com/questions/50159847/…

105

Trong Rails3, bạn có thể vô hiệu hóa mã thông báo csrf trong bộ điều khiển của mình cho các phương pháp cụ thể:

protect_from_forgery :except => :create 

12
Đối với bất kỳ ai đang đọc, hãy lưu ý rằng đây là những gì nên đi vào ApplicationController. Phản hồi của Mike Lewis bên dưới ( skip_before_filter :verify_authenticity_token) là cách tắt nó trên cơ sở từng bộ điều khiển, giả sử rằng bộ điều khiển đó kế thừa từ ApplicationController.
NudeCanalTroll

Có vẻ như đây là stackoverflow.com/questions/10676018/… không an toàn . Bạn nghĩ sao? Là nó?
trang web

@NudeCanalTroll ý bạn là đặt cái này vào bộ điều khiển nơi tôi muốn nó sẽ không hoạt động?
BlackDivine

Tôi có thể hỏi bạn nếu bạn có thể trả lời câu hỏi tương tự này? stackoverflow.com/questions/50159847/…

32

Với Rails 4, bây giờ bạn có tùy chọn để viết skip_before_actionthay vì viết skip_before_filter.

# Works in Rails 4 and 5
skip_before_action :verify_authenticity_token

hoặc là

# Works in Rails 3 and 4 (deprecated in Rails 4 and removed in Rails 5)
skip_before_filter :verify_authenticity_token

1
Có gì khác biệt?
Adam D. Ruppe

Tôi có thể hỏi bạn nếu bạn có thể trả lời câu hỏi tương tự này? stackoverflow.com/questions/50159847/…

John Sam, khi nào tôi có thời gian, tôi sẽ cố gắng hoàn thành nó.
jason328
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.