ডাবল এসকেপিং সক্ষম করা কি বিপজ্জনক?


136

আমার কাছে একটি এএসপি.এনইটি এমভিসি অ্যাপ্লিকেশন রয়েছে যা একটি রুট যা / সন্ধান / <সন্ধানী> মাধ্যমে স্টাফ অনুসন্ধান করতে দেয়।

আমি যখন "অনুসন্ধান / এবিসি" সরবরাহ করি এটি ভাল কাজ করে তবে আমি যখন "/ অনুসন্ধান / এ + বি + সি" সরবরাহ করি (সঠিকভাবে ইউআরএল এনকোড থাকে) তখন আইআইএস 7 টি অনুরোধটি এইচটিটিপি ত্রুটি 404.11 দিয়ে প্রত্যাখ্যান করে ( অনুরোধ ফিল্টারিং মডিউলটি অস্বীকার করার জন্য কনফিগার করা হয় অনুরোধ যাতে ডাবল এস্কেপ ক্রম থাকে )। প্রথমত, এটি কেন এটি করে? এটি কেবলমাত্র URL টির অংশ হলে ত্রুটিটি ছুঁড়ে ফেলেছে বলে মনে হচ্ছে, তবে কোনও ক্যোয়ারী স্ট্রিংয়ের অংশ হিসাবে নয় (/ সংক্রমণ? Q = a + b + c ভাল কাজ করে)।

এখন আমি আমার ওয়েবকনফাইগের সুরক্ষা বিভাগে ডাবল পালানোর অনুরোধগুলি সক্ষম করতে পেরেছিলাম তবে এর প্রভাবগুলি বুঝতে না পারায় আমি তা করতে দ্বিধা বোধ করছি এবং না কেন সার্ভার অনুরোধটিকে "a + b + c" প্রত্যাখ্যান করবে? ইউআরএল অংশ কিন্তু কোয়েরি স্ট্রিং অংশ হিসাবে গ্রহণ।

কেউ কি ব্যাখ্যা করতে এবং কিছু পরামর্শ দিতে পারে?


7
আমি সার্ভারকে কল করার সম্ভাব্য আরও সঠিক বিকল্পটিও চেষ্টা করেছিলাম Uআরল পাথ এনকোড এবং /search/a%2520b%2520cমার্ক-আপের সাথে শেষ হয়েছিল যার ফলে একটি সুন্দর "একটি সম্ভাব্য বিপজ্জনক অনুরোধ রইল athপথ মানটি ক্লায়েন্টের (%)" ত্রুটি থেকে সনাক্ত করা হয়েছিল। আপনি জিততে পারবেন না বলে মনে হচ্ছে।
phাফ - বেন ডুগুইড

উত্তর:


158

সম্পাদনা করুন: প্রাসঙ্গিক বিভাগগুলিতে জোর দেওয়া হয়েছে।

মূলত: আইআইএস অতিরিক্ত চাপবিহীন হচ্ছে। আপনি যদি ইউরি ডিকোডড ডেটা (যেমন স্ট্রিং কনটেন্টেশনের মাধ্যমে স্থানীয় ফাইল সিস্টেম ইউআরআই উত্সাহিত করা) দিয়ে বিশেষত অযৌক্তিকভাবে কিছু না করেন তবে আপনি এই চেকটি নিরাপদে অক্ষম করতে পারেন can

চেকটি নিষ্ক্রিয় করতে নিম্নলিখিতগুলি এখানে করুন (এখান থেকে ):

<system.webServer>
    <security>
        <requestFiltering allowDoubleEscaping="true"/>
    </security>
</system.webServer>

যোগ চিহ্ন একটি অনুসন্ধান ইনপুট জন্য একটি বৈধ চরিত্র থাকে, তাহলে আপনি হবে প্রয়োজন পারমিট কোনো URI এর পথ থেকে যেমন ইনপুট প্রক্রিয়া আইআইএস থেকে "allowDoubleEscaping" সক্রিয়।

পরিশেষে, খুব সহজ, যদি সীমিত কাজটি কেবল '+' এড়াতে হয় এবং তার পরিবর্তে '% 20' ব্যবহার করা হয়। যাই হোক, + প্রতীক ব্যবহার করে একটি স্থান এনকোড হয় না বৈধ url এনকোডিং কিন্তু নির্দিষ্ট প্রোটোকলের একটি সীমিত সেটে এবং সম্ভবত ব্যাপকভাবে পিছন-সঙ্গতির কারণে সমর্থিত। যদি কেবল ক্যানোনিকালাইজেশন উদ্দেশ্যে হয় তবে আপনি কোনওভাবেই '% 20' হিসাবে স্থানগুলি এনকোডিংয়ের চেয়ে ভাল; এবং এটি আইআইএস 7 ইস্যুটিকে সুন্দরভাবে সরিয়ে দেয় (যা এখনও অন্যান্য সিকোয়েন্সগুলির জন্য ক্রপ করতে পারে, যেমন% 25ab))


