আমি কীভাবে রেজার ব্যবহার করে আমার ভিউতে আনঙ্কডবিহীন জসনকে লিখতে পারি?


153

আমি রেজার ব্যবহার করে আমার এসপ নেট নেট এমভিসি ভিউতে JSON হিসাবে কোনও অবজেক্ট লেখার চেষ্টা করছি:

<script type="text/javascript">
  var potentialAttendees = @Json.Encode(Model.PotentialAttendees);
</script>

সমস্যাটি হ'ল আউটপুটে JSON এনকোড করা আছে, এবং আমার ব্রাউজারটি এটি পছন্দ করে না। উদাহরণ স্বরূপ:

<script type="text/javascript">
    var potentialAttendees = [{&quot;Name&quot;:&quot;Samuel Jack&quot;},];
</script>

আনজারডবিহীন জেএসওএন নির্গত করতে আমি রেজারকে কীভাবে পাব?

উত্তর:


190

তুমি কর:

@Html.Raw(Json.Encode(Model.PotentialAttendees))

বিটা 2 এর আগে রিলিজগুলিতে আপনি এটি পছন্দ করেছেন:

@(new HtmlString(Json.Encode(Model.PotentialAttendees)))

3
আমি আমার অবজেক্টের বৈশিষ্ট্যে কিছু এনকোডযুক্ত পাঠ্য চাইলে আমি কী করতে পারি? \, {Ur "UrlPart \": T "TjcolklFX5c c", Title "শিরোনাম \": \ "যখন মামা ইসন Home u0027t হোম \"}, {\ "উদাহরণস্বরূপ This এটি বিকাশটি ভেঙে ফেলবে জেএস মনে করে যে '' পালিয়ে যাচ্ছে দেশীয় স্ট্রিং ডিক্লারেশন এর বর্ণ a = '' একই জন্য ""
এ্যানি

@ সোমারর্যান্ডম নাম আপনি এর javascriptserializerজন্য ব্যবহার করতে পারেন@Html.Raw(javascriptSerializerObjecct.Serialize(myObject))
ভাইসকুল

আমরা এমভিসি 5 ব্যবহার করে 2017 এ আছি এবং এই উত্তরটি এখনও নিখুঁত!
গ্যাব্রিয়েল এস্পিনোজা

এই উত্তরটি একমাত্র পুরোপুরি কার্যকর হয়। ধন্যবাদ!
জিন পল

43

@ ডেভিড-কে- ইগহেড পরামর্শ দেয় যে নিউটনসফটস এর JsonConvert.SerializeObjectমতো আচরণ করে না Json.Encodeএবং এক্সএসএস আক্রমণ পর্যন্ত আপনাকে উন্মুক্ত করে ।

এই কোডটি একটি রেজার ভিউতে ফেলে দেখুন যে Json.Encodeব্যবহারটি নিরাপদ এবং নিউটোনসফটটিকে জাভাস্ক্রিপ্ট প্রসঙ্গে নিরাপদ করা যায় তবে কিছু অতিরিক্ত কাজ ছাড়াই নয়।

<script>
    var jsonEncodePotentialAttendees = @Html.Raw(Json.Encode(
        new[] { new { Name = "Samuel Jack</script><script>alert('jsonEncodePotentialAttendees failed XSS test')</script>" } }
    ));
    alert('jsonEncodePotentialAttendees passed XSS test: ' + jsonEncodePotentialAttendees[0].Name);
</script>
<script>
    var safeNewtonsoftPotentialAttendees = JSON.parse(@Html.Raw(HttpUtility.JavaScriptStringEncode(JsonConvert.SerializeObject(
        new[] { new { Name = "Samuel Jack</script><script>alert('safeNewtonsoftPotentialAttendees failed XSS test')</script>" } }), addDoubleQuotes: true)));
    alert('safeNewtonsoftPotentialAttendees passed XSS test: ' + safeNewtonsoftPotentialAttendees[0].Name);
</script>
<script>
    var unsafeNewtonsoftPotentialAttendees = @Html.Raw(JsonConvert.SerializeObject(
        new[] { new { Name = "Samuel Jack</script><script>alert('unsafeNewtonsoftPotentialAttendees failed XSS test')</script>" } }));
    alert('unsafeNewtonsoftPotentialAttendees passed XSS test: ' + unsafeNewtonsoftPotentialAttendees[0].Name);
</script>

আরো দেখুন:


তারা Json.Encode যুক্ত করার পরে আপনার কোনও ধারণা আছে? আমি জানতাম না যে পৃষ্ঠায় জসন sertোকানোর জন্য নিরাপদ উপায় ছিল এবং আমি জানি যে অতীতে আমি এটি নিয়ে প্রচুর গবেষণা করেছিলাম।
ক্রিস মেরিসিক

1
Json.Encodeযতক্ষণ না আমি মনে করতে পারি ততক্ষণ ধরে চলে গেছে তবে ক্ষয়ক্ষতিটি হ'ল এটি মাইক্রোসফ্টের প্রয়োগ প্রয়োগ করে যা অ-মানক তারিখকে ছাড়িয়ে যায় (এবং অন্যান্য উদ্বেগজনক জিনিসগুলি করতে পারে)। আমি নিউটোনসফ্টের ব্যবহারকে JsonConvert.SerializeObjectযথাযথ পালানোর সাথে মিলিত করতে এবং উত্সাহিত করি কারণ এর আরও ভাল ফলাফল রয়েছে।
জেরেমি কুক

2
খুশী আমি স্ক্রোল করে নিলাম। অবিলম্বে আমি গৃহীত উত্তরটি দেখেছি, আমি আশা করি এটি করার কোনও নিরাপদ উপায় আছে।
হিমশীতল

এইচটিপিটিউটিলিটি.জভা স্ক্রিপ্ট স্ট্রিংএকোড সংস্করণটি জেএসওএন-এ উদ্ধৃতি চিহ্নগুলি এনকোড করে, এটি কোনও স্ক্রিপ্টে [টাইপ = 'অ্যাপ্লিকেশন / জেসন'] ব্যবহার করা হলে এটি অবৈধভাবে উপস্থাপন করে, যা দুঃখের বিষয়।
পিট কিরখাম

1
ভবিষ্যতের স্বরে দ্রষ্টব্য: আপনি যেটি ব্যবহার করতে চান তা হ'ল: @ এইচটিএমএল.রা (জসন.এনকোড ())
পানগাম্মা

12

নিউটনসফট ব্যবহার করা হচ্ছে

<script type="text/jscript">
  var potentialAttendees  = @(Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model.PotentialAttendees)))
</script>

1
এটি XSS দুর্বলতার জন্য সম্ভাব্যরূপে দুর্বল যা জসন.এনকোড স্থির করে দেয় তবে JsonSerializerSettings.StringEscapeHandlingএনকোডিং সক্ষম করতে আপনি ওভাররাইড করতে পারেন । stackoverflow.com/a/50336590/6950124
কেভিন সেক্রিস্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.