বন্ধ করুন!
আপনি এখানে একটি ভুল করছেন। ওহ, না, আপনি আপনার ডেটা কিছুটা নিরাপদ করতে সঠিক পিএইচপি ফাংশন বেছে নিয়েছেন। সেটা ঠিক আছে. আপনার ভুলটি ক্রিয়াকলাপের ক্রম এবং এই ফাংশনগুলি কখন এবং কোথায় ব্যবহার করবেন।
ব্যবহারকারীর ডেটা স্যানিটাইজিং এবং যাচাইকরণ, স্টোরেজটির জন্য ডেটা পলায়ন এবং উপস্থাপনের জন্য ডেটা পলানোর মধ্যে পার্থক্য বোঝা গুরুত্বপূর্ণ।
স্যানিটাইজিং এবং ব্যবহারকারীর ডেটা বৈধকরণ
ব্যবহারকারীরা ডেটা জমা দেওয়ার সময়, আপনাকে নিশ্চিত করা উচিত যে তারা আপনার প্রত্যাশিত কিছু সরবরাহ করেছে।
স্যানিটাইজেশন এবং ফিল্টারিং
উদাহরণস্বরূপ, আপনি যদি একটি সংখ্যা আশা করেন, তা নিশ্চিত করুন যে জমা দেওয়া ডেটা একটি সংখ্যা । আপনি অন্যান্য ধরণের ব্যবহারকারীর ডেটাও কাস্ট করতে পারেন । জমা দেওয়া প্রত্যেকটি প্রাথমিকভাবে স্ট্রিংয়ের মতো আচরণ করা হয়, সুতরাং জ্ঞাত-সংখ্যাযুক্ত ডেটাটিকে পূর্ণসংখ্যা বা ভাসা হিসাবে বাধ্য করা স্যানিটাইজেশনকে দ্রুত এবং বেদনাদায়ক করে তোলে।
ফর্ম-ফর্ম পাঠ্য ক্ষেত্র এবং টেক্সারিয়াস সম্পর্কে কী? আপনাকে নিশ্চিত করতে হবে যে এই ক্ষেত্রগুলিতে অপ্রত্যাশিত কিছু নেই। প্রধানত, আপনাকে অবশ্যই নিশ্চিত করতে হবে যে কোনও ক্ষেত্রগুলিতে কোনও HTML সামগ্রী থাকা উচিত নয় তাতে প্রকৃতপক্ষে এইচটিএমএল থাকে না। এই সমস্যাটি মোকাবেলার জন্য দুটি উপায় রয়েছে।
প্রথমে, আপনি এইচটিএমএল ইনপুট দিয়ে পালাতে চেষ্টা করতে পারেন htmlspecialchars
। আপনার htmlentities
এইচটিএমএলকে নিরপেক্ষ করতে ব্যবহার করা উচিত নয় , কারণ এটি উচ্চারণযুক্ত এবং অন্যান্য অক্ষরগুলির এনকোডিংও সম্পাদন করবে যা এটি মনে করে যে এনকোড করাও দরকার।
দ্বিতীয়ত, আপনি যে কোনও সম্ভাব্য এইচটিএমএল সরিয়ে চেষ্টা করতে পারেন । strip_tags
দ্রুত এবং সহজ, তবে ঝাপটায় op এইচটিএমএল পিউরিফায়ার উভয়ই এইচটিএমএল কেটে ফেলা এবং এর মাধ্যমে ট্যাগ এবং বৈশিষ্ট্যগুলির একটি নির্বাচিত শ্বেত তালিকা সরবরাহ করার অনুমতি দেয় of
আধুনিক পিএইচপি সংস্করণগুলি ফিল্টার এক্সটেনশান সহ প্রেরণ করে , যা ব্যবহারকারীদের ইনপুট স্যানিটাইজ করার একটি বিস্তৃত উপায় সরবরাহ করে।
ভ্যালিডেশন
জমা দেওয়া ডেটা অপ্রত্যাশিত সামগ্রী থেকে মুক্ত কিনা তা নিশ্চিত করা কাজটির অর্ধেক মাত্র। আপনাকে চেষ্টা ও নিশ্চিত করতে হবে যে জমা দেওয়া ডেটাতে আপনি যে কাজ করতে পারবেন সেই মানগুলি রয়েছে।
যদি আপনি 1 এবং 10 এর মধ্যে একটি সংখ্যা আশা করে থাকেন তবে আপনাকে সেই মানটি পরীক্ষা করতে হবে। আপনি যদি কোনও নতুন অভিনব এইচটিএমএল 5-যুগের কোনও কোনও স্পিনার এবং পদক্ষেপের সাথে সংখ্যার ইনপুট ব্যবহার করেন, তা নিশ্চিত করুন যে জমা দেওয়া ডেটা ধাপের সাথে সামঞ্জস্যপূর্ণ।
যদি সেই ডেটা ড্রপ-ডাউন মেনু হওয়া উচিত তবে তা নিশ্চিত হয়ে নিন যে জমা দেওয়া মানটি মেনুতে উপস্থিত হয়েছে।
অন্যান্য প্রয়োজনীয়তা পূরণ করে যে পাঠ্য ইনপুটগুলি সম্পর্কে কী? উদাহরণস্বরূপ, তারিখ ইনপুটগুলি strtotime
বা ডেটটাইম শ্রেণীর মাধ্যমে বৈধ হওয়া উচিত । প্রদত্ত তারিখটি আপনার প্রত্যাশা রেঞ্জের মধ্যে হওয়া উচিত। ইমেল ঠিকানা সম্পর্কে কি? পূর্বে উল্লিখিত ফিল্টার এক্সটেনশানটি পরীক্ষা ঠিক করতে পারে যে ঠিকানা ঠিকঠাক হয়েছে, যদিও আমি is_email লাইব্রেরির একজন অনুরাগী ।
অন্যান্য সমস্ত ফর্ম নিয়ন্ত্রণের ক্ষেত্রেও এটি একই । রেডিও বোতাম আছে? তালিকার বিরুদ্ধে বৈধতা দিন। চেকবক্স আছে? তালিকার বিরুদ্ধে বৈধতা দিন। একটি ফাইল আপলোড আছে? নিশ্চিত করুন যে ফাইলটি প্রত্যাশিত ধরণের is
প্রতিটি আধুনিক ব্রাউজারেই তৈরি হয় বিকাশকারী সরঞ্জামের সম্পূর্ণ সেট, যা আপনার ফর্মটি কারও পক্ষে ম্যানিপুলেট করতে একেবারে তুচ্ছ করে তোলে। আপনার কোডটি ধরে নেওয়া উচিত যে ব্যবহারকারী ফর্মের সামগ্রীতে সমস্ত ক্লায়েন্ট-সাইড বিধিনিষেধকে পুরোপুরি সরিয়ে দিয়েছে !
স্টোরেজ জন্য ডেটা পালাচ্ছে
এখন আপনি নিশ্চিত করেছেন যে আপনার ডেটা প্রত্যাশিত ফর্ম্যাটে রয়েছে এবং এতে কেবল প্রত্যাশিত মান রয়েছে, আপনার সেই ডেটা স্টোরেজ অব্যাহত রাখার বিষয়ে চিন্তা করা দরকার।
প্রতিটি একক ডেটা স্টোরেজ মেকানিজমিতে ডেটা সঠিকভাবে পালানো এবং এনকোড করা হয়েছে তা নিশ্চিত করার একটি নির্দিষ্ট উপায় রয়েছে। যদি আপনি এসকিউএল তৈরি করে থাকেন তবে প্রশ্নগুলিতে ডেটা পাস করার স্বীকৃত উপায় হ'ল স্থানধারীদের সাথে প্রস্তুত বিবৃতি ।
পিএইচপি-র বেশিরভাগ এসকিউএল ডেটাবেসগুলির সাথে কাজ করার একটি ভাল উপায় হ'ল পিডিও এক্সটেনশন । এটি বিবৃতি প্রস্তুত করার সাধারণ প্যাটার্ন অনুসরণ করে , বিবৃতিতে ভেরিয়েবলগুলি বাধ্যতামূলক করে , তারপরে সার্ভারে বিবৃতি এবং ভেরিয়েবল প্রেরণ করে । আপনি যদি এখানে পিডিওর সাথে কাজ না করে থাকেন তবে এখানে খুব ভাল মাইএসকিউএল-ভিত্তিক টিউটোরিয়াল রয়েছে ।
কিছু এসকিউএল ডাটাবেসের এসএকিউএল সার্ভার , পোস্টগ্রেএসকিউএল এবং এসকিউএলাইট 3 সহ পিএইচপিতে তাদের নিজস্ব বিশেষ এক্সটেনশন রয়েছে । এই এক্সটেনশনের প্রত্যেকটির স্টেটমেন্ট সমর্থন রয়েছে যা পিডিওর মতো একই রেডি-বাইন্ড-এক্সিকিউটেড ফ্যাশনে কাজ করে। কখনও কখনও অ-মানক বৈশিষ্ট্য বা আচরণ সমর্থন করার জন্য আপনাকে PDO এর পরিবর্তে এই এক্সটেনশনগুলি ব্যবহার করতে হতে পারে।
মাইএসকিউএলের নিজস্ব পিএইচপি এক্সটেনশন রয়েছে। বাস্তবে তাদের মধ্যে দুটি। আপনি কেবল মাইএসকিলি নামে পরিচিতটিকে ব্যবহার করতে চান । পুরানো "মাইকিকিএল" এক্সটেনশনটি অবচিত করা হয়েছে এবং আধুনিক যুগে এটি নিরাপদ বা বোধগম্য নয়।
আমি ব্যক্তিগতভাবে মাইস্কুলির অনুরাগী নই। এটি প্রস্তুত বিবৃতিগুলিতে যেভাবে পরিবর্তনশীল বাইন্ডিং সম্পাদন করে তা অবিরাম এবং এটি ব্যবহারে ব্যথা হতে পারে। সন্দেহ হলে, পরিবর্তে PDO ব্যবহার করুন।
আপনি যদি আপনার ডেটা সঞ্চয় করার জন্য কোনও এসকিউএল ডাটাবেস ব্যবহার না করে থাকেন তবে কীভাবে এটির মাধ্যমে ডেটা পাস করবেন তা নির্ধারণ করতে আপনি যে ডেটাবেস ইন্টারফেসটি ব্যবহার করছেন তার জন্য ডকুমেন্টেশন পরীক্ষা করুন।
সম্ভব হলে, নিশ্চিত করুন যে আপনার ডাটাবেসটি উপযুক্ত ফর্ম্যাটে আপনার ডেটা সঞ্চয় করে। সংখ্যাযুক্ত ক্ষেত্রগুলিতে নম্বর সঞ্চয় করুন। তারিখের ক্ষেত্রগুলিতে তারিখ সঞ্চয় করুন। দশমিক ক্ষেত্রে অর্থ সঞ্চয় করুন, ভাসমান বিন্দু ক্ষেত্র নয়। কীভাবে সঠিকভাবে বিভিন্ন ডেটা টাইপ করা যায় সে সম্পর্কে আপনার ডাটাবেস দ্বারা সরবরাহিত ডকুমেন্টেশন পর্যালোচনা করুন।
উপস্থাপনের জন্য ডেটা পালাচ্ছে
প্রতিবার আপনি যখন ব্যবহারকারীদের ডেটা দেখান, আপনার অবশ্যই নিশ্চিত হওয়া উচিত যে তথ্যটি নিরাপদে পালানো হয়েছে, যদি না আপনি জানেন যে এটি এড়ানো উচিত নয়।
এইচটিএমএল নির্গমন করার সময়, আপনাকে প্রায়শই মূলত ব্যবহারকারী-সরবরাহ করা কোনও ডেটা পাস করা উচিত htmlspecialchars
। প্রকৃতপক্ষে, আপনি যখনই জানেন যে ব্যবহারকারী এইচটিএমএল সরবরাহ করেছে এবং আপনি জানেন যে এটি ইতিমধ্যে কোনও শ্বেতলিস্ট ব্যবহার করে এটি স্যানিটাইজড করা হয়েছে কেবল তখনই আপনি এটি না করা উচিত ।
কখনও কখনও আপনার পিএইচপি ব্যবহার করে কিছু জাভাস্ক্রিপ্ট তৈরি করা প্রয়োজন। জাভাস্ক্রিপ্টের এইচটিএমএলের মতো পালানোর নিয়ম নেই! পিএইচপি এর মাধ্যমে জাভাস্ক্রিপ্টে ব্যবহারকারী দ্বারা সরবরাহিত মান সরবরাহের একটি নিরাপদ উপায় json_encode
।
এবং আরও
ডেটা বৈধকরণের আরও অনেকগুলি সূক্ষ্মতা রয়েছে।
উদাহরণস্বরূপ, অক্ষর সেট এনকোডিং একটি বিশাল ফাঁদ হতে পারে । আপনার অ্যাপ্লিকেশনটির " সমস্ত দিক দিয়ে ইউটিএফ -8 " তে বর্ণিত অনুশীলনগুলি অনুসরণ করা উচিত । অনুমানমূলক আক্রমণ রয়েছে যা আপনি স্ট্রিং ডেটাটিকে ভুল চরিত্রের সেট হিসাবে বিবেচনা করার সময় ঘটতে পারে।
এর আগে আমি ব্রাউজারের ডিবাগ সরঞ্জামগুলি উল্লেখ করেছি। এই সরঞ্জামগুলি কুকির ডেটা ম্যানিপুলেট করতেও ব্যবহার করা যেতে পারে। কুকিজ অবিশ্বস্ত ব্যবহারকারী ইনপুট হিসাবে বিবেচনা করা উচিত ।
ডেটা বৈধতা এবং পালানো ওয়েব অ্যাপ্লিকেশন সুরক্ষার একমাত্র দিক। ওয়েব অ্যাপ্লিকেশন আক্রমণ পদ্ধতি সম্পর্কে আপনার নিজেকে সচেতন করা উচিত যাতে আপনি তাদের বিরুদ্ধে প্রতিরক্ষা তৈরি করতে পারেন।