প্রয়োজনীয় অ্যান্টি-ফোরজি ফর্ম ফিল্ড "__RecquestVerificationsToken" ব্যবহারকারীর নিবন্ধকরণে ত্রুটি নেই


141

আমি Membership.createব্যবহারকারীর ফাংশনটি ব্যবহার করছি , তারপরে নিম্নলিখিত ত্রুটিটি ঘটছে,

প্রয়োজনীয় অ্যান্টি-ফোরজি ফর্ম ফিল্ড "__RecquestVerificationsToken" উপস্থিত নেই

আমি এটা কিভাবে ঠিক করবো?

উত্তর:


218

আপনার কাছে [ValidateAntiForgeryToken]আপনার কর্ম সামনে অ্যাট্রিবিউট। @Html.AntiForgeryToken()আপনার ফর্মটিও যুক্ত করা উচিত ।


11
আমার একটি ওয়েব পৃষ্ঠা রয়েছে যা একই সমস্যা তবে পুরো জিনিসটি সঠিক। কি ভুল।
কন্ডাক্টক্লাইভার

: @ConductedClever আপনি সাবধানে এই নিবন্ধটি এ বেহালাবাদক এবং / অথবা Firebug (যে কোন ব্রাউজার দেব সরঞ্জাম), বর্ণন সঙ্গে সবকিছু (ক্ষেত্র, কুকি) পরীক্ষা করা উচিত asp.net/web-api/overview/security/...
webdeveloper

নিবন্ধন করুন এটি কাজ কিন্তু খুব কমই এই ত্রুটিটি পেয়ে যায় এবং কেন আমার কোনও ধারণা নেই?
কিউমাস্টার

আমার সবকিছু ঠিক আছে, আমার পরীক্ষাগুলিতে এটি কাজ করে, কোনও ক্লায়েন্টের মেশিনে এটি সম্প্রতি কাজ করেছিল তবে এখন এটি এই ত্রুটি দেয়। কেন আমি জানি না। এখানে তালিকাভুক্ত করা ছাড়া কারও কি অন্য ধারণা আছে দয়া করে?
আন্দ্রে ডব্রিন

1
Html.AntiForgeryToken();কাজ করে না !! পরিবর্তিত করা হচ্ছে @Html.AntiForgeryToken()কাজ
FindOutIslamNow

78

আমার ক্ষেত্রে, আমার ওয়েবকনফাইগে এটি ছিল:

<httpCookies requireSSL="true" />

তবে আমার প্রকল্পটি এসএসএল ব্যবহার না করার জন্য সেট করা হয়েছিল। এই লাইনটি সম্পর্কে মন্তব্য করা বা প্রজেক্ট সেটআপ করা সর্বদা এসএসএল ব্যবহারের জন্য এটি সমাধান করে।


3
আমার ক্ষেত্রে ওয়েবকনফাইগের এসএসএল প্রয়োজন ছিল তবে 80 এবং 443 উভয় পোর্টের জন্য আইআইএস বাইন্ডিং ছিল, তাই https টাইপকারী ব্যবহারকারীরা সঠিক আচরণ পাচ্ছিলেন এবং http টাইপকারী ব্যবহারকারীরা এই ত্রুটিটি পেয়েছিল, সমস্তটি https: / এ বাধ্য করার জন্য একটি পুনর্লিখনের নিয়ম রেখেছিল। / {HTTP_HOST} /: আর: 1} এটি ঠিক করেছে
ব্যবহারকারী 1069816

আপনাকে ধন্যবাদ my আমার ক্ষেত্রে IISএই বাঁধাই ছিল ( https » EmptyHostName » IP » 443) তবে ( https » www.mysite.com » IP » 443) এর জন্য কোনও বাঁধাই ছিল না । তাই আমি একটি সঙ্গে বাঁধাই একটি নতুন যোগ খালি নয় এমন হোস্টনেম জন্য httpsছিল ডোমেইন সমান এবং এটা সমস্যার সমাধান। আমার IISজোর http 2 httpsকরে পুনরায় লেখার সেটিংস রয়েছে ।
র্যাম


41

এছাড়াও [নিশ্চিত করুন যে [এইচটিপিপি]] এর অধীনে [ValidateAntiForgeryToken] ব্যবহার করবেন না।

  [HttpGet]
  public ActionResult MethodName()
  {
  ..
  }

