জসনআরেক্সেস্ট বিহাইভিয়ারকে অ্যালাউট সেট করার সময় কোন 'সংবেদনশীল তথ্য' প্রকাশ করা যেতে পারে


112

আমি URLযখন returning Json(অন্তর্নির্মিত ব্যবহার করছি MVC JsonResult helper) আমার ব্রাউজারের ঠিকানা বার থেকে একটি নতুন পরীক্ষা করার সময় আমি একই পুরানো ত্রুটি পেয়ে যাচ্ছি :

এই অনুরোধটিকে অবরুদ্ধ করা হয়েছে কারণ সংবেদনশীল তথ্য তৃতীয় পক্ষের ওয়েব সাইটগুলিতে প্রকাশ করা যেতে পারে যখন এটি কোনও তে ব্যবহৃত হয় GET request। অনুমতি দিতে GET requests, সেট JsonRequestBehaviorকরুন AllowGet

অস্বীকৃতি জানাতে চেয়ে এবং ফিদলারের পোস্টের অনুরোধ করার জন্য আগুন জ্বালানোর পরিবর্তে, আমি ভাবছি ঠিক কী এটি একটি GETঅনুরোধটি প্রকাশ করে যে কোনও POSTঅনুরোধ তা করে না?

উত্তর:


82

বলুন আপনার ওয়েবসাইটে একটি GetUserওয়েব পদ্ধতি রয়েছে:

http://www.example.com/User/GetUser/32

যা একটি জেএসওএন প্রতিক্রিয়া দেয়:

{ "Name": "John Doe" }

যদি এই পদ্ধতিটি কেবলমাত্র POST অনুরোধগুলি গ্রহণ করে, তবে এজেন্টের http://www.example.com/User/GetUser/32পোষ্ট পদ্ধতিটি ব্যবহারের জন্য যদি একটি এজেএক্স অনুরোধ করা হয় তবে সামগ্রীটি কেবল ব্রাউজারে ফিরে আসবে । মনে রাখবেন যে আপনি সিওআরএস প্রয়োগ না করলে ব্রাউজার আপনার কাছে এই অনুরোধটি তৈরি করে এমন অন্যান্য ডোমেনগুলি থেকে ডেটা রক্ষা করবে।

তবে, আপনি যদি জিইটি অনুরোধগুলি মঞ্জুরি দিয়েছিলেন এবং সেই সাথে পোষ্টের পরিবর্তে জিইটির সাথে উপরের অনুরূপ একটি এজেএক্স অনুরোধ করার পাশাপাশি, দূষিত ব্যবহারকারী scriptএইচটিএমএলে একটি ট্যাগ ব্যবহার করে আপনার নিজের সাইটের প্রসঙ্গে আপনার জেএসএনকে অন্তর্ভুক্ত করতে পারে । যেমন www.evil.com:

<script src="http://www.example.com/User/GetUser/32"></script>

এই জাভাস্ক্রিপ্টটি অকার্যকর হওয়া উচিত www.evil.comকারণ আপনার ওয়েব পদ্ধতি দ্বারা প্রত্যাবর্তিত অবজেক্টটি পড়ার কোনও উপায় নেই। তবে, ব্রাউজারগুলির পুরানো সংস্করণগুলিতে বাগের কারণে (যেমন ফায়ারফক্স 3) জাভাস্ক্রিপ্টের প্রোটোটাইপ অবজেক্টগুলিকে পুনরায় সংজ্ঞায়িত করা এবং www.evil.comআপনার পদ্ধতিতে ফিরে আসা আপনার ডেটা পড়া সম্ভব করা সম্ভব । এটি জেএসএন হাইজ্যাকিং নামে পরিচিত।

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


25
দুর্দান্ত পোস্ট, তবে আপনি যদি নিয়ামককে একটি [অনুমোদন] ট্যাগ অন্তর্ভুক্ত করেন তবে আপনাকে সুরক্ষা সম্পর্কে চিন্তা করার দরকার নেই। আশা করি এই কোডটি কাউকে সহায়তা করবে, জসন (রিটার্নমসজি, জসনরেকভেস্টবিভাভিয়ার.অ্যালজিট)
ধনুকা

