পিসিআরই সীমা কি?


11

মোডসিকিউরিটিতে PCRE limits exceededত্রুটি রয়েছে।

আমি জানি যে আমি নিয়মগুলি সেট করে এটি ঠিক করতে পারি:

SecPcreMatchLimit 150000
SecPcreMatchLimitRecursion 150000

কিন্তু, এই নিয়মগুলি আসলে কী করছে? পিসিআরই সীমা পুনর্বিবেচনার 150,000 হিসাবে সেট মানে কি? এগুলি এত বেশি স্থাপন করে আমি কোন সুরক্ষা গর্তগুলি দিয়ে যাচ্ছি? কী recursionএবং limitএর অর্থ কি?

আমি জানি ডকুমেন্টেশন আছে, কিন্তু ডকুমেন্টেশন আসলে কী হচ্ছে তা আমাকে জানায় না, এটি কেবল নির্দেশাবলী দিয়ে কীভাবে কাজ করবেন তা আমাকে বলে দেয়।


আমি "পার্ল" ট্যাগটি "পিসি" তে পরিবর্তন করতে এই পোস্টটি সম্পাদনা করছি। সংক্ষিপ্ত বিবরণ আপনাকে বিশ্বাস করতে পারে তা সত্ত্বেও পিসিআরই পার্ল নয়।
অ্যান্ডি লেস্টার

উত্তর:


13

কিছু পাঠ্যকে কোনও প্যাটার্নে মেলে দেওয়ার চেষ্টা করার জন্য সর্বাধিক পরিমাণ মেমরি / সময় সীমাবদ্ধ করার জন্য এগুলি পিসিআরই ইঞ্জিনের অভ্যন্তরীণ সেটিংস হিসাবে উপস্থিত বলে মনে হয়। pcreapi র manpage layman এর পরিপ্রেক্ষিতে তা ব্যাখ্যা সামান্য আছে:

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

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

পিসিআরই নির্মিত হলে সীমাটির জন্য ডিফল্ট মান সেট করা যেতে পারে; ডিফল্ট ডিফল্ট হ'ল 10 মিলিয়ন, যা সবচেয়ে চরম ক্ষেত্রে ব্যতীত সমস্ত পরিচালনা করে। আপনি পিসি_এেক্সট্রা ব্লকটি পিসি_এেক্সট্রা ব্লকটি সরবরাহ করে ডিফল্টটিকে ওভাররাইড করতে পারেন যেখানে ম্যাচ_লিমিট সেট করা আছে, এবং পিসিআর_আরেক্টরা_ম্যাটিচ_লিমিট পতাকাগুলির ক্ষেত্রে সেট করা আছে। সীমা অতিক্রম করা হলে, pcre_exec () PCRE_ERROR_MATCHLIMIT প্রদান করে।

ম্যাচ_লিমিট_রেকারশন ক্ষেত্রটি ম্যাচ_লিমিটের সমান, তবে ম্যাচের () নাম্বারটি বলা হয় এমন মোট সময় সীমাবদ্ধ না করে, এটি পুনরাবৃত্তির গভীরতা সীমাবদ্ধ করে। মোট কলগুলির সংখ্যার তুলনায় পুনরাবৃত্তির গভীরতা একটি ছোট সংখ্যা, কারণ () এর সাথে মেলে সমস্ত কল পুনরাবৃত্ত হয় না। এই সীমাটি কেবলমাত্র ম্যাচ_লিমিটের চেয়ে ছোট সেট করা থাকলে ব্যবহারযোগ্য।

যেহেতু পিসিআরই লাইব্রেরি অন্তর্নির্মিত ডিফল্ট 10000000, তাই আমার অনুমান যে অনুরোধগুলি দীর্ঘকাল ধরে রাখা থেকে বিরত রাখতে নীচের সেটিংটি মোড_সিকিউরিটির জন্য প্রস্তাবিত।


মোডেসিকিউরিটির 1500 এর ডিফল্ট মান রয়েছে যা 1M এর চেয়ে উল্লেখযোগ্যভাবে কম। ওপির 150000 এর মান সেটিংস বাড়িয়ে তুলবে, কমবে না।
পল মৃগেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.