1
এই উত্তরটি অন্যদের পরিপূরক করেছে এবং আমার সমস্যার সমাধান করেছে! ধন্যবাদ
লুকাস

1
এই উত্তরটি ধরে নিয়েছে যে আপনি কোনও জমা দেওয়া ডেটা সংরক্ষণ করছেন না (যা আপনি কোনও এইচটিপিগেটে থাকা উচিত নয়)। আপনি যদি হন তবে আপনার এখনও [ValidateAntiForgeryToken] সরবরাহ করা XSRF সুরক্ষা দরকার।
থেলেম

9

কুকি সক্ষম না থাকা সত্ত্বেও আপনি ত্রুটিটি পাবেন।


2
ভাল হিট। আমি ইন্টারনেট এক্সপ্লোরার ব্যবহার করছিলাম। ক্রোম ব্রাউজার ব্যবহার করা আমার জন্য সমস্যার সমাধান করেছে
FindOutIslamNow

এটি আমার সমস্যাও সমাধান করেছে। গুগল ক্রোমে কুকি সক্ষম করা। ধন্যবাদ
বৈজ্ঞানিক পদ্ধতি

7

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


6

অনুরোধের অংশ হিসাবে আমাদের মধ্যে ফাইলগুলি আপলোড করার জন্য আরেকটি সম্ভাবনা। যদি সামগ্রীর দৈর্ঘ্য অতিক্রম করে <httpRuntime maxRequestLength="size in kilo bytes" /> এবং আপনি অনুরোধ যাচাইকরণ টোকেনগুলি ব্যবহার করেন তবে ব্রাউজারটি 'The required anti-forgery form field "__RequestVerificationToken" is not present'অনুরোধের দৈর্ঘ্য ছাড়িয়ে যাওয়া বার্তার পরিবর্তে বার্তাটি প্রদর্শন করে ।

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


5

আপনার কন্ট্রোলারে নিশ্চিত হয়ে নিন যে আপনার মতো আপনার এইচটিপি বৈশিষ্ট্য রয়েছে:

[HttpPost]

নিয়ামকটিতেও বৈশিষ্ট্য যুক্ত করুন:

[ValidateAntiForgeryToken]

আপনার দৃষ্টিতে আপনার ফর্মটিতে আপনাকে লিখতে হবে:

@Html.AntiForgeryToken();

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


5

আমার ক্ষেত্রে, ফর্মটি জমা দেওয়ার জন্য আমার এই জাভাস্ক্রিপ্টটি ছিল:

$('form').submit(function () {
    $('input').prop('disabled', true);
});

এটি জমা দেওয়া ফর্মটি থেকে লুকানো অনুরোধটি যাচাইকরণ টোকেন সরিয়ে ফেলছিল। আমি এটিতে পরিবর্তন করেছি:

$('form').submit(function () {
    $('input[type=submit]').prop('disabled', true);
    $('input[type=text]').prop('readonly', true);
    $('input[type=password]').prop('readonly', true);
});

... এবং এটা ভাল কাজ করে।


আপনি কীভাবে লক্ষ্য করেছেন যে আপনি ইনপুটগুলি অক্ষম করলে অ্যান্টি কী প্রভাবিত হয়েছিল?
সেরে

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

3

আমি যদি এটির কারণে একই কারণে কেউ ত্রুটিটি অনুভব করে তবে এটি আমার সমাধান:

তোমার যদি থাকত Html.AntiForgeryToken();

এটি পরিবর্তন করুন @Html.AntiForgeryToken()


2

আমার ক্ষেত্রে কুকিজের জন্য ওয়েবকনফাইগে ভুল ডোমেন কারণ ছিল:

<httpCookies domain=".wrong.domain.com" />

yeep! যদি আপনি স্থানীয় কম্পিউটারে <httpCookies ডোমেন = "লোকালহোস্ট" /> টাইপ করেন তবে কেবলমাত্র স্থানীয় কম্পিউটার কুকিজেই কাজ করবে এবং যদি আপনি অন্য মেশিনে আপনার সাইটটি খোলার চেষ্টা করেন তবে আপনি এটি আইপি (192 192.168.1.43) প্রবেশ করবেন যা বিন্যাস কাজ করবে না এটি "লোকালহোস্ট"
ব্যবহারকারী 3419036

