কী কারণে এই "বেস-64৪ চর অ্যারের অবৈধ দৈর্ঘ্য" ঘটছে?


91

আমার এখানে যেতে খুব সামান্য আছে। আমি স্থানীয়ভাবে এটি পুনরুত্পাদন করতে পারি না, তবে ব্যবহারকারীরা ত্রুটি পেলে আমি একটি স্বয়ংক্রিয় ইমেল ব্যতিক্রম বিজ্ঞপ্তি পাই:

Invalid length for a Base-64 char array.

  at System.Convert.FromBase64String(String s)
  at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString)
  at System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState)
  at System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState)
  at System.Web.UI.HiddenFieldPageStatePersister.Load()

আমি ভেবে দেখতে আগ্রহী যে ডেটাতে ভিউস্টেটের জন্য বরাদ্দ করা হচ্ছে এমন একটি সমস্যা রয়েছে। উদাহরণ স্বরূপ:

List<int> SelectedActionIDList = GetSelectedActionIDList();
ViewState["_SelectedActionIDList"] = SelectedActionIDList;

স্থানীয়ভাবে ত্রুটিটি পুনরুত্পাদন করতে না পেরে ত্রুটির উত্সটি অনুমান করা কঠিন।

কারও যদি এই ত্রুটি নিয়ে কোনও অভিজ্ঞতা থাকে তবে আমি কী জানতে পেরেছি তা জানতে চাই।

উত্তর:


36

ভাল আকারের ভিউস্টেটের মিশ্রণ এবং আক্রমণাত্মক কন্টেন্ট-ফিল্টারিং ডিভাইস / ফায়ারওয়ালের (বিশেষত কে -12 শিক্ষাপ্রতিষ্ঠানের সাথে কাজ করার সময়) সংমিশ্রণের কারণে আমি এই ত্রুটিটি দেখেছি।

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

এসকিউএল সার্ভারে ভিউস্টেট সংরক্ষণের জন্য রেফারেন্স:
এমএসডিএন - পেজস্টেটপিরসিটার
এএসপি জোটের সংক্ষিপ্ত বিবরণ - এসকিউএল সার্ভার কোড প্রকল্পে ভিউস্টেট সংরক্ষণের সহজ পদ্ধতি
- ভিউস্টেট সরবরাহকারী মডেল


আমি পৃষ্ঠাটির Veiwstate অনুলিপি করে ওয়ার্ডে আটকালাম। এটি 86000 অক্ষরের বেশি ছিল। এটা অনেক বেশি মনে হচ্ছে।
স্লিম

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

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

4
86000 টিরও বেশি দীর্ঘ চরিত্রের সাথে আমি আরও একটি সমস্যা নিয়ে এসেছি (এটি সম্ভবত আমি মনে করি 85K এর কাছাকাছি হতে পারে, একক-বাইট চরগুলি ধরে ধরে) এটি হ'ল আপনার নেট নেট অ্যাপ্লিকেশনটি বৃহত অবজেক্টের স্তূপে ভিউসেট স্ট্রিংগুলিও লাগানো শুরু করতে পারে যা হিপ তৈরি করতে পারে অ্যাপ্লিকেশন পুলটি পুনর্ব্যবহারযোগ্য না হলে সময়ের সাথে বিভাজন (এবং শেষ পর্যন্ত আউটআফমিউরিঅ্যাক্সপশন)।
অযৌক্তিক

আমি একই সমস্যা পেয়েছি, কীভাবে এই সমস্যাটি সমাধান করবেন দয়া করে এটি পরিষ্কার করুন y
সাজিত

84

UrlDecode পাঠ্য প্রক্রিয়া করার পরে, এটি সমস্ত '+' অক্ষরকে '' এর সাথে প্রতিস্থাপন করে ... এভাবে ত্রুটি। আপনার এ বিবৃতিটি এটিকে আবার 64 বেসটিকে সামঞ্জস্য করার জন্য কল করা উচিত:

        sEncryptedString = sEncryptedString.Replace(' ', '+');

