অন্যান্য উত্তরগুলি ইতিমধ্যে আপনার যা জানা দরকার তা কভার করে। তবে এটি আরও কিছুটা পরিষ্কার করতে সহায়তা করে:
আছে দুটি জিনিস আপনাকে যা করতে হবে:
1. ফর্ম তথ্য বৈধ করুন।
হিসাবে জনাথন হবস 'উত্তর শো সুস্পষ্টভাবে, ফর্ম ইনপুট জন্য HTML উপাদান পছন্দমত আপনার জন্য কোনো নির্ভরযোগ্য ফিল্টারিং করি না।
বৈধতা সাধারণত এমনভাবে করা হয় যা ডেটা পরিবর্তন করে না, তবে "দয়া করে এটি সংশোধন করুন" হিসাবে চিহ্নিত ক্ষেত্রগুলি দিয়ে আবার ফর্মটি দেখায়।
বেশিরভাগ ফ্রেমওয়ার্ক এবং সিএমএসগুলিতে ফর্ম বিল্ডার রয়েছে যা আপনাকে এই কাজটিতে সহায়তা করে। এবং কেবল এটিই নয়, তারা সিএসআরএফ (বা "এক্সএসআরএফ") এর বিরুদ্ধেও সহায়তা করে, যা আক্রমণাত্মক অন্য রূপ।
2. এসকিউএল বিবৃতিতে সানিটাইজ / এস্কেপ ভেরিয়েবল ..
.. বা প্রস্তুত বিবৃতি আপনার জন্য কাজ করতে দিন।
আপনি যদি কোনও ব্যবহারকারী (মাই) এসকিউএল স্টেটমেন্টটি কোনও ভেরিয়েবলের সাথে তৈরি করেন, ব্যবহারকারী দ্বারা সরবরাহিত বা না, তবে আপনাকে এই ভেরিয়েবলগুলি পালাতে এবং উদ্ধৃত করতে হবে।
সাধারণত, আপনি কোনও মাইএসকিউএল বিবৃতিতে সন্নিবেশ করান এমন কোনও পরিবর্তনশীল একটি স্ট্রিং হওয়া উচিত, বা পিএইচপি নির্ভরযোগ্যতার সাথে মাইএসকিউএল হজম করতে পারে এমন স্ট্রিংয়ে রূপান্তরিত হতে পারে। যেমন, সংখ্যা।
স্ট্রিংগুলির জন্য, আপনাকে স্ট্রিং থেকে বাঁচতে বেশ কয়েকটি পদ্ধতির একটি বেছে নিতে হবে, যার অর্থ, মাইএসকিউএল-এর পার্শ্ব প্রতিক্রিয়াযুক্ত এমন কোনও অক্ষর প্রতিস্থাপন করুন।
- পুরানো-স্কুল মাইএসকিউএল + পিএইচপি, mysql_real_escape_string () কাজ করে। সমস্যাটি হ'ল এটি ভুলে যাওয়া অনেক সহজ, সুতরাং আপনার অবশ্যই প্রস্তুত স্টেটমেন্ট বা ক্যোয়ারী বিল্ডারগুলি ব্যবহার করা উচিত।
- মাইএসকিউএলিতে আপনি প্রস্তুত বিবৃতি ব্যবহার করতে পারেন।
- বেশিরভাগ ফ্রেমওয়ার্ক এবং সিএমএসগুলি কোয়েরি বিল্ডার সরবরাহ করে যা আপনাকে এই কাজটিতে সহায়তা করে।
আপনি যদি কোনও সংখ্যার সাথে কাজ করে থাকেন তবে আপনি পালানো এবং উদ্ধৃতিগুলি বাদ দিতে পারেন (এজন্য প্রস্তুত বিবৃতিগুলি কোনও প্রকার নির্দিষ্ট করার অনুমতি দেয়)।
এটি উল্লেখ করা গুরুত্বপূর্ণ যে আপনি এসকিউএল স্টেটমেন্টের জন্য ভেরিয়েবলগুলি এড়িয়ে গেছেন এবং ডাটাবেসের জন্য নয় । ডাটাবেসটি মূল স্ট্রিং সংরক্ষণ করবে, তবে বিবৃতিটির একটি পালানো সংস্করণ দরকার।
এর মধ্যে একটি বাদ দিলে কী ঘটে?
আপনি যদি ফর্ম বৈধতা ব্যবহার না করেন তবে আপনি আপনার এসকিউএল ইনপুট স্যানিটাইজ করেন তবে আপনি দেখতে পাচ্ছেন যে সমস্ত ধরণের খারাপ জিনিস ঘটতে পারে তবে আপনি এসকিউএল ইঞ্জেকশন দেখতে পাবেন না! (*)
প্রথমত, এটি আপনার অ্যাপ্লিকেশনটিকে এমন একটি রাজ্যে নিয়ে যেতে পারে যা আপনি পরিকল্পনা করেননি। যেমন আপনি যদি সমস্ত ব্যবহারকারীর গড় বয়স গণনা করতে চান তবে একজন ব্যবহারকারী বয়সের জন্য "aljkdfaqer" দিয়েছেন, আপনার গণনা ব্যর্থ হবে।
দ্বিতীয়ত, আপনার বিবেচনা করা উচিত অন্যান্য ধরণের ইনজেকশন আক্রমণ হতে পারে: যেমন ব্যবহারকারী ইনপুটটিতে জাভাস্ক্রিপ্ট বা অন্যান্য স্টাফ থাকতে পারে।
ডাটাবেসটিতে এখনও সমস্যা হতে পারে: যেমন কোনও ক্ষেত্র (ডাটাবেস টেবিল কলাম) 255 টি অক্ষরে সীমাবদ্ধ থাকে এবং স্ট্রিংটি এর চেয়ে দীর্ঘ হয়। অথবা যদি ক্ষেত্রটি কেবল সংখ্যা গ্রহণ করে এবং আপনি পরিবর্তে একটি অ-সংখ্যাযুক্ত স্ট্রিং সংরক্ষণ করার চেষ্টা করেন। তবে এটি "ইনজেকশন" নয়, এটি কেবল "অ্যাপ্লিকেশন ক্র্যাশ করে"।
তবে, যদি আপনার কাছে একটি নিখরচায় পাঠ্য ক্ষেত্র থাকে যেখানে আপনি কোনও বৈধতা ছাড়াই কোনও ইনপুটকে অনুমতি দেন তবে আপনি এটি এখনও ঠিক এটির মতো ডাটাবেসে সংরক্ষণ করতে পারেন, যদি এটি কোনও ডাটাবেস বিবৃতিতে যায় তবে আপনি যদি সঠিকভাবে এটি থেকে রক্ষা পান। সমস্যাটি তখনই আসে যখন আপনি এই স্ট্রিংটি কোথাও ব্যবহার করতে চান।
(*) বা এটি সত্যিই বহিরাগত কিছু হতে পারে।
আপনি যদি এসকিউএল স্টেটমেন্টের জন্য ভেরিয়েবলগুলি এড়ান না , তবে আপনি ফর্ম ইনপুটটিকে বৈধতা দিয়েছেন , তবে আপনি এখনও খারাপ জিনিসগুলি দেখতে পাচ্ছেন।
প্রথমত, আপনি ঝুঁকিপূর্ণ যে যখন আপনি ডাটাবেজে ডেটা সংরক্ষণ করেন এবং আবার লোড করেন, এটি আর একই ডেটা হবে না, "অনুবাদে হারিয়ে গেছে"।
দ্বিতীয়ত, এটি অবৈধ এসকিউএল বিবৃতিতে ফলাফল করতে পারে এবং এভাবে আপনার অ্যাপ্লিকেশন ক্র্যাশ হয়ে যায়। উদাহরণস্বরূপ যদি কোনও ভেরিয়েবলের কোনও উদ্ধৃতি বা ডাবল উদ্ধৃতি অক্ষর থাকে তবে আপনি কোন ধরণের উদ্ধৃতি ব্যবহার করেন তা নির্ভর করে আপনি অবৈধ মাইএসকিউএল বিবৃতি পাবেন।
তৃতীয়ত, এটি এখনও এসকিউএল ইঞ্জেকশন তৈরি করতে পারে।
যদি ফর্মগুলি থেকে আপনার ব্যবহারকারীর ইনপুটটি ইতিমধ্যে ফিল্টার করা / যাচাই করা হয়, ইচ্ছাকৃত এসকিউএল ইনজেকশনটি খুব কম হয়ে যেতে পারে, যদি আপনার ইনপুটটি একটি হার্ডকোডযুক্ত বিকল্পগুলির তালিকাতে কমিয়ে দেওয়া হয় বা যদি এটি সংখ্যায় সীমাবদ্ধ থাকে। তবে এসকিউএল ইনজেকশনের জন্য কোনও নিখরচায় পাঠ্য ইনপুট ব্যবহার করা যেতে পারে, যদি আপনি এসকিউএল স্টেটমেন্টগুলিতে ভেরিয়েবলগুলি সঠিকভাবে এড়িয়ে না যান।
এবং আপনার কাছে কোনও ফর্ম ইনপুট না থাকলেও, আপনার কাছে এখনও সমস্ত ধরণের উত্স থেকে স্ট্রিং থাকতে পারে: ফাইল সিস্টেম থেকে পড়া, ইন্টারনেট থেকে স্ক্র্যাপ করা ইত্যাদি নুন কোনও গ্যারান্টি দিতে পারে যে এই স্ট্রিংগুলি নিরাপদ।
<select>
। প্রকৃতপক্ষে এমনকি সামান্য প্রযুক্তিগত ব্যবহারকারী ব্রাউজার কনসোল ব্যবহার করে অতিরিক্ত বিকল্প যুক্ত করতে পারে। যদি আপনি উপলভ্য মানগুলির একটি অ্যারে শ্বেত তালিকা