এসকিউএল ইনজেকশন একটি অত্যন্ত গুরুতর সুরক্ষা সমস্যা, কারণ এটি এত সহজেই ভুল হওয়া সহজ: ব্যবহারকারীর ইনপুটকে অন্তর্ভুক্ত করে একটি ক্যোয়ারী তৈরি করার সুস্পষ্ট, স্বজ্ঞাত উপায় আপনাকে দুর্বল করে দেয় এবং এটিকে প্রশমিত করার সঠিক উপায়টি আপনাকে প্যারামিটারাইজড সম্পর্কে জানতে হবে প্রশ্নগুলি এবং এসকিউএল ইঞ্জেকশনটি প্রথমে।
আমার কাছে মনে হয় এটির সমাধানের সুস্পষ্ট উপায়টি হ'ল সুস্পষ্ট (তবে ভুল) বিকল্পটি বন্ধ করে দেওয়া হবে: ডাটাবেস ইঞ্জিনটি ঠিক করুন যাতে প্যারামিটারের পরিবর্তে তার কোথাও ক্লোডে হার্ড-কোডড মান ব্যবহার করে এমন কোনও কোয়েরি একটি সুন্দর, বর্ণনামূলক ফিরিয়ে দেয় পরিবর্তে পরামিতি ব্যবহার করার নির্দেশ দিচ্ছে ত্রুটি বার্তা। এতে অবশ্যই একটি অপ্ট-আউট বিকল্প থাকা দরকার যাতে প্রশাসনিক সরঞ্জামগুলি থেকে অ্যাড-হক কোয়েরির মতো জিনিসগুলি এখনও সহজেই চলতে পারে তবে এটি ডিফল্টরূপে সক্ষম করা উচিত।
এটি থাকার ফলে প্রায় রাতারাতি এসকিউএল ইঞ্জেকশন শীতল হয়ে যাবে, তবে যতদূর আমি জানি, কোনও আরডিবিএমএস আসলে এটি করে না। না করার কোনও ভাল কারণ আছে কি?
SELECT * FROM jokes WHERE date > DATE_SUB(NOW(), INTERVAL 1 DAY) ORDER BY score DESC;
"bad"
সত্যই আক্ষরিক নাকি স্ট্রিং কন্টেটিংয়ের ফলে এসেছিল resulted আমি যে দুটি সমাধান দেখতে পাচ্ছি তা হয় এসকিউএল এবং অন্যান্য স্ট্রিং-এম্বেডড ডিএসএল (হ্যাঁ দয়া করে) থেকে মুক্তি পাচ্ছে, বা প্যারামিটারাইজড কোয়েরিগুলি (উম্ম, না) ব্যবহার করার চেয়ে স্ট্রিং কনটেন্টেশন আরও বিরক্তিকর এমন ভাষাগুলি প্রচার করছে।
bad_ideas_sql = 'SELECT title FROM idea WHERE idea.status == "bad" AND idea.user == :mwheeler'
একক ক্যোয়ারিতে হার্ড-কোডড এবং প্যারামিটারাইজড মান উভয়ই থাকবে - এটি ধরার চেষ্টা করুন! আমি মনে করি এই জাতীয় মিশ্র প্রশ্নের জন্য বৈধ ব্যবহারের কেস রয়েছে।