এএসপি.নেট এমএস 11-100: আমি পোস্ট ফর্মের সর্বাধিক সংখ্যার সীমাটি কীভাবে পরিবর্তন করতে পারি?


196

মাইক্রোসফ্ট সম্প্রতি (12-29-2011) .NET ফ্রেমওয়ার্কে বেশ কয়েকটি গুরুতর সুরক্ষিত দুর্বলতার সমাধান করার জন্য একটি আপডেট প্রকাশ করেছে। এমএস 11-100 দ্বারা প্রবর্তিত সংস্থাগুলির মধ্যে একটি হ্যাশ টেবিলের সংঘর্ষের সাথে জড়িত একটি সম্ভাব্য ডিওএস আক্রমণ সাময়িকভাবে প্রশমিত করে। এটি উপস্থিত হ'ল এই ফিক্সটি এমন পাতাগুলি ভেঙে দেয় যা প্রচুর পোষ্ট ডেটা ধারণ করে। আমাদের ক্ষেত্রে, যে পৃষ্ঠাগুলিতে খুব বড় চেকবক্সের তালিকা রয়েছে on কেন এমন হবে?

কিছু বেসরকারী সূত্রগুলি ইঙ্গিত দেয় যে এমএস 11-100 পোস্টব্যাক আইটেমগুলিতে 500 এর একটি সীমা রাখে। আমি এমন কোনও মাইক্রোসফ্ট উত্স খুঁজে পাই না যা এটির নিশ্চিত করে। আমি জানি যে ভিউ স্টেট এবং অন্যান্য কাঠামো বৈশিষ্ট্যগুলি এই সীমাটির কিছুটা খেয়ে ফেলে। এমন কোনও কনফিগারেশন সেটিং রয়েছে যা এই নতুন সীমাটি নিয়ন্ত্রণ করে? আমরা চেকবক্স ব্যবহার থেকে সরিয়ে নিতে পারি তবে এটি আমাদের বিশেষ পরিস্থিতির জন্য বরং ভাল কাজ করে। আমরা প্যাচটি প্রয়োগ করতেও চাই কারণ এটি অন্য কিছু খারাপ জিনিস থেকে রক্ষা করে।

৫০০ সীমা নিয়ে আলোচনা করছেন আনুষ্ঠানিক উত্স:

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

সম্পাদনা: সীমা উদাহরণ সহ উত্স কোড (যা 1000 নয়, 500 নয় বলে মনে হয়) একটি মানক এমভিসি অ্যাপ্লিকেশন তৈরি করুন এবং নীচের কোডটি মূল সূচক দর্শনে যুক্ত করুন:

@using (Html.BeginForm()) 
{
    <fieldset class="fields">
        <p class="submit">
            <input type="submit" value="Submit" />
        </p>

        @for (var i = 0; i < 1000; i++)
        {
            <div> @Html.CheckBox("cb" + i.ToString(), true) </div>
        } 
    </fieldset>
}

এই কোড প্যাচ আগে কাজ করেছে। এটি পরে কাজ করে না। ত্রুটিটি হ'ল:

