ActionController :: InvalidAuthenticityToken


148

নীচে আমার রেল অ্যাপ্লিকেশনটিতে একটি ফর্মের কারণে একটি ত্রুটি রয়েছে:

Processing UsersController#update (for **ip** at 2010-07-29 10:52:27) [PUT]
  Parameters: {"commit"=>"Update", "action"=>"update", "_method"=>"put", "authenticity_token"=>"ysiDvO5s7qhJQrnlSR2+f8jF1gxdB7T9I2ydxpRlSSk=", **more parameters**}

ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):

এটি প্রতিটি অ- getঅনুরোধের জন্য ঘটে এবং যেমন আপনি দেখতে পাচ্ছেন authenticity_tokenis

উত্তর:


207

আমার একই সমস্যা ছিল তবে পৃষ্ঠাগুলি যা পৃষ্ঠায় ক্যাশে ছিল। পৃষ্ঠাগুলি একটি বাসি সত্যতা টোকেন এবং জালিয়াতির প্রচেষ্টা হিসাবে স্বীকৃত যেখানে পোষ্ট / পুট / মুছে ফেলা পদ্ধতি ব্যবহার করে সমস্ত ক্রিয়াকলাপ দিয়ে বাফার হয়েছে। ত্রুটি (422 অপসারণযোগ্য সত্তা) ব্যবহারকারীকে ফিরিয়ে দেওয়া হয়েছিল।

রেল 3 এর সমাধান: যুক্ত
করুন:

 skip_before_filter :verify_authenticity_token  

বা "সাগিভো" রেল 4 এ নির্দেশিত হিসাবে যুক্ত করুন:

 skip_before_action :verify_authenticity_token

পৃষ্ঠাগুলি যা ক্যাশে করে।

@Toobulkeh মন্তব্য হিসেবে এই একটা দুর্বলতা নয় :index, :showকর্ম, কিন্তু এই ব্যবহার হুঁশিয়ার :put, :postকর্ম।

উদাহরণ স্বরূপ:

 caches_page :index, :show  
 skip_before_filter :verify_authenticity_token, :only => [:index, :show]

তথ্যসূত্র: http://api.rubyonrails.org/class/ActionController/RequestForgeryProtication/ClassMethods.html

নোট বারলপ- যোগ করেছেন 4.2 অবজ্ঞাত স্কিপ_বরেফর_ফিল্টার skip_before_action https://guides.rubyonrails.org/4_2_release_notes.html এর পক্ষে "" ফিল্টার পরিবারটি ডকুমেন্টেশন থেকে সরানো হয়েছে Their তাদের ব্যবহারটি * _অ্যাকশনটির পক্ষে নিরুত্সাহিত করা হয়েছে পদ্ধতির পরিবার "

রেল ails এর জন্য ("কলিমার্কো" হিসাবে চিহ্নিত) আপনি ব্যবহার করতে পারেন skip_forgery_protectionএবং এটি একটি নিরাপদ এপিআই এর জন্য ব্যবহার করা নিরাপদ যা সেশন ডেটা ব্যবহার করে না।


3
সম্ভবত এটি ক্ষেত্রে নয়, আমি আপনার পোস্টের আগে ক্যাশে_পেজ সম্পর্কে জানতাম না । তবে আমি ক্যাশে_পেজটি পরীক্ষা করে দেখব , ধন্যবাদ।
নিকিতা রাইবাক

7
রেল 4skip_before_action :verify_authenticity_token
সগিভ ওফেক

88
এটা কি দুর্বলতা নয়?
কোয়ান্টাম্পোটাটো

6
এটি :index, :showক্রিয়ায় দুর্বলতা নয় । তবে এটিকে কার্য্যকরণ থেকে সাবধান থাকুন :put, :post!
তোবুলকেহে