দুর্দান্ত জিনিস। ধন্যবাদ আমি একটি সিএস + এমএফসি অ্যাপ্লিকেশন থেকে একটি এএসপি.এনইটি ওয়েব পরিষেবা কল করেছিলাম এবং এটি সমাধানের চেষ্টা করে এবং ইতিমধ্যে এটিতে বেশ কয়েক ঘন্টা ব্যয় করার পরে অনেক দিক থেকে শাখা বন্ধ করে দিতে পারি। আপনি সবেমাত্র আমাকে অনেক সময় বাঁচিয়েছেন।
nspire

4
এই সমস্যাটিকে কেবল আঘাত করুন এবং আপনি যেমনটি বলেছিলেন এটি ফাঁকা রয়েছে, +এটির স্থির করে। বীর!
mattytommo

এই কোডটি কোথায় অন্তর্ভুক্ত করবেন সে সম্পর্কে কেউ গাইডেন্স দিতে পারেন? আমি এই সমস্যাটি প্রায়শই মোকাবিলা করছি, তবে কোড স্নিপেট থেকে, ঠিক করতে হবে কোথায় তা ঠিক করতে পারি।
dst3p

@ dst3p প্রসেসিং পাইপলাইনে যেখানেই ত্রুটির মুখোমুখি হোন সেখানে এটি ব্যবহার করুন। আপনার স্ট্যাক ট্রেস পরীক্ষা করুন এবং দেখুন যে পদ্ধতিটি ত্রুটির কারণ ঘটছে।
জালাল এল শায়ের

21

আমার অনুমান যে কোনও কিছু হয় খুব বেশিবার এনকোডিং হয় বা ডিকোডিং হয় - বা আপনি একাধিক লাইনের সাথে পাঠ্য পেয়েছেন।

বেস 64 স্ট্রিং দৈর্ঘ্যে 4 টি অক্ষরের একাধিক হতে হবে - প্রতি 4 টি অক্ষর ইনপুট ডেটার 3 বাইট উপস্থাপন করে। একরকম, এএসপি.এনইটি দ্বারা ফিরিয়ে দেওয়া ভিউর স্টেটের ডেটাটি দূষিত হয়ে গেছে - দৈর্ঘ্য 4 এর একাধিক নয়।

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


আমার ক্ষেত্রে ব্রাউজার সবসময় সাফারি হয় মোবাইল বা ডেস্কটপ সংস্করণ
cockypup

12

এটা চেষ্টা কর:

public string EncodeBase64(string data)
{
    string s = data.Trim().Replace(" ", "+");
    if (s.Length % 4 > 0)
        s = s.PadRight(s.Length + 4 - s.Length % 4, '=');
    return Encoding.UTF8.GetString(Convert.FromBase64String(s));
}

এই পদ্ধতিটি সমস্যার সমাধানে সহায়তা করেছে। যদিও আমি ইউটিএফ 8 এনকোডিং ব্যবহার করি নি
অভিষেক শ্রীবাস্তব

11
int len = qs.Length % 4;
            if (len > 0) qs = qs.PadRight(qs.Length + (4 - len), '=');

যেখানে qsকোনও বেস 64 এনকোডড স্ট্রিং রয়েছে


8

অন্যরা যেমন উল্লেখ করেছে যেহেতু যখন কিছু ফায়ারওয়াল এবং প্রক্সিগুলি প্রচুর পরিমাণে ভিউস্টেট ডেটাযুক্ত পৃষ্ঠাগুলিতে অ্যাক্সেস আটকাতে পারে তখন এটি হতে পারে।

এএসপি.এনইটি ২.০ ভিউস্টেট চ্যাঙ্কিং প্রক্রিয়াটি চালু করে যা ভিউস্টেটটিকে পরিচালনাযোগ্য খণ্ডে পরিণত করে, ভিউস্টেটটিকে প্রসেস / ফায়ারওয়ালটি ইস্যু ছাড়াই পাস করার অনুমতি দেয়।

এই বৈশিষ্ট্যটি সক্ষম করতে কেবল আপনার ওয়েব কোডফাইগ ফাইলটিতে নিম্নলিখিত লাইনটি যুক্ত করুন।

<pages maxPageStateFieldLength="4000">

