私はbackbone.jsを使用しています。しかし、javascriptテンプレートとして作成しているフォームには、レールcsrf保護トークンがありません。私はどのように私はJavaScriptで作成しているテンプレートに追加するのですか?Rails - javascriptで作成したフォームにCSRF保護を追加するには?
答えて
あなたがどこかに自分のレイアウトで<%= csrf_meta_tag %>
を持っており、それはJSからあなたにアクセス可能である場合は、各バックボーン要求
$('meta[name="csrf-token"]')
を使用してアクセスすることができます
「投稿」または「削除」を使用するすべてのフォームにcsrfトークンを付加することができます。ここでは、CoffeeScriptのである:
$ ->
for f in $("form")
if f.method == 'post' or f.method == 'delete'
$(f).prepend("<input type='hidden' name='authenticity_token' value='" + token + "'>")
あなたのレイアウトで<% = csrf_meta_tags%>があることを確認してください。すでに標準の「アプリケーション」レイアウトにあるはずですが、別のレイアウトを使用している場合は追加してください。
'token'はどこで宣言されていますか? – juliangonzalez
@suga_shaneは、 "<%= csrf_meta_tags%>' "を持っていることを意味します。これはRailsヘルパーがトークンを生成してHTMLの' head'に挿入することを意味します。トークンは ''タグの 'csrf-token'という名前の' content'属性です。 – sameers
ベストな方法は、私は、フォーム内で、これを解決:あなたの.js.erb
資産ファイルから
<%= hidden_field_tag :authenticity_token, form_authenticity_token %>
を使用することはできません4.2.2
<%= hidden_field_tag :authenticity_token, form_authenticity_token %>
それは動作しますが、なぜですか?コントローラ内の['form_authenticity_token'](http://apidock.com/rails/ActionController/RequestForgeryProtection/form_authenticity_token)はプライベートではありませんか? –
これは私にとってRails 4.2.2ではうまくいきません。私は: '未定義のローカル変数またはメソッド 'form_authenticity_token for#<#
のようになりました。ちょっと、' form_authenticity_token'のように見えるフランクリンのようなコントローラのプライベートです。私が提案として見たのは、コントローラの変数 '@form_token = form_authenticity_token'を宣言し、それをビューで使用することでした。 – lucianosousa
Railsのためのよう。
.js.erb
ファイル内にフォームを作成することができます。フォームに.html.erb
というファイルを含むビューでは、hidden_field_tag
ヘルパーを使用してトークン要素を生成します。この要素はフォーム外で生成されるため、この要素をフォームに追加するためにjqueryを使用できます。研究の
ケース:SweetAlert(最初のバージョン、バージョンがあまりにもこの問題を解決しているようだ)
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. マニュアルで作成したフォームにCSRFを追加するには?
- 2. フォーム検証なしのCodeigniter csrf保護
- 3. SilexでフォームのCSRF保護を無効にする
- 4. CSRF HTTPによるGETリクエストの保護
- 5. csrfの保護
- 6. CSRF保護質問
- 7. php csrf保護ライブラリ
- 8. symfonyによるCSRFの保護
- 9. CSRF/SQLインジェクション保護。ほかに何か?
- 10. drupalでコンテンツを追加するフォームを作成するには?
- 11. 電子:CSRF保護なしでElectronのAngularJSを実行するには?
- 12. 免責事項directfinderでのCSRF保護
- 13. CodeIgniterのCSRF保護エラー:私は、configファイルにCSRFの保護を有効にしているCI 2を使用しています
- 14. Spring RESTful WebサービスでCSRF保護を処理する方法は?
- 15. PlayFramework 2.1.x(Scala)でCSRF保護を実装する方法は?
- 16. スプリングブートでcsrf保護を有効にできません
- 17. HTML_QuickformにJavaScriptを追加するとフォームが生成される
- 18. エンジンのcssとjsをrailsプラグインで作成したレールアプリに追加する
- 19. シンクロナイザートークンパターンを使用してCSRFを安全に保護する方法は?
- 20. symfony 1.4どのように1つの登録フォームのcsrf保護を無効にするのですか?
- 21. 印刷キューを作成し、C#でキューにフォームを追加する方法は?
- 22. レールアプリでCSRF保護をオフにするにはどうすればよいですか?
- 23. JavaScriptで作成されたボタンにTabIndexを追加
- 24. CSRF保護とSpringセッションヘッダーセッションの戦略
- 25. pythonでパスワードで保護されたzipファイルを作成するには?
- 26. Rails APIがCSRFから保護されていることを確認するには?
- 27. CSRF保護:すべてのフォームのトークンを生成する必要がありますか?
- 28. 値を属性(Rails)にプッシュ/追加するフォームでカスタムアクションを作成しますか?
- 29. 動的にフォームを作成するangularjsの追加ボタンをクリック
- 30. WordPressテーマにコピー保護を追加する
eunikorn今は壊れたリンクになっています – Crisfole
これがどのようにハッキングできるかの別の例はhttps://gist.github.com/3482636を参照してください。それが同じかどうかはわかりません。 – Crisfole
ああ、概念は同じです。 –