3
আমি চেকটি নিষ্ক্রিয় করব এটি কোনও ঝামেলা এবং বেশিরভাগ অ্যাপগুলিকে অতিরিক্ত সুরক্ষা দেয় না provide
ইমন নের্বোন

3
আপনার কি এমন কোনও লিঙ্ক / রেফারেন্স রয়েছে যে এটি ডাবল এস্কেপিং অক্ষম করতে বেশ নিরাপদ? এছাড়াও, এই সুরক্ষা ব্যবস্থাটি ঘটতে বাধা দেয় কি?
অ্যালেক্স

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


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

2

আমি ঠিক would যোগ করতে কিছু তথ্য Eamon Nerbonne এর উত্তর "এর সাথে সম্পর্কিত কি করতে আপনার প্রশ্নের (whys ব্যাখ্যা নয়) এর" অংশ।
আপনি খুব সহজেই কোনও নির্দিষ্ট অ্যাপ্লিকেশনটির সেটিংস পরিবর্তন করতে পারেন

  1. অ্যাডমিন অধিকার সহ কনসোল খোলার (শুরু - সেমিডি - ডান ক্লিক করুন, প্রশাসক হিসাবে চালানো)
  2. নিম্নলিখিতটি টাইপ করুন (এখান থেকে নেওয়া: http://blogs.iis.net/thomad/archive/2007/12/17/iis7-rejecting-urls-containing.aspx ):

    %windir%\system32\inetsrv\appcmd set config "YOURSITENAME" -section:system.webServer/security/requestfiltering -allowDoubleEscaping:true

    (আপনি বিকল্প যেমন পারেন YOURSITENAMEসঙ্গে Default Web Siteডিফল্ট ওয়েবসাইট থেকে এই নিয়ম আবেদন করার জন্য)

  3. প্রবেশ করুন, প্রস্তুত।

একটি উদাহরণ:

  1. প্রথমত আমার একই সমস্যা ছিল: এইচটিটিপি ত্রুটি 404.11 - অনুরোধ ফিল্টারিং মডিউলটি এমন একটি অনুরোধ অস্বীকার করতে কনফিগার করা হয়েছে যাতে একটি ডাবল এস্কেপ ক্রম থাকে।
  2. উপরে উল্লিখিত পাঠ্যটিতে টাইপ করা: Drupal7 আরেকটি কার্যকর এইচটিটিপি ত্রুটির সমাধান 404.11 - অনুরোধ ফিল্টারিং মডিউলটি এমন একটি অনুরোধ অস্বীকার করতে কনফিগার করা হয়েছে যাতে একটি ডাবল এস্কেপ ক্রম থাকে।
  3. এখন এটি প্রত্যাশার মতো কাজ করে: এইচটিটিপি ত্রুটির সমাধান 404.11 - অনুরোধ ফিল্টারিং মডিউলটি এমন একটি অনুরোধ অস্বীকার করতে কনফিগার করা হয়েছে যাতে একটি ডাবল এস্কেপ ক্রম থাকে।

1

আপনি কি '/ অনুসন্ধান / এ / বি / সি' এর মতো ইউআরএল অনুসন্ধানের বিষয়ে চিন্তাভাবনা করেছেন?

আপনার মতো একটি রুট সেটআপ করা দরকার

search/{*path}

এবং তারপরে ক্রিয়াতে আপনার পথের স্ট্রিং থেকে অনুসন্ধান মানগুলি বের করুন।

এইচটিএইচএস
চার্লস


সমস্যাটি হ'ল অন্যান্য ইউআরএল এনকোড করা অক্ষর ('/' নিজেই সহ) অনুসন্ধানের অংশ হতে পারে।
অ্যালেক্স

আপনি কি সমস্ত '/' কে এনকোড করতে পারবেন না যা আসলে '% 2F' তে অনুসন্ধানের অংশ?
চার্লিনো

0

আমি আইআইএস 7.5 এর অধীনে একটি অ্যাপ্লিকেশনটিতে একটি সার্ভার.টান্সফরআরকেস্ট () করে চলেছি।

ফাইলের নামটি এনকোডিংয়ের ফলে ডাবল-পলায়ন সমস্যা দেখা দিয়েছে, তবে আমি যদি এটি এনকোড না করি তবে আমি "সম্ভাব্য বিপজ্জনক অনুরোধ.পথ" ত্রুটিতে চলে যাব

আমি সার্ভারে ট্রান্সফারআরকুইস্ট () পাস করে এমন ইউআরএলটিতে কোনও প্রোটোকল এমনকি একটি খালিও রেখে দেওয়া সমস্যা সমাধান করেছে।

কাজ করে না:

context.Server.TransferRequest("/application_name/folder/bar%20bar.jpg");

কাজ করে:

context.Server.TransferRequest("://folder/bar%20bar.jpg");
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.