14
যদিও আমি সম্মত হই যে আপনার কখনও কখনও এটির প্রয়োজন হয় এমন কেস আছে (যেমন জীবনে একবারে সম্ভবত) তবে আপনাকে বুঝতে হবে যে আপনি সুরক্ষা অক্ষম করে সুরক্ষা ঠিক করছেন। প্রস্তাবিত নয়
সমমান 8

77

আমার কাছে রেল 4 এর অধীনে এই সমস্যার কারণটি ছিল একটি অনুপস্থিত,

<%= csrf_meta_tags %>

আমার মূল অ্যাপ্লিকেশন বিন্যাসে লাইন। আমি আমার লেআউটটি আবার লিখলে আমি দুর্ঘটনাক্রমে এটিকে মুছে ফেলেছিলাম।

এটি যদি প্রধান বিন্যাসে না থাকে তবে আপনার কোনও সিএসআরএফ টোকেন চান এমন কোনও পৃষ্ঠায় এটির প্রয়োজন হবে।


2
আমরা এই ত্রুটিটিও পাচ্ছি। তবে এটি বাধা পেয়েছে। এটি কারণ হতে পারে বা এটি একটি ত্রুটি সহ প্রতিটি অনুরোধকে প্রভাবিত করবে না?
রায়ান-নিল মেস

@ রায়ান-নীলমেস, যদি আপনার টেমপ্লেটে সেই লাইনটি অনুপস্থিত থাকে তবে আপনি ত্রুটি পাবেন। সুতরাং এটি সম্ভব আপনার কয়েকটি টেমপ্লেট এটি রয়েছে এবং অন্যদেরও তা নেই।
জেমস ম্যাকমাহন 21

1
@ জেমসম্যাকমাহন ধন্যবাদ, আমি বুঝতে পারি যে আমার মামলাটি আসলে ব্যবহারকারীরা তাদের কুকিজ সাফ করার বা কুকিজ অবরুদ্ধ করার কারণে ঘটে is এই প্রশ্ন থেকে বোঝা শিখলাম!
রায়ান-নিল মেস

61

এই ত্রুটির জন্য বেশ কয়েকটি কারণ রয়েছে (রেল 4 সম্পর্কিত)।

১. <%= csrf_meta_tags %>পৃষ্ঠার বিন্যাসে উপস্থিত যাচাই করুন

২. অপশন form_forসহ সহায়ক ব্যবহার করে যদি অজ্যাক্স কল সহ সত্যতা টোকেন প্রেরণ করা হয় .আপনি যদি ফর্ম ব্লকের সাথে remote: trueথাকা লাইনটি অন্তর্ভুক্ত করতে পারেন না <%= hidden_field_tag :authenticity_token, form_authenticity_token %>

৩. যদি ক্যাশেড পৃষ্ঠা থেকে অনুরোধ প্রেরণ করা হচ্ছে, অনুরোধ প্রেরণকারী পৃষ্ঠার অংশটি বাদ দিতে টুকরো টুকরো ক্যাচিং ব্যবহার করুন button_toইত্যাদি etc. নইলে টোকেনটি বাসি / অবৈধ।

আমি সিএসআরএফ সুরক্ষা বাতিল করতে নারাজ হব ...


csrf_meta_tags <হেড> এ থাকা উচিত? আমি কীভাবে নিশ্চিত হতে পারি যে এটি টার্বোলিংকের সাথে বিরোধ নয়?
ঝাঁকুনি

37

কেবলমাত্র authenticity_tokenফর্মটি যুক্ত করা এটি আমার জন্য স্থির।

<%= hidden_field_tag :authenticity_token, form_authenticity_token %>

3
টেলিনটি ডিফল্টরূপে প্রেরণ করার কথা ails আমরা এটি স্পষ্টভাবে নির্দিষ্ট করতে চাই না। আমি অনুভব করছি টোকন এখানে এই পরিস্থিতিতে একরকম পরিবর্তিত হয়েছে।
অভি

