Tôi đang sử dụng backbone.js và nó hoạt động tốt. nhưng các biểu mẫu tôi tạo dưới dạng mẫu javascript thiếu mã thông báo bảo vệ csrf của đường ray. Làm thế nào để tôi thêm nó vào mẫu tôi đang tạo trong javascript?Rails - Cách thêm Bảo vệ CSRF vào các biểu mẫu được tạo bằng javascript?
Trả lời
Nếu bạn có <%= csrf_meta_tag %>
trong cách bố trí của bạn ở đâu đó và có thể truy cập để bạn từ js, sau đó bạn có thể truy cập nó bằng cách sử $('meta[name="csrf-token"]')
Xem http://eunikorn.blogspot.com/2011/07/working-with-backbonejs-in-harmony-with.html cho một ý tưởng về cách hack trong hỗ trợ CSRF vào từng yêu cầu xương sống
Bạn có thể thêm mã thông báo csrf vào mọi biểu mẫu sử dụng 'bài đăng' hoặc 'xóa'. Dưới đây là trong coffeescript:
$ ->
for f in $("form")
if f.method == 'post' or f.method == 'delete'
$(f).prepend("<input type='hidden' name='authenticity_token' value='" + token + "'>")
Đảm bảo bạn có <% = csrf_meta_tags%> trong cách bố trí của bạn. Nó đã có trong bố cục 'ứng dụng' chuẩn, nhưng thêm nó nếu bạn đang sử dụng một bố cục khác.
'Mã thông báo' được khai báo ở đâu? – juliangonzalez
@suga_shane nghĩa là gì bằng cách viết, "đảm bảo bạn có' <% = csrf_meta_tags%> '", là trình trợ giúp Rails này tạo ra một mã thông báo cho bạn và chèn nó vào đầu 'HTML' hay không. Mã thông báo là thuộc tính 'content' trong thẻ' 'có tên' csrf-token'. – sameers
Cách tốt nhất tôi giải quyết này, bên trong có dạng:
<%= hidden_field_tag :authenticity_token, form_authenticity_token %>
Nó hoạt động, nhưng tại sao? Không phải là ['form_authenticity_token'] (http://apidock.com/rails/ActionController/RequestForgeryProtection/form_authenticity_token) riêng trong bộ điều khiển? –
Điều này không phù hợp với tôi Rails 4.2.2. Tôi nhận được: 'undefined local variable hoặc method 'form_authenticity_token' cho # <#
Chào các bạn, có vẻ như 'form_authenticity_token' là riêng tư cho các bộ điều khiển như Franklin nói. Những gì tôi thấy là một gợi ý đã khai báo một biến trong một bộ điều khiển '@form_token = form_authenticity_token' và sử dụng nó trong khung nhìn. – lucianosousa
Đối với Rails 4.2.2 bạn không được phép sử dụng
<%= hidden_field_tag :authenticity_token, form_authenticity_token %>
từ tập tin tài sản .js.erb
của bạn.
Tuy nhiên Bạn có thể tạo biểu mẫu bên trong tệp .js.erb
và trong chế độ xem có chứa biểu mẫu .html.erb
tệp sử dụng trình trợ giúp hidden_field_tag
để tạo phần tử mã thông báo. Vì phần tử này sẽ được tạo bên ngoài biểu mẫu, bạn có thể sử dụng jquery để chắp thêm phần tử này vào biểu mẫu.
Trường hợp nghiên cứu: SweetAlert (phiên bản đầu tiên, phiên bản quá dường như đã giải quyết vấn đề này)
show.js.erb
$('.js-button-apply-offer').click(function(e) {
var urlOffer = $(this).attr('data-url-offer');
var modalParams = {
type: 'warning',
title: 'add file',
text: '<p>Need to add a file before continuing</p>' // This is a hack for Sweet alert, solved in SweetAlert2 Consider upgrade
+"<form action='"+urlOffer+"' id='formCustomCV' method='post' enctype='multipart/form-data' data-remote='true'>"
+ "<input type='file' name='custom_cv' id='fileToUploadAlert' accept='application/pdf'>\n"
+"</form>",
html: true,
showCancelButton: true,
confirmButtonColor: '#DD6B55',
confirmButtonText: 'Send',
cancelButtonText: 'Cancel',
closeOnConfirm: false
}
swal(modalParams,
function(){
var form_token = $('#form_token');
$('#formCustomCV').append(form_token).submit(); //update to submit using ajax
});
show.html.erb
<%= button_tag t('offers.offer.apply'),
class: 'center-block btn btn-success js-button-apply-offer',
id: "js-button-apply-offer",
data: {
url_offer: apply_talents_offer_path(@offer),
}
%>
<%= hidden_field_tag :authenticity_token, form_authenticity_token, id: :form_token %>
- 1. bảo vệ csrf
- 2. Bảo vệ CSRF bằng cách lưu trữ nonce trong biến Phiên và biểu mẫu
- 3. Bảo vệ CSRF có cần thiết trên biểu mẫu đăng ký không?
- 4. Cách thêm CSRF vào biểu mẫu được tạo theo cách thủ công trong wordpress?
- 5. Bảo vệ CSRF: chúng tôi có phải tạo mã thông báo cho mọi biểu mẫu không?
- 6. Cách miễn bảo vệ CSRF trên direct_to_template
- 7. Bảo vệ CSRF thực sự là gì?
- 8. Bảo vệ CSRF với các yêu cầu HTTP GET trong Rails
- 9. bảo vệ chống lại CSRF trên các yêu cầu và biểu mẫu ajax mà không cần gửi các nút
- 10. Đây có phải là cách bảo vệ CSRF của Django hoạt động không?
- 11. ghi đè nội bộ được bảo vệ bằng bảo vệ!
- 12. Cách tạo thuộc tính đối tượng được bảo vệ trong JavaScript
- 13. Bảo vệ CSRF trong các yêu cầu AJAX sử dụng MVC2
- 14. Làm cách nào để tắt tính năng bảo vệ CSRF trong ứng dụng đường ray?
- 15. Django: biểu mẫu POST yêu cầu CSRF? GET không?
- 16. Rails 3.1 - Không thể gán khối lượng thuộc tính được bảo vệ (mặc dù được thêm vào attr_accessible)
- 17. Java: Mẫu ủy quyền và phương pháp được bảo vệ
- 18. Nhận mã thông báo CSRF Codeigniter không có biểu mẫu?
- 19. Biểu mẫu Symfony2 có CSRF được chuyển qua JQuery AJAX
- 20. Formtastic trong JavaScript (trình tạo biểu mẫu)
- 21. Làm cách nào để tạo biểu mẫu động bằng JavaScript?
- 22. phương pháp được bảo vệ bằng mocking
- 23. Chỉnh sửa nội dòng có thể chỉnh sửa X trong Django - cách nhận bảo vệ CSRF?
- 24. Cú pháp button_to chính xác để thêm lớp vào biểu mẫu được tạo ra là gì?
- 25. PDF được bảo vệ bằng mật khẩu bằng C#
- 26. Nhận [email được bảo vệ] khi cố gắng hiển thị eamil bằng cách sử dụng collection_select
- 27. Làm thế nào để bảo vệ chống lại CSRF theo mặc định trong ASP.NET MVC 4?
- 28. đầu vào là URL, cách bảo vệ nó khỏi xss
- 29. Xây dựng được bảo vệ bằng mật khẩu cho TFS2010
- 30. Việc hiển thị mã thông báo bảo vệ CSRF của phiên có an toàn không?
eunikorn bây giờ là liên kết bị hỏng – Crisfole
Xem https://gist.github.com/3482636 để biết ví dụ khác về cách thức này có thể bị tấn công. Tôi không biết liệu nó có giống nhau hay không. – Crisfole
Vâng khái niệm là như nhau. –