2

আমার ক্ষেত্রে এটি ওয়েবকনফিগটিতে যুক্ত requireSSL=trueকরার কারণে httpcookiesযা অ্যান্টিফোরজিটোকেন কাজ বন্ধ করে দিয়েছে। উদাহরণ:

<system.web>
  <httpCookies httpOnlyCookies="true" requireSSL="true"/>
</system.web>

উভয় করতে requireSSL=trueএবং @Html.AntiForgeryToken()কাজ আমি ভিতরে এই লাইন যোগ Application_BeginRequestমধ্যেGlobal.asax

    protected void Application_BeginRequest(object sender, EventArgs e)
  {
    AntiForgeryConfig.RequireSsl = HttpContext.Current.Request.IsSecureConnection;
  }

2

স্বতন্ত্র ব্যবহারকারীর অ্যাকাউন্টগুলির সাথে ASP.NET এর জন্য ডিফল্ট লগইন সহ ক্রোমে এই ত্রুটিটি পেয়েছে

.cshtml:

@using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
    @Html.AntiForgeryToken()
    <h4>Use a local account to log in.</h4>

নিয়ন্ত্রক:

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)

সাইটের জন্য সাইটের ডেটা সাফ করে সমাধান করা:

এখানে চিত্র বর্ণনা লিখুন


ঠিক আছে এর কাজ। তবে বারবার এই ঘটনা ঘটছে। ফায়ারফক্সে একই প্রকল্পটি সঠিকভাবে চলছে। আমি কি করতে পারি?
21

@ ক্যানেরেক আপনার একই ডোমেন সহ বেশ কয়েকটি বিভিন্ন প্রকল্প / সাইট রয়েছে? প্রাক্তন লোকালহোস্ট, app.site.com এবং app2.site.com ইত্যাদি? এটি সাধারণত এর কারণেই ঘটে।
ওগ্লাস

0

বেশ কয়েকটি কন্ট্রোলারের উপর আমার ইপি সার্ভার সমাধানে সূচক ক্রিয়ায় একটি সামগ্রীআউটপুট ক্যাশে বৈশিষ্ট্য ছিল যা এইচটিপিগেটকে গ্রহণ করেছিল। এই ক্রিয়াকলাপের প্রতিটি দৃশ্যে একটি ফর্ম থাকে যা এইচটিপিপস্ট পোস্টে একই নিয়ামককে বা অন্যকে পোস্ট করে। যত তাড়াতাড়ি আমি attrib সমস্ত সূচক ক্রিয়া সমস্যাটি থেকে সেই বৈশিষ্ট্যটি সরিয়েছি।


0

কারণ এটি এর প্রথম অনুসন্ধানের সাথে আসে:

আমার কাছে এই সমস্যাটি কেবল ইন্টারনেট এক্সপ্লোরারে ছিল এবং সমস্যাটি কী তা বুঝতে পারে না। দীর্ঘ গল্প সংক্ষেপে এটি টোকেনের কুকি অংশটি সংরক্ষণ করছিল না কারণ আমাদের (উপ) ডোমেনটিতে এটি একটি আন্ডারস্কোর ছিল। ক্রোমে কাজ করেছেন তবে আইই / এজ এটি পছন্দ করেন নি।


0

এখানে অন্যান্য সমস্ত উত্তরও বৈধ, তবে তাদের মধ্যে কেউই যদি সমস্যাটি সমাধান না করে তবে প্রকৃত শিরোনামগুলি সার্ভারে প্রেরণ করা হচ্ছে তাও পরীক্ষা করা উচিত।

উদাহরণস্বরূপ, nginx এর পিছনে লোড ভারসাম্যপূর্ণ পরিবেশে, ডিফল্ট কনফিগারেশনটি সার্ভারে অনুরোধটি প্রেরণ করার আগে __RecquestVerificationsToken শিরোনামটি সরিয়ে ফেলা হয় , দেখুন: সরল এনজিনেক্স বিপরীত প্রক্সিটি কিছু শিরোনামকে ছাঁটাই করে মনে হচ্ছে seems


0