[অবৈধ অপারেশন এক্সসেপশন: অবজেক্টের বর্তমান অবস্থার কারণে অপারেশনটি বৈধ নয়]]
সিস্টেম . ওয়েলবিএইচটিপস ভ্যালু কালেকশন T থ্রোআইফ্যাক্সএইচটিএইচপিলেকশনকিসি এক্সসিডেড () +২২ সিস্টেম.ওয়েব.এইচটিপিভ্যালু কালেকশন।ফিলফ্র্যামএকনডেডবাইটস (বাইট [] এনকোডিং, ১১ এনকোডিং,
১১। এইচটিপিআরকিউস্ট.ফিলআইনফর্ম সংগ্রহ () +307


কিছু অতিরিক্ত লেগওয়ার্ক কীভাবে করা যায় এবং বিভাগটি যেখানে এটি 500 টি নির্দিষ্ট করে পোস্ট করেছে
ওও

3
এটাই ব্যাপার. (মাইক্রোসফ্ট থেকে) কোন বিভাগ নেই। কেবল অনানুষ্ঠানিক ভাষ্যকারদের কাছ থেকে যা তারা জানেন যে তারা কী সম্পর্কে কথা বলছেন বা নাও জানেন। আমি যাই হোক না কেন একটি লিঙ্ক এবং স্নিপেট পোস্ট।
কলিথিয়াম

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

1
এই বিষয়ে সাম্প্রতিক একটি প্রশ্ন নির্ধারণ করেছে যে ফিক্সটি পোস্টের সংখ্যা সীমাবদ্ধ করে ডসকে প্রশমিত করেছে।
জন স্যান্ডার্স

1
এই সম্পর্কে বিস্তারিত জানার জন্য সমর্থন.মাইক্রোসফট.কম / 2661403 দেখুন ।

উত্তর:


275

ওয়েব সেটিংসে এই সেটিংটি যুক্ত করার চেষ্টা করুন। আমি এটিএসপি নেট নেট এমভিসি 2 প্রকল্পের সাহায্যে নেট নেট N.০ এ পরীক্ষা করেছি এবং এই সেটিংটি দিয়ে আপনার কোডটি ফেলে দেওয়া হচ্ছে না:

<appSettings>
  <add key="aspnet:MaxHttpCollectionKeys" value="1001" />
</appSettings>

সীমা পরিবর্তন করার জন্য এটি এখনই কাজ করা উচিত (আপনি সুরক্ষা আপডেট প্রয়োগ করার পরে)।


আমি এখনও আমার মেশিনটি আপডেট করি নি, তাই রিফ্লেক্টর ব্যবহার করে আমি এইচটিটিপিভ্যালিউ কালেকশন ক্লাসটি পরীক্ষা করেছিলাম এবং এর ThrowIfMaxHttpCollectionKeysExceededপদ্ধতিটি নেই:

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

আমি KB2656351 ইনস্টল করেছি (.NET 4.0 এর জন্য আপডেট করুন), রিফ্লেক্টরে সমাবেশগুলি পুনরায় লোড করেছি এবং পদ্ধতিটি উপস্থিত হয়েছে:

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

সুতরাং যে পদ্ধতিটি অবশ্যই নতুন। আমি রিফ্লেক্টরে ডিসসেসেম্বল বিকল্পটি ব্যবহার করেছি এবং কোড থেকে আমি যা বলতে পারি তা থেকে এটি একটি অ্যাপসেটিং চেক করে:

if (this.Count >= AppSettings.MaxHttpCollectionKeys)
{
  throw new InvalidOperationException();
}

যদি এটি ওয়েব.কনফিগ ফাইলে মানটি না খুঁজে পায় তবে এটি এটি 1000 এ System.Web.Util.AppSettings.EnsureSettingsLoaded(একটি অভ্যন্তরীণ স্ট্যাটিক শ্রেণি) সেট করবে :

 _maxHttpCollectionKeys = 0x3e8;

এছাড়াও, অ্যালেক্সি গুসরভ দু'দিন আগে এই সেটিং সম্পর্কে টুইট করেছেন:

এবং এখানে জনাথন নেস (সিকিউরিটি ডেভলপমেন্ট ম্যানেজার, এমএসআরসি) এবং পিট ভোস (সিনিয়র রেসপন্স কমিউনিকেশন ম্যানেজার, বিশ্বাসযোগ্য কমিউটিং) এর সাথে একটি প্রশ্নোত্তর থেকে একটি সরকারী উত্তর দেওয়া হয়েছে :

প্রশ্ন: অ্যাপসেটেটিংস.ম্যাক্স এইচটিটিপকলেশন সর্বাধিক সংখ্যক ফর্ম এন্ট্রি সমন্বিত নতুন প্যারামিটারগুলি কী?

উ: হ্যাঁ তাই।


25
ওয়ান্ডারফুল। এগুলি এমন ধরণের উত্তর যা আমাকে
স্ট্যাকওভারফ্লো পছন্দ করে

4
এটি সত্যিই সহায়তা করেছে, আমি আশা করি আমার যদি আরও একটি অ্যাকাউন্ট থাকে যাতে আমি +2 দিতে পারি :)
misha

