প্রোগ্রামিং ভাষার ভিতরে আমি একটি সাধারণ শেল কমান্ড কার্যকর করি
cd var; echo > create_a_file_here
সঙ্গে Var একটি পরিবর্তনশীল যে (আশা) একটি জায়গা যেখানে আমি ফাইল "create_a_file_here" তৈরি করতে চান ডিরেক্টরির একটি স্ট্রিং রয়েছে হচ্ছে। এখন যদি কেউ এই কোডের লাইনটি দেখেন, উদাহরণস্বরূপ বরাদ্দ করে এটি ব্যবহার করা সম্ভব:
var = "; rm -rf /"
জিনিসগুলি বেশ কুৎসিত হতে পারে। উপরের কেসটি এড়ানোর একটি উপায় হতে পারে কিছু বিশেষ অক্ষরের জন্য ভারে স্ট্রিংটি অনুসন্ধান করা ; শেল কমান্ড কার্যকর করার আগে, তবে আমি সন্দেহ করি এটি সম্ভবত সমস্ত শোষণকে কভার করে।
"সিডি ভার" কেবল একটি ডিরেক্টরি পরিবর্তন করে এবং অন্য কিছু নয় তা নিশ্চিত করার কোনও ভাল উপায় কি কেউ জানেন?
sh
, বা আপনার নিজস্ব প্রোগ্রামিং ভাষাটি একটি অনুরূপ বাক্য গঠন সহ তৈরি করছেন তবে যা var
আপনাকে লেখার প্রয়োজনের পরিবর্তে প্রসারিত হয় cd "$var"
? নাকি এই bash
সাথে shopt -s cdable_vars
? ওহ, আমি মনে করি আপনি বোঝাতে চাইছেন যে অন্য কোনও প্রোগ্রাম এই কমান্ডগুলি চালানোর জন্য একটি শেল কাঁটাচ্ছে। সুতরাং কেবল উদ্ধৃতি দিন var
, তবে তা নিশ্চিত করুন যে এটিতে কোনও উদ্ধৃতি চরিত্রটি অন্তর্ভুক্ত নেই ...
s='"'; echo "$s"
প্রিন্ট "
।
var=untrusted string
পিতামাতার প্রোগ্রামে করুন, অনুরোধ var
করার সময় ইতিমধ্যে সেট করা একটি পরিবেশের পরিবর্তনশীল sh
। তারপরে আপনার প্রতিটি বার এটি প্রসারিত হওয়ার সাথে সাথে কেবল এটি উদ্ধৃত করা উচিত যা নির্ভরযোগ্যভাবে করা সম্ভব। আহ, আমি দেখতে পাচ্ছি যে ধারণাটি ইতিমধ্যে স্টাফেনের উত্তর> এর অংশ part <
var
একটি যুক্তি হিসাবেও পাস করতে পারেন । যেমন কলিংsh
আর্গুমেন্ট সহ-c
,'cd "$1"; echo > create_a_file_here'
,'sh'
,var
কাজ করে এবং কোনো পরিবর্তন দরকার নেইvar
।'sh'
আর্গুমেন্ট হিসাবে পাস করা হয়েছে$0
।