1
তবে, আপনি যদি নিজের ফর্মটি সাহায্যকারীদের ব্যবহার না করে তৈরি করে থাকেন তবে আপনার এটি ম্যানুয়ালি রাখা উচিত।
আন্ড্রে গিমেরিস সাকাতা

30

সত্যতা টোকেনটি অন্য কোনও জায়গায় নয়, আপনার সাইটের কোনও ফর্ম থেকে একটি অনুরোধ জমা দেওয়া হয়েছে তা প্রমাণ করার জন্য আপনার দৃষ্টিতে উত্পন্ন এলোমেলো মান। এটি সিএসআরএফ আক্রমণ থেকে রক্ষা করে:

http://en.wikipedia.org/wiki/Cross-site_request_forgery

সেই ক্লায়েন্ট / আইপি কে তা পরীক্ষা করে দেখুন, দেখে মনে হচ্ছে তারা আপনার ভিউ লোড না করে আপনার সাইটটি ব্যবহার করছে।

আপনার যদি আরও ডিবাগ করা দরকার, এই প্রশ্নটি শুরু করার জন্য ভাল জায়গা: রেলস সত্যতা টোকেন বোঝা

ব্যাখ্যা করার জন্য সম্পাদিত: এর অর্থ তারা আপনার ফর্মটি আপনার ওয়েবসাইটে কখনও প্রেরণ না করে আপনার ফর্ম জমা দেওয়ার প্রক্রিয়াটি করতে কল করছে। এটি দূষিত হতে পারে (স্প্যাম মন্তব্য পোস্ট করে বলুন) বা এটি কোনও গ্রাহককে সরাসরি আপনার ওয়েব পরিষেবাদি এপিআই ব্যবহার করার চেষ্টা করছে তা নির্দেশ করতে পারে। আপনি কেবলমাত্র একজন যিনি আপনার পণ্যটির প্রকৃতি এবং আপনার অনুরোধগুলি বিশ্লেষণ করে এর উত্তর দিতে পারেন।


1
ধন্যবাদ, তবে সত্যতা টোকেন কী তা আমি ইতিমধ্যে জানি। সেই ক্লায়েন্ট / আইপি কে তা পরীক্ষা করে দেখুন, দেখে মনে হচ্ছে তারা আপনার ভিউ লোড না করে আপনার সাইটটি ব্যবহার করছে। দুঃখিত, "ভিউ লোড না করে" এর অর্থ কী?
নিকিতা রাইবাক

1
আমি বোঝাতে চাইছি যে কেউ (সম্ভবত কোনও স্প্যামার) আপনার আবেদনের ইউজার ইন্টারফেসের মাধ্যমে না গিয়ে আপনার ফর্মটিতে ডেটা জমা দিতে পারে। উদাহরণস্বরূপ কার্লের মতো একটি কমান্ড লাইন প্রোগ্রাম ব্যবহার করে এটি করা সম্ভব।
জন টপলি

জন ঠিক আছে। এর অর্থ তারা আপনার ফর্মটি আপনার ওয়েবসাইটে কখনও রেন্ডারিং ছাড়াই আপনার ফর্ম জমা দেওয়ার প্রক্রিয়াটির জন্য অ্যাকশনটিকে কল করছে। এটি দূষিত হতে পারে (স্প্যাম মন্তব্য পোস্ট করে বলুন) বা এটি কোনও গ্রাহককে সরাসরি আপনার ওয়েব পরিষেবাদি এপিআই ব্যবহার করার চেষ্টা করছে তা নির্দেশ করতে পারে। আপনি কেবলমাত্র একজন যিনি আপনার পণ্যটির প্রকৃতি এবং আপনার অনুরোধগুলি বিশ্লেষণ করে এর উত্তর দিতে পারেন।
উইনফিল্ড

