কোনও নিয়মিত অভিব্যক্তিতে দূষিত কোড রাখার কোনও উপায় আছে কি?


138

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

Google অনুসন্ধান বিপরীতটি একটি সমস্যার সমাধানে দূষিত ইনপুট সনাক্ত করতে রেগুলার এক্সপ্রেশান্স ব্যবহার করে মানুষ swamped হয় -। যা আমি আগ্রহী নই আমার দৃশ্যকল্প ইন, ব্যবহারকারীর ইনপুট হয় একটি রেগুলার এক্সপ্রেশন।

আমি । নেট (সি #) -তে রেজেক্স গ্রন্থাগারটি ব্যবহার করব ।


4
এটি আপনি কোন ভাষা এবং / অথবা রেজেক্স লাইব্রেরি ব্যবহার করেন তার উপর নির্ভর করতে পারে।
aschepler

আরো কিছু পড়ার উপাদান: OWASP উপর ReDoS , ReDoS উইকিপিডিয়ায়
joeytwiddle

উত্তর:


216

অস্বীকৃতি ‐ অফ সার্ভিস উদ্বেগ

রেজেক্সেসের সাথে সর্বাধিক সাধারণ উদ্বেগ হ'ল অস্বীকৃত attack এর attack পরিষেবা আক্রমণ আক্রমণাত্মক - বা এমনকি সুপার-এক্সপোনেনশিয়াল হয়ে যাওয়া রোগগত নিদর্শনগুলির মাধ্যমে পরিষেবা আক্রমণ! - এবং তাই সমাধানের জন্য চিরকালের জন্য প্রদর্শিত হবে। এগুলি কেবলমাত্র নির্দিষ্ট ইনপুট ডেটাতে প্রদর্শিত হতে পারে তবে একটি সাধারণত এটি তৈরি করতে পারে যার মধ্যে এটি গুরুত্বপূর্ণ নয়।

এগুলি কোনটি হ'ল কিছুটা নির্ভর করবে আপনি যে রিজেক্স সংকলকটি ব্যবহার করছেন তা হ'ল, কারণ এর কয়েকটি সংকলনের সময় সনাক্ত করা যায়। রিজেক্স সংকলকগুলি যে পুনরাবৃত্তি বাস্তবায়ন করে থাকে তাদের অ-অগ্রগতি পরীক্ষা করার জন্য সাধারণত অন্তর্নির্মিত rec ইন রিকার্সন ‐ গভীরতার কাউন্টার থাকে।

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

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

ডিএফএর সাহায্যে আপনি এটি তৈরিতে বেশি সময় ব্যয় করেন (এবং আরও রাজ্য বরাদ্দ), তবে কোনও এনএফএর সাহায্যে আপনি এটি কার্যকর করতে আরও বেশি সময় ব্যয় করেন, যেহেতু এটি একই সাথে একাধিক রাজ্য হতে পারে, এবং ব্যাকট্র্যাকিং আপনার লাঞ্চ খেতে পারে - এবং আপনার সিপিইউ।

অস্বীকৃতি ‐ অফ সার্ভিস সলিউশন

উত্তাপের সাথে প্রতিযোগিতায় হেরে যাওয়া এই নিদর্শনগুলিকে সম্বোধন করার সম্ভবত সবচেয়ে যুক্তিসঙ্গত উপায় the মহাবিশ্বের মৃত্যু হ'ল তাদের এমন একটি টাইমার দিয়ে মোড়ানো যা কার্যকরভাবে তাদের মৃত্যুদন্ড কার্যকর করার জন্য সর্বাধিক পরিমাণ সময় দেয়। সাধারণত এটি বেশিরভাগ এইচটিটিপি সার্ভার সরবরাহ করে যে ডিফল্ট সময়সীমা থেকে অনেক কম হবে।

এগুলি বাস্তবায়নের বিভিন্ন উপায় রয়েছে, যা alarm(N)সি স্তরে সাধারণ আকার তৈরি করে কিছু ধরণের try {}ক্যাচ অ্যালার্ম ‐ ব্যাতিক্রমগুলি অবরুদ্ধ করে, একটি নতুন থ্রেড তৈরি করার সমস্ত উপায় যা এটিতে নির্মিত সময়সীমাবদ্ধতার সাথে বিশেষভাবে তৈরি।

কোড কলআউটস

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

উদাহরণ হিসেবে বলা যায়, পার্ল এক স্ট্রিং ক্ষেপক থেকে তৈরি regexes কোড কলআউট (, তারা রান সময়ে কম্পাইল করছি এই হবে) যদি না বিশেষ আভিধানিক-scoped pragma থাকতে পারে না use re "eval";বর্তমান সুযোগ সক্রিয় হবে।

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

ব্যবহারকারী ‐ সংজ্ঞায়িত \ পি {দড়ি}

মত - এক নিরাপত্তা সংবেদনশীল ইউনিকোড-শৈলী বৈশিষ্ট্য এর সাথে সম্পর্কিত সমস্যা হয়েছে রয়ে \pM, \p{Pd}, \p{Pattern_Syntax}, অথবা \p{Script=Greek}- যে পারে কিছু Regex কম্পাইলার যে সমর্থন যে স্বরলিপি রয়েছে।

সমস্যাটি হ'ল এর মধ্যে কয়েকটিতে, সম্ভাব্য বৈশিষ্ট্যগুলির সেটটি ব্যবহারকারী ‐ এক্সটেনসিবল। তার মানে আপনি যে মত কিছু বিশেষ namepace নাম ফাংশন প্রকৃত কোড কলআউট হয়, কাস্টম বৈশিষ্ট্য থাকতে পারে \p{GoodChars}বা \p{Class::Good_Characters}। আপনার ভাষা কীভাবে এগুলি পরিচালনা করে তা দেখার মতো।

স্যান্ডবক্সিং

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


4
এনএফএ-> ডিএফএ রূপান্তরটি ক্ষণস্থায়ী রাষ্ট্র বিস্ফোরণ তৈরি করতে পারে, একটি সময় ডিওএসকে একটি স্পেস ডিএসে রূপান্তর করতে পারে, পাশাপাশি ক্ষতিকারক সংখ্যক রাজ্যের উত্‍পাদনের সময় ব্যয়।
ব্যারি কেলি

তবে সম্ভবত তার পুরো নিয়মিত এক্সপ্রেশন ক্ষমতাগুলির প্রয়োজন হবে না, গুগলের
systemfault

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

20

টক্রিস্টের দুর্দান্ত উত্তরে যুক্ত করা: একই নিয়মিত রস কক্স যারা "নিয়মিত প্রকাশ" পৃষ্ঠা লিখেছেন তাও কোড প্রকাশ করেছে! রি 2 হ'ল সি ++ গ্রন্থাগার যা ও (দৈর্ঘ্য_আফরেজেক্স) রানটাইম এবং কনফিগারযোগ্য মেমরি-ব্যবহারের সীমাটির গ্যারান্টি দেয়। এটি গুগলের মধ্যেই ব্যবহার করা হয়েছে যাতে আপনি গুগল কোড অনুসন্ধানে একটি রেজেক্স টাইপ করতে পারেন - যার অর্থ যুদ্ধ পরীক্ষা করা হয়েছে।


2
আসলে তাই। আপনি একটি মডিউল দিয়ে পার্লের রেগেক্স ইঞ্জিনে পুনরায় 2 পরিবর্তন করতে পারবেন এবং এটি সম্ভব হলে রি 2 এবং পার্ল ব্যবহার না করে ব্যবহার করবে। বেশ ভাল কাজ করে।
tchrist


6

আপনি এই কাগজটি পড়তে চাইবেন:

অনিরাপদ প্রসঙ্গে স্যুইচিং: বেঁচে থাকার জন্য নিয়মিত অভিব্যক্তিগুলি ইনোকুলেট করা নিয়মিত এক্সপ্রেশন ইঞ্জিনগুলি (যেমন পিসিআরই) দিয়ে কী ভুল হতে পারে সে সম্পর্কে কাগজটি আরও রয়েছে তবে আপনি কীসের বিরুদ্ধে রয়েছেন তা বুঝতে সহায়তা করতে পারে।


1
GNU libc regcomp (3) কোডের একটি সুরক্ষা পরামর্শ এখানে দেওয়া হয়েছে: securityreason.com/achievement_securityalert/93 কতটা সময়োচিত! , Grep -E করুন: linux অধীনে অন্তত, দুর্বলতার প্রদর্শন করা সহজ "* {10,} {10,} {10,} {10,} {10,}।"
ব্রুস Ediger

5

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


1

সুরক্ষার সমস্যাগুলির জন্য আপনার রেগেক্সগুলি পরীক্ষা করার একটি ভাল উপায় (কমপক্ষে উইন্ডোজের জন্য) সম্প্রতি মাইক্রোসফ্ট দ্বারা প্রকাশিত এসডিএল রেজেক্স এক্স ফিজিং সরঞ্জাম । এটি রোগগতভাবে খারাপ রেজিএক্স নির্মাণ এড়াতে সহায়তা করতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.