এটি আপনার ভিউস্টেটের আকার হ্রাস করার বিকল্প হিসাবে ব্যবহার করা উচিত নয় তবে আক্রমণাত্মক প্রক্সি এবং এর মতো ফলস্বরূপ "বেস-64৪ চর অ্যারের জন্য অবৈধ দৈর্ঘ্য" ত্রুটির বিপরীতে এটি কার্যকর ব্যাকস্টপ হতে পারে।


এর কি কোনও পার্শ্ব প্রতিক্রিয়া হতে পারে?
মনস্টার এমএমআরপিজি

আমি কখনও পর্যবেক্ষণ করেছি এমন কিছুই নয়, ভিউস্টেটে আরও তথ্য
রেড তাজ

সুতরাং আপনার অনুকূল দৈর্ঘ্য কি? আমি এটি 1024 সেট করেছি
মনস্টার এমএমআরপিজি

1

দুঃখের সাথে এটি কোনও উত্তর নয়। কিছু সময়ের জন্য মাঝে মাঝে ত্রুটির মধ্যে দৌড়ানোর পরে এবং অবশেষে এটি ঠিক করার চেষ্টা করার জন্য যথেষ্ট ক্ষুব্ধ হওয়ার পরে, আমি এখনও কোনও সমাধান খুঁজে পাইনি। তবে আমি আমার সমস্যার পুনঃপ্রজননের একটি রেসিপি নির্ধারণ করেছি, যা অন্যকে সাহায্য করতে পারে।

আমার ক্ষেত্রে এটি কেবলমাত্র স্থানীয় হস্ট সমস্যা, আমার ডেভ মেশিনে অ্যাপটির ডিবিও রয়েছে। এটি একটি .NET 2.0 অ্যাপ্লিকেশন যা আমি ভিএস2005 দিয়ে সম্পাদনা করছি। উইন 64৪ বিট মেশিনে ভিএস ২০০৮ এবং .NET 3.5 ইনস্টল রয়েছে।

বিভিন্ন রূপ থেকে ত্রুটিটি কী উত্পন্ন করবে তা এখানে রয়েছে:

  1. ফর্মটির একটি নতুন কপি লোড করুন।
  2. ফর্মের যে কোনও নিয়ন্ত্রণের সাথে কিছু ডেটা এবং / অথবা পোস্টব্যাক প্রবেশ করান। যতক্ষণ না উল্লেখযোগ্য দেরি না হয় ততক্ষণ আপনার পছন্দ মতো সমস্ত কিছু পুনরাবৃত্তি করুন এবং কোনও ত্রুটি ঘটবে না।
  3. কিছুক্ষণ অপেক্ষা করুন (সম্ভবত 1 বা 2 মিনিট, 5 এর বেশি নয়) এবং অন্য পোস্টব্যাক চেষ্টা করুন।

এক মিনিট বা দুই বিলম্ব "লোকালহোস্টের অপেক্ষায়" এবং তারপরে ব্রাউজার দ্বারা "সংযোগটি পুনরায় সেট করা হয়েছিল" এবং global.asaxএর অ্যাপ্লিকেশন ত্রুটির ফাঁদে লগগুলি:

Application_Error event: Invalid length for a Base-64 char array.
Stack Trace:
     at System.Convert.FromBase64String(String s)
     at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString)
     at System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState)
     at System.Web.UI.HiddenFieldPageStatePersister.Load()

এই ক্ষেত্রে এটি ভিউস্টেটের সাইজ নয়, তবে পৃষ্ঠা এবং / অথবা ভিউস্টেট ক্যাশেয়ের সাথে কিছু করার জন্য যা আমাকে কামড় দিচ্ছে বলে মনে হচ্ছে। সেট <pages>পরামিতি enableEventValidation="false", এবং viewStateEncryption="Never"মধ্যে Web.configআচরণ পরিবর্তন করা হয়নি। উভয়ই maxPageStateFieldLengthবিনয়ী কিছুতে সেট করে নি ।


1

আপনার এইচটিপিহ্যান্ডলারগুলিতে একবার দেখুন। আমি একটি সংকোচনের সরঞ্জাম প্রয়োগ করার পরে গত কয়েক মাস ধরে আমি কিছু অদ্ভুত এবং সম্পূর্ণরূপে এলোমেলো ত্রুটিগুলি লক্ষ্য করছি (টেলিগ্রিক থেকে র‌্যাডকম্প্রেশন)। আমি ত্রুটিগুলি লক্ষ্য করছিলাম:

  • System.Web.HttpException: ডেটা যাচাই করতে অক্ষম।

  • System.Web.HttpEception: ক্লায়েন্ট সংযোগ বিচ্ছিন্ন .---> System.Web.UI.ViewStateException: অবৈধ ভিউস্টেট।