1
পুরো সার্ভারের জন্য এটিকে অ্যাপ্লিকেশনহোস্ট.কনফাইজে আপডেট করা যেতে পারে? নাকি মেশিন.কনফিগ?
andryuha

1
প্রতি পৃষ্ঠার স্তরে এই সীমাটি নিয়ন্ত্রণ করার কোনও উপায়? ( এখানে এবং এখানেও জিজ্ঞাসা করা হয়েছে ))
মাইক গুথ্রি

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

18

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

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0]
"MaxHttpCollectionKeys"=dword:00001388

একটি 64-বিট উইন্ডোজ সংস্করণের জন্য, ওয়াও 6432 নোডের নীচে কীটি সেট করুন:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\ASP.NET\1.1.4322.0]
"MaxHttpCollectionKeys"=dword:00001388

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

4

আমি কেবল অদ্ভুততা দেখছে এমন লোকদের জন্য এখানে আমার 0.02 ডলার যুক্ত করতে চাই।

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

উত্স দেখুন এবং 1000+ ভিউস্টেট লুকানো ক্ষেত্রগুলি অনুসন্ধান করুন এবং আপনার সমস্যাটি পেয়েছে।


1000+ ভিউস্টেট ক্ষেত্র? ফর্মটিতে কেবল একটি ভিউস্টেট ক্ষেত্র নেই। ফর্ম ক্ষেত্রের সংখ্যা বাড়ার সাথে সাথে মানটি কী বৃদ্ধি পায়।
অঙ্কুর-মি

3

ThrowIfMaxHttpCollectionKeysExceeded()এছাড়াও যোগ করা হয়েছে System.Web.HttpCookieCollection

দেখে মনে হচ্ছে কখন HttpCookieCollection.Get()ডাকা হবে, এটি অভ্যন্তরীণভাবে কল করছে HttpCookieCollection.AddCookie()যা তখন কল করছে ThrowIfMaxHttpCollectionKeysExceeded()

public HttpCookie Get(string name)
{
    HttpCookie cookie = (HttpCookie) base.BaseGet(name);
    if ((cookie == null) && (this._response != null))
    {
        cookie = new HttpCookie(name);
        this.AddCookie(cookie, true);
        this._response.OnCookieAdd(cookie);
    }
    return cookie;
}

internal void AddCookie(HttpCookie cookie, bool append)
{
    this.ThrowIfMaxHttpCollectionKeysExceeded();
    this._all = null;
    this._allKeys = null;
    if (append)
    {
        cookie.Added = true;
        base.BaseAdd(cookie.Name, cookie);
    }
    else
    {
        if (base.BaseGet(cookie.Name) != null)
        {
            cookie.Changed = true;
        }
        base.BaseSet(cookie.Name, cookie);
    }
}

আমরা যা দেখছি তা হ'ল কয়েক ঘন্টা ধরে ওয়েবসাইটটি ধীরে ধীরে ধীরে ধীরে এবং বাগিগিয়ার হয়ে যায়, যতক্ষণ না এটি ছুঁড়তে শুরু করে InvalidOperationExcpetion। এরপরে আমরা অ্যাপ-পুলটিকে পুনরায় ব্যবহার করি, যা আরও কয়েক ঘন্টা সমস্যার সমাধান করে।


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

1
দেখা যাচ্ছে যে আমাদের কাছে একটি কাস্টম কুকিপ্রভাইডার ছিল যা ভুলভাবে অনুরোধের অনুরোধের জন্য সিঙ্গেলটন রেফারেন্সটি দখল করছিল app ... যেমন আপনি উপরের কোড থেকে দেখতে পাচ্ছেন। তাই সময়ের সাথে সাথে, প্রতিটি ব্যবহারকারী সিস্টেমে অ্যাক্সেস করার সাথে সাথে এই সিঙ্গলটন সংগ্রহের সাথে বিভিন্ন কুকিজ যুক্ত করা হচ্ছিল ... এবং যেহেতু সাইটটি কুকিজের সাথে বা ছাড়াই কাজ করার জন্য তৈরি করা হয়েছিল, তাই এই বাগটি চিহ্নিত করা যায় নি (এখনও অবধি)
জোশুয়া বার্কার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.