ঠিক আছে, আমি উইনফিল্ডের মন্তব্যটি ভুল বুঝেছি। আমি ভেবেছিলাম যে আমি ব্রাউজার ব্যবহার করার পরে অ্যাপটি কোনওভাবে 'আমার দৃষ্টিভঙ্গি লোড' করতে কনফিগার করা হয়নি।
নিকিতা রাইবাক

1
আমার আরও একটি চিন্তা ছিল, এই অনুরোধগুলির মধ্যে একটি টোকেন অন্তর্ভুক্ত রয়েছে, তবে এটি বৈধ নয়। আপনার ফর্মটি বা অন্য কিছু রেন্ডার করে পৃষ্ঠাটি ক্যাশে করার কারণে এটি হতে পারে যা ফর্মের বাসি সংস্করণকে সম্ভাব্যভাবে তৈরি করে।
উইনফিল্ড

26

ActionController::InvalidAuthenticityTokenএকটি ভুল কনফিগার্ড বিপরীত প্রক্সি দ্বারাও হতে পারে। এটি যদি স্ট্যাক ট্রেসের মধ্যে থাকে তবে আপনি দেখতে একটি লাইনের মতো দেখতে পান Request origin does not match request base_url

যখন এইচটিটিপিএস অনুরোধের জন্য রিসিভার হিসাবে একটি বিপরীত প্রক্সি (যেমন এনজিনেক্স) ব্যবহার করে এবং ব্যাক-এন্ডে এনক্রিপ্ট করা অনুরোধটি (যেমন রেলস অ্যাপ্লিকেশন হিসাবে) প্রেরণ করা হয়, ব্যাকএন্ড (আরও নির্দিষ্টভাবে: র্যাক) মূল ক্লায়েন্টের অনুরোধ সম্পর্কে আরও তথ্যের সাথে কিছু শিরোনাম প্রত্যাশা করে যাতে বিভিন্ন প্রক্রিয়াজাতকরণ এবং সুরক্ষা ব্যবস্থা গ্রহণ করতে সক্ষম হয়।

আরও বিশদ এখানে উপলব্ধ: https://github.com/rails/rails/issues/22965

টিএল; ডিআর: সমাধানটি কয়েকটি শিরোনাম যুক্ত করে:

upstream myapp {
  server              unix:///path/to/puma.sock;
}

location / {
  proxy_pass        http://myapp;
  proxy_set_header  Host $host;
  proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header  X-Forwarded-Proto $scheme;
  proxy_set_header  X-Forwarded-Ssl on; # Optional
  proxy_set_header  X-Forwarded-Port $server_port;
  proxy_set_header  X-Forwarded-Host $host;
}

বাহ, আমি এর সমাধানের জন্য 3 ঘন্টা অনুসন্ধান করেছি এবং এটিই ছিল, ধন্যবাদ!
ইভেক্সোইও

রেলপথে এটি সমাধানের 6 ঘন্টা চেষ্টা করার জন্য আপনাকে অনেক ধন্যবাদ
জো হাফ ফেস

18

উত্তর দিতে দেরি করেও সমাধান পেয়েছি found

আপনি যখন নিজের এইচটিএমএল ফর্মটি নির্ধারণ করেন তখন সুরক্ষার কারণে আপনি প্রমাণীকরণ টোকেন স্ট্রিংটি মিস করেন যা নিয়ামককে পাঠানো উচিত। তবে যখন আপনি কোনও ফর্ম তৈরি করতে রেলগুলি ফর্ম সহায়ক ব্যবহার করেন আপনি নীচের মতো কিছু পাবেন

<form accept-charset="UTF-8" action="/login/signin" method="post">
  <div style="display:none">
    <input name="utf8" type="hidden" value="&#x2713;">
    <input name="authenticity_token" type="hidden" 
      value="x37DrAAwyIIb7s+w2+AdoCR8cAJIpQhIetKRrPgG5VA=">
    .
    .
    .
  </div>
</form>

