আমি আজ একটি পুরাতন সঞ্চিত পদ্ধতিটি দেখছিলাম এবং লক্ষ্য করেছি এটি quotename
ইনপুট পরামিতিগুলিতে ব্যবহার করছে। এটি কী করে তা আবিষ্কার করার জন্য কিছু খনন করার পরে আমি এই সাইট জুড়ে এসেছি । আমি এখন বুঝতে পারি এটি কী করে এবং কীভাবে এটি ব্যবহার করতে হয় তবে সাইটটি বলে যে এটি এসকিউএল ইনজেকশন আক্রমণ থেকে প্রশমন হিসাবে ব্যবহৃত হয়। আমি যখন অ্যাপ্লিকেশনগুলি ডেটাবেসকে সরাসরি জিজ্ঞাসা করে, এসপ নেট ব্যবহার করে বিকাশ করতাম, তখন আমি ADO.NET পরামিতিগুলিকে আক্ষরিক মান হিসাবে ব্যবহারকারীর ইনপুটটি পাস করতে ব্যবহার করতাম এবং আমার সঞ্চিত পদ্ধতিতে এটির সুরক্ষার জন্য কখনই সত্যই চিন্তিত হত না।
আমি এখন একটি সঞ্চিত প্রক্রিয়া লিখছি যা আমি লিখি না এমন অ্যাপ্লিকেশনগুলি দ্বারা ব্যবহৃত হবে সুতরাং প্রক্রিয়া পর্যায়ে ইনজেকশন আক্রমণের হাত থেকে রক্ষা করার চেষ্টা করার দরকার নেই, এটি quotename
করার সর্বোত্তম উপায় বা এটির কোনও নতুন ফাংশন / আরও ভাল পদ্ধতি?
কোডটি আমাকে এই চিন্তার ধরণে পেয়েছে ( @parm1
এটি একটি ব্যবহারকারী ইনপুট প্যারামিটার):
'SELECT project [Project], project_desc [Description],
customer [Customer], cpnyid [Company]
FROM PJPROJ (nolock)
where project like ' + quotename(@parm1,'''') + '