এবং

  • System. FormatException: একটি বেস-Base৪ চর অ্যারের অবৈধ দৈর্ঘ্য।

  • System.Web.HttpEception: ক্লায়েন্ট সংযোগ বিচ্ছিন্ন। ---> System.Web.UI.ViewStateException: অবৈধ ভিউস্টেট।

আমি আমার ব্লগে এই সম্পর্কে লিখেছি


আপনার ব্লগ ডাউন আছে। আপনার কি অন্য লিঙ্ক আছে বা আপনি প্রাসঙ্গিক তথ্য পোস্ট করতে পারেন? thx
mga911


0

এটি একটি বিশাল দর্শনীয় অবস্থার কারণে, আমার ক্ষেত্রে আমি ভাগ্যবান হয়েছি যেহেতু আমি ভিউস্টেটটি ব্যবহার করছিলাম না। আমি সবেমাত্র enableviewstate="false"ফর্ম ট্যাগে যুক্ত করেছি এবং দর্শনীয় স্থিতিটি 35 কে থেকে 100 অক্ষরে চলে গেছে


0

স্ক্যালমেম্বারশিপপ্রাইডারের সাথে সদস্যতার জন্য প্রাথমিক পরীক্ষা করার সময়, আমি একটি লবণের সাথে মিলিত একটি হ্যাশ (এসএএএ 1) অ্যালগরিদম ব্যবহার করি এবং আমি যদি লবণের দৈর্ঘ্যকে চার দ্বারা বিভাজ্য না করে পরিবর্তন করি তবে আমি এই ত্রুটি পেয়েছি।

আমি উপরের কোনও সংশোধন করার চেষ্টা করিনি, তবে যদি লবণটি পরিবর্তন করা হয় তবে এটি কারওর এই নির্দিষ্ট ত্রুটির উত্স হিসাবে চিহ্নিত করতে সহায়তা করতে পারে।


0

জন স্কিটি যেমন বলেছে, স্ট্রিংটি 4 বাইটের একাধিক হতে হবে। তবে আমি তখনও ত্রুটি পেয়ে যাচ্ছিলাম।

কমপক্ষে এটি ডিবাগ মোডে সরানো হয়েছে। Convert.FromBase64String()কোডের মাধ্যমে পদক্ষেপ নিন তারপরে একটি ব্রেক পয়েন্ট দিন । অলৌকিকভাবে, ত্রুটিটি আমার জন্য অদৃশ্য হয়ে গেছে :) এটি সম্ভবত দেখার রাজ্যের সাথে সম্পর্কিত এবং অন্যরা যেমন বলেছে তেমনই অন্যান্য সমস্যাগুলির সাথে সম্পর্কিত।


0

আমাকে সহায়তা করেছিল @ জলচর এর সমাধান ছাড়াও , আমি দেখতে পেয়েছি যে ATL::Base64Encodeআপনি ASP.NET ওয়েবসার্চিতে যে বিষয়বস্তুটি প্রেরণ করেছেন তা এনকোড করার জন্য সি ++ অ্যাপ্লিকেশন থেকে কল করার সময় আপনার আরও কিছু প্রয়োজন need এ ছাড়াও

sEncryptedString = sEncryptedString.Replace(' ', '+'); 

থেকে @ jalchr এর সমাধান, আপনি এছাড়াও তা নিশ্চিত করার জন্য আপনার যা দরকার ব্যবহার করবেন নাATL_BASE64_FLAG_NOPAD থাকা ফ্ল্যাগ ATL::Base64Encode:

 BOOL bEncoded = Base64Encode(lpBuffer,
                    nBufferSizeInBytes,
                    strBase64Encoded.GetBufferSetLength(base64Length),
                    &base64Length,ATL_BASE64_FLAG_NOCRLF/*|ATL_BASE64_FLAG_NOPAD*/);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.