কখনও কখনও আপনি ফলাফলের তালিকা সহ একটি ফর্ম ক্রিয়া পদ্ধতি লিখছেন। এই ক্ষেত্রে, আপনি একটি ক্রিয়া পদ্ধতিতে কাজ করতে পারবেন না। সুতরাং একই নামের সাথে আপনার দুটি ক্রিয়া পদ্ধতি থাকতে হবে। একজনের সাথে [HttpGet]আর একজনের সাথে[HttpPost] গুণ ।

আপনার [HttpPost]ক্রিয়া পদ্ধতিতে, [ValidateAntiForgeryToken]বৈশিষ্ট্য সেট করুন @Html.AntiForgeryToken()এবং আপনার এইচটিএমএল ফর্মটিও রেখে দিন।


0

আমার ক্ষেত্রে আমি একটি এজেএক্স পোস্ট করার সময় এই ত্রুটিটি পেয়েছিলাম, দেখা গেল যে __RecquestVerificationsToken মানটি কলটি পেরিয়ে যাচ্ছিল না। আমাকে ম্যানুয়ালি এই ক্ষেত্রটির মান খুঁজে পেতে হয়েছিল এবং এটিকে শেষ পয়েন্টে প্রেরিত ডেটা অবজেক্টের সম্পত্তি হিসাবে সেট করতে হয়েছিল।

অর্থাত data.__RequestVerificationToken = $('input[name="__RequestVerificationToken"]').val();


উদাহরণ

এইচটিএমএল

  <form id="myForm">
    @Html.AntiForgeryToken()

    <!-- other input fields -->

    <input type="submit" class="submitButton" value="Submit" />
  </form>

জাভাস্ক্রিপ্ট

$(document).on('click', '#myForm .submitButton', function () {
  var myData = { ... };
  myData.__RequestVerificationToken = $('#myForm input[name="__RequestVerificationToken"]').val();

  $.ajax({
    type: 'POST',
    url: myUrl,
    data: myData,
    contentType: 'application/x-www-form-urlencoded; charset=utf-8',
    dataType: 'json',
    success: function (response) {
      alert('Form submitted');
    },
    error: function (e) {
      console.error('Error submitting form', e);
      alert('Error submitting form');
    },
  });
  return false; //prevent form reload
});

নিয়ামক

    [HttpPost]
    [Route("myUrl")]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> MyUrlAsync(MyDto dto)
    {
        ...
    }

আসলে আপনি যদি নিজের মাইড্টো ক্লাসের কাঠামো সংজ্ঞায়িত করেন তবে এটি খুব সহায়ক হবে
চন্দন কুমার

তবে আমি নিশ্চিত নই যে এটি আসলে খুব সহায়ক হবে এবং উদাহরণ কোডটি এখন public class MyDto { public bool Whatever { get; set; } }
অনেকটাই

-1

আমি আমার ভাগ করে নিতে চাই, আমি কৌনিক জালিয়াতির সাথে এসপ নেটওয়্যার এমভিসি 4 ব্যবহার করে এই অ্যান্টি ফোরজিরিটোকেন টিউটোরিয়ালটি অনুসরণ করে চলেছি, তবে $ http.post ব্যবহারের জন্য আমি অনুরোধ করলেই এটি একটি ব্যতিক্রম ছুঁড়ে দেয় এবং আমি সমাধানটি খুঁজে বের করে কেবল 'এক্স- অনুরোধ-সহ ': X http.post এর শিরোনামগুলিতে ' XMLHttpRequest ' , কারণ এটি দেখতে মনে হচ্ছে(filterContext.HttpContext.Request.IsAjaxRequest()) হিসাবে স্বীকৃতি দেয় না এবং এখানে আমার উদাহরণ কোড is

App.js

var headers = { 'X-Requested-With': 'XMLHttpRequest', 'RequestVerificationToken': $scope.token, 'Content-Type': 'application/json; charset=utf-8;' };

$http({ method: 'POST', url: baseURL + 'Save/User', data: JSON.stringify($scope.formData), headers: headers }).then(function (values) { alert(values.data); }).catch(function (err) { console.log(err.data); });


SaveController

[HttpPost] [MyValidateAntiForgeryToken] public ActionResult User(UserModel usermodel) { ....

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