আমাদের কোডে প্যারামিট্রাইজড এসকিএল কোয়েরি ব্যবহারের বিষয়ে আমরা এখানে অন্য আলোচনা করছি। আমি এবং আলোচনার দুটি পক্ষ রয়েছে: আমি এবং কিছু অন্যান্য যারা বলে যে আমাদের বরাবর স্কেল ইঞ্জেকশনগুলির বিরুদ্ধে সুরক্ষার জন্য পরামিতিগুলি ব্যবহার করা উচিত এবং অন্যান্য লোকেরা যা এটি প্রয়োজনীয় বলে মনে করে না। পরিবর্তে তারা স্কিল ইঞ্জেকশনগুলি এড়াতে সমস্ত স্ট্রিংয়ে দুটি অ্যাডাস্ট্রোফের সাথে একক অ্যাডাস্ট্রোফগুলি প্রতিস্থাপন করতে চায়। আমাদের ডাটাবেসগুলি সমস্ত এসকিএল সার্ভার 2005 বা 2008 চলমান রয়েছে এবং আমাদের কোড বেস .NET ফ্রেমওয়ার্ক 2.0 তে চলছে।
আমি আপনাকে সি # তে একটি সাধারণ উদাহরণ দিই:
আমি আমাদের এটি ব্যবহার করতে চাই:
string sql = "SELECT * FROM Users WHERE Name=@name";
SqlCommand getUser = new SqlCommand(sql, connection);
getUser.Parameters.AddWithValue("@name", userName);
//... blabla - do something here, this is safe
অন্য ছেলেরা এটি করতে চাইলে:
string sql = "SELECT * FROM Users WHERE Name=" + SafeDBString(name);
SqlCommand getUser = new SqlCommand(sql, connection);
//... blabla - are we safe now?
যেখানে SafeDBString ফাংশনটি নিম্নলিখিত হিসাবে সংজ্ঞায়িত করা হয়েছে:
string SafeDBString(string inputValue)
{
return "'" + inputValue.Replace("'", "''") + "'";
}
এখন, যতক্ষণ না আমরা আমাদের অনুসন্ধানগুলিতে সমস্ত স্ট্রিং মানগুলিতে SafeDBString ব্যবহার করি আমাদের নিরাপদ থাকা উচিত। রাইট?
SafeDBString ফাংশনটি ব্যবহার করার দুটি কারণ রয়েছে। প্রথমত, এটি পাথর যুগের পরে থেকে যেভাবে করা হয়েছে, এবং দ্বিতীয়ত, ডাটাবেসে চালিত এক্সট্যাক্ট ক্যোয়ারীটি আপনি দেখতে পাওয়ায় স্কেল স্টেটমেন্টগুলি ডিবাগ করা সহজ।
তাহলে। আমার প্রশ্নটি কি স্কেল ইনজেকশন আক্রমণগুলি এড়াতে SafeDBString ফাংশনটি ব্যবহার করা সত্যই যথেষ্ট? আমি কোডের এমন উদাহরণগুলির সন্ধানের চেষ্টা করছি যা এই সুরক্ষা পরিমাপটি ভঙ্গ করে তবে আমি এর কোনও উদাহরণ পাই না।
কেউ কি আছে যে এটাকে ভেঙে দিতে পারে? তুমি এটা কি ভাবে করবে?
সম্পাদনা: এখন পর্যন্ত উত্তরগুলি সংক্ষিপ্ত করতে:
- স্কেল সার্ভার ২০০৫ বা ২০০৮ এ সেফডিবিএস স্ট্রিংয়ের আশেপাশে যাওয়ার কোনও উপায় এখনও কেউ খুঁজে পায়নি। এটা ভাল, আমি মনে করি?
- বেশ কয়েকটি জবাব নির্দেশ করেছে যে প্যারামিট্রাইজড কোয়েরিগুলি ব্যবহার করার সময় আপনি একটি পারফরম্যান্স লাভ পাবেন। কারণটি হ'ল ক্যোয়ারী প্ল্যানগুলি পুনরায় ব্যবহার করা যেতে পারে।
- আমরা এও সম্মত হই যে প্যারামিট্রাইজড কোয়েরিগুলি ব্যবহার করে আরও পড়ার যোগ্য কোড দেয় যা বজায় রাখা সহজ
- এরপরে SafeDBString এর বিভিন্ন সংস্করণ, সংখ্যার রূপান্তর থেকে স্ট্রিং থেকে তারিখ রূপান্তরগুলিতে স্ট্রিমিংয়ের চেয়ে পরামিতিগুলি সর্বদা ব্যবহার করা সহজ।
- প্যারামিটারগুলি ব্যবহার করে আপনি স্বয়ংক্রিয় ধরণের রূপান্তর পান, এমন কিছু যা বিশেষভাবে কার্যকর যখন আমরা তারিখ বা দশমিক সংখ্যার সাথে কাজ করি।
- এবং সবশেষে: জুলিয়ানআর লিখেছেন বলে নিজেকে সুরক্ষা দেওয়ার চেষ্টা করবেন না । ডাটাবেস বিক্রেতারা সুরক্ষার জন্য প্রচুর সময় এবং অর্থ ব্যয় করে। আমাদের আরও ভাল করার কোনও উপায় নেই এবং তাদের কাজটি করার চেষ্টা করার কোনও কারণ নেই।
সুতরাং কেউই সেফডিবিএস স্ট্রিংয়ের ফাংশনটির সাধারণ সুরক্ষা ভঙ্গ করতে সক্ষম না হওয়ায় আমি আরও অনেক ভাল যুক্তি পেয়েছি। ধন্যবাদ!