17
@ ধনুকা 7 .7: দুর্ভাগ্যক্রমে সত্য নয়। সিএসআরএফ আক্রমণগুলি যদি পদ্ধতিটিতে পার্শ্ব প্রতিক্রিয়া থাকে তবে (যেমন www.example.com/User/DeleteUser/32) অনুরোধটি প্রমাণীকরণের জন্য প্রয়োজনীয় কুকিজকে অন্তর্ভুক্ত করবে কারণ তারা ভুক্তভোগীর যন্ত্র থেকে আসছে। [Authorize]হবে না আপনি সংরক্ষণ পারেন একটি খুব পুরানো ব্রাউজার ক্ষেত্রে বিস্তারিত আক্রমন থেকে - এটা ব্যবহারকারী নিজেদের পরিদর্শন হয় www.evil.comতাই অনুরোধ www.evil.comকরে তোলে www.example.comঅনুমোদন কুকি উপস্থিত থাকবে।
সিলভারলাইটফক্স

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

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

1
@ কাস্ট্রোহেঞ্জ: না, কারণ এটির জন্য একটি শিরোনাম সেট করা দরকার যা স্ক্রিপ্ট এসসিআর-র জন্য জিইটি অনুরোধের সাথে প্রেরণ করা হবে না।
সিলভারলাইটফক্স

111

আপনার বিনিময়ে নিম্নলিখিত ব্যবহার করুন:

return this.Json("you result", JsonRequestBehavior.AllowGet);

7
কীভাবে এটি ওপি-র প্রশ্নের উত্তর দেয়? এই সমস্ত উত্তরটি হ'ল সবাইকে কীভাবে ব্যতিক্রমটি পেতে হবে তা জানানো ..
eaglei22

2
হ্যাঁ এটি ব্যবহার করুন .. এটি খালি ক্যাচ দিয়ে ধরার মতো। এই ছেলেরা ব্যবহার করবেন না (ঝুঁকিগুলি বোঝার আগে)। -1'ড

6
কমপক্ষে পরিণতির ব্যাখ্যা না দিয়ে লোককে সুরক্ষা সতর্কতা উপেক্ষা করতে বলা বেআইনী। -1
এডুয়ার্ডো ওয়াদা

58

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

আপনার যদি কোনও জিইটি-র প্রতিক্রিয়াতে জেএসএন পাঠাতে হয় এবং সংবেদনশীল ডেটা প্রকাশ না করে থাকে তবে আপনি স্পষ্টভাবে পদ্ধতিতে JsonRequestBehavior.AllowGetদ্বিতীয় প্যারামিটার হিসাবে পাস করে আচরণের অনুমতি দিতে পারবেন Json

যেমন

  [HttpGet] //No need to decorate, as by default it will be GET
  public JsonResult GetMyData(){  
    var myResultDataObject = buildMyData(); // build, but keep controller thin
    // delegating buildMyData to builder/Query Builder using CQRS makes easy :)
    return Json(myResultDataObject, JsonRequestBehavior.AllowGet);
  }

JSON Hijackingজিইটি পদ্ধতিতে জসনকে কেন ব্যবহার করবেন না সে সম্পর্কে ফিল হ্যাকের একটি আকর্ষণীয় নিবন্ধ এখানে


2
দুর্দান্ত পোস্ট। আপনার এইচটিটিপিএস ব্যবহার করার উপযুক্ত কারণ।
pqsk

6
আমি মনে করি না এইচটিটিপিএস এখানে সহায়তা করে।
শান ম্যাকমিলান

10

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

    return Json(yourObjectData, JsonRequestBehavior.AllowGet);

7

আপনার অবশ্যই জসনরেক্সেস্ট বিহাইভিয়ার ব্যবহার করা উচিত J জসন প্রতিক্রিয়াটির জন্য এইভাবে যান:

return Json(YourObject, JsonRequestBehavior.AllowGet);

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