সুতরাং সমস্যার সমাধানটি হ'ল সত্যতা_ টোকেন ক্ষেত্র যুক্ত করুন বা রেল ফর্ম সহায়কগুলি ব্যবহারের পরিবর্তে রেলগুলি অপসারণ, ডাউনগ্রেডিং বা আপগ্রেড করা।


9

আপনি যদি কিছু করেন rake rails:updateবা অন্যথায় সম্প্রতি পরিবর্তন করেছেন তবে config/initializers/session_store.rbএটি ব্রাউজারে পুরানো কুকিগুলির লক্ষণ হতে পারে cookies আশা করি এটি ডেভ / টেস্টে সম্পন্ন হয়েছে (এটি আমার জন্য ছিল), এবং আপনি কেবল ডোমেন সম্পর্কিত সমস্ত ব্রাউজার কুকিজ সাফ করতে পারেন।

যদি এটি উত্পাদন হয় এবং আপনি পরিবর্তিত হয়ে থাকেন keyতবে পুরানো কুকিগুলি ব্যবহার করার জন্য এটি আবার পরিবর্তন করার বিষয়টি বিবেচনা করুন (<- কেবল জল্পনা)।


হ্যাঁ! আমার জন্য, একটি খালি সেশন_স্টোর.আরবি থাকার কারণে ত্রুটি ঘটছিল।
লাফবার

6

জাভাস্ক্রিপ্ট কল সহ আমার এই সমস্যাটি ছিল। আমি ঠিক করেছি যে কেবল jquery_ujs প্রয়োগ করার জন্য প্রয়োগ করুন। Js ফাইলটিতে।


হ্যাঁ সঠিক, আমারও এই সমস্যাটি ছিল এবং আমি অ্যাপ্লিকেশন জেজে jquery_ujs যুক্ত করেছি। এটা কাজ করেছে.
অভি

3

আমাদের একই সমস্যা ছিল, তবে লক্ষ্য করেছি যে এটি কেবলমাত্র http: // ব্যবহারের অনুরোধের জন্য এবং https: // এর সাথে নয়। কারণটি ছিল secure: trueসেশন_স্টোরের জন্য:

Rails.application.config.session_store(
  :cookie_store,
  key: '_foo_session',
  domain: '.example.com',
  secure: true
)

HTTPS ব্যবহার করে স্থির করা হয়েছে ~ সর্বত্র :)


rails sউন্নয়নের জন্য আমি যে এসএসএল শেষ পয়েন্ট সেট করেছি তার পরিবর্তে (নন-এসএসএল) ব্যবহার করার সময় আমি এর মুখোমুখি হয়েছি । আপনার মন্তব্যটি পড়া না হওয়া পর্যন্ত আমি বুঝতে পারি না যে আমি কী করছি। আমি একবার এসএসএল ব্যবহারে ফিরে যেতে চাইলে জিনিসগুলি আবার কাজ শুরু করে। ধন্যবাদ!
কার্ল উইলবার

1
উন্নয়নের ক্ষেত্রে আমি এই সমস্যার মুখোমুখি হয়েছি। পরিবর্তে secure: trueআমি লিখেছিলামsecure: !Rails.env.development?
মারব

1

রেল 5 এর জন্য, protect_from_forgery prepend: trueএড়িয়ে যাওয়ার চেয়ে যুক্ত করা ভাল verify_authentication_token


5
কেন? আপনি একটি রেফারেন্স যোগ করতে পারেন?
কেভেরেল


0

আমার এই সমস্যা ছিল এবং এর কারণটি ছিল কারণ আমি আমার অ্যাপ্লিকেশনে একটি কন্ট্রোলার অনুলিপি করে আটকালাম। আমি পরিবর্তন ApplicationControllerকরতে হবেApplicationController::Base


0

লোকালহোস্টে আমারও একই সমস্যা ছিল। আমি অ্যাপটির জন্য ডোমেন পরিবর্তন করেছি, তবে ইউআরএল এবং হোস্ট ফাইলটিতে এখনও পুরানো ডোমেনটি ছিল। নতুন ডোমেন ব্যবহার করতে আমার ব্রাউজার বুকমার্ক এবং হোস্ট ফাইল আপডেট করে এবং এখন সবকিছু ঠিকঠাক কাজ করে।


0

আপনার এইচটিটিপিএসের জন্য আপনার এনজিআইএনএক্স সেটআপ থাকতে পারে তবে আপনার শংসাপত্রগুলি অবৈধ? আমি অতীতেও একই ধরণের সমস্যা পেয়েছি এবং HTTP থেকে https এ পুনর্নির্দেশ করা সমস্যার সমাধান করেছে


0

আমি পরীক্ষা করে দেখেছি <% = csrf_meta_tags%> উপস্থিত আছেন এবং ব্রাউজারে কুকিজ সাফ করে আমার জন্য কাজ করেছে।


0

একটি দ্রুত অ্যাপ্লিকেশন লোডের জন্য ক্রোম বাতিঘর সুপারিশ অনুসরণ করে, আমি আমার জাভাস্ক্রিপ্টটি সংযোজন করেছি:

views/layout/application.html.erb

<%= javascript_include_tag 'application', 'data-turbolinks-track' => 'reload', async: true %>

এটি সবকিছু ভেঙে ফেলেছে এবং আমার দূরবর্তী ফর্মগুলির জন্য টোকন ত্রুটি পেয়েছে। অপসারণ async: trueসমস্যার সমাধান করেছে।


0

এই উত্তরটি রুবেল অন রেলের পক্ষে আরও নির্দিষ্ট, তবে আশা করি এটি কাউকে সহায়তা করবে।

আপনাকে প্রতিটি নন-জিইটি অনুরোধের সাথে সিএসআরএফ টোকেন অন্তর্ভুক্ত করতে হবে। আপনি যদি জিকিউরি ব্যবহার করতে অভ্যস্ত হন, তবে রেলের একটি সহায়ক লাইব্রেরি রয়েছে যা jquery-ujsএটির উপরে তৈরি করে এবং কিছু গোপন কার্যকারিতা যুক্ত করে। এটি করে এমন একটি কাজ স্বয়ংক্রিয়ভাবে প্রতিটি ajaxঅনুরোধে সিএসআরএফ টোকেন অন্তর্ভুক্ত । এখানে দেখুন

আপনি যদি এ থেকে সরে যান তবে আমি আপনাকে একটি ত্রুটিযুক্ত অবস্থায় খুঁজে পেতে পারি। আপনি কেবল টোকেনটি ম্যানুয়ালি জমা দিতে পারেন বা ডিওএম থেকে টোকেনটি স্ক্র্যাপ করতে সহায়তা করতে অন্য একটি লাইব্রেরি ব্যবহার করতে পারেন। আরও বিস্তারিত জানার জন্য এই পোস্টটি দেখুন ।


-1

5 রেলগুলিতে, আমাদের 2 টি লাইনের কোড যুক্ত করতে হবে

    skip_before_action :verify_authenticity_token
    protect_from_forgery prepend: true, with: :exception

-2

ইনস্টল করার প্রক্রিয়া

gem 'remotipart' 

সাহায্য করতে পারি


3
যদিও এটি উত্তর হতে পারে তবে এটি উত্তরের প্রয়োজনীয় অংশটি অন্তর্ভুক্ত করতে এবং এটি কেন / কীভাবে কাজ করে তা ব্যাখ্যা করতে সহায়ক।
রায় লি

-15

2.3.5 থেকে 2.3.5 এ ডাউনগ্রেড করে সমস্যা সমাধান করা হয়েছে solved (পাশাপাশি কুখ্যাত 'আপনাকে পুনঃনির্দেশিত করা হচ্ছে।' সমস্যা)


@ ফ্লিপ সম্ভবত এটি গৃহীত উত্তর আপডেট করার একটি ধারণা?
লাফবার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.