এইচটিএমএল স্পেশালচার্স এবং মাইএসকিএল_রিয়াল_সেস্কেপ_স্ট্রিং কি আমার পিএইচপি কোডটি ইনজেকশন থেকে নিরাপদ রাখে?


116

এর আগে আজ ওয়েব অ্যাপ্লিকেশনগুলিতে ইনপুট বৈধতা কৌশল সম্পর্কিত একটি প্রশ্ন জিজ্ঞাসা করা হয়েছিল ।

শীর্ষ উত্তর, লেখার সময়ে, এ প্রস্তাব দেওয়া PHPমাত্র ব্যবহার htmlspecialcharsএবং mysql_real_escape_string

আমার প্রশ্ন: এটি কি সর্বদা যথেষ্ট? আমাদের আরও জানা উচিত? এই ফাংশনগুলি কোথায় ভেঙে যায়?

উত্তর:


241

যখন এটি ডাটাবেস প্রশ্নের ক্ষেত্রে আসে, সর্বদা চেষ্টা করুন এবং প্রস্তুত প্যারামিটারাইজড কোয়েরিগুলি ব্যবহার করুন। mysqliএবং PDOলাইব্রেরি এই সমর্থন করি। এটি যেমন পালিয়ে যাওয়া ফাংশনগুলি ব্যবহার করার চেয়ে সীমাহীন সুরক্ষিত mysql_real_escape_string

হ্যাঁ, mysql_real_escape_stringকার্যকরভাবে একটি স্ট্রিং পলায়ন ফাংশন। এটি কোনও ম্যাজিক বুলেট নয়। এটি কেবলমাত্র বিপজ্জনক চরিত্রগুলি এড়ানোর জন্য যাতে তারা একটি একক ক্যোয়ারী স্ট্রিংয়ে নিরাপদ থাকতে পারে। তবে, আপনি যদি আগে থেকে নিজের ইনপুটগুলি স্যানিটাইজ না করেন তবে আপনি নির্দিষ্ট আক্রমণকারী ভেক্টরদের কাছে ঝুঁকির মধ্যে পড়বেন।

নিম্নলিখিত এসকিউএল কল্পনা করুন:

$result = "SELECT fields FROM table WHERE id = ".mysql_real_escape_string($_POST['id']);

আপনার এটি দেখতে সক্ষম হওয়া উচিত যে এটি শোষণের পক্ষে ঝুঁকিপূর্ণ।
কল্পনা করুন যে idপ্যারামিটারটিতে সাধারণ আক্রমণ ভেক্টর রয়েছে:

1 OR 1=1

এনকোড করার জন্য সেখানে কোনও ঝুঁকিপূর্ণ অক্ষর নেই, সুতরাং এটি সরাসরি পালানো ফিল্টারটির মধ্য দিয়ে চলে যাবে। আমাদের ছেড়ে:

SELECT fields FROM table WHERE id= 1 OR 1=1

যা একটি সুন্দর এসকিউএল ইঞ্জেকশন ভেক্টর এবং আক্রমণকারীকে সমস্ত সারি ফেরত দিতে দেয়। অথবা

1 or is_admin=1 order by id limit 1

যা উত্পাদন করে

SELECT fields FROM table WHERE id=1 or is_admin=1 order by id limit 1

যা আক্রমণকারীটিকে এই সম্পূর্ণ কাল্পনিক উদাহরণে প্রথম প্রশাসকের বিশদ ফিরিয়ে দিতে দেয়।

যদিও এই ফাংশনগুলি কার্যকর, সেগুলি অবশ্যই যত্ন সহ ব্যবহার করা উচিত। আপনাকে অবশ্যই নিশ্চিত করতে হবে যে সমস্ত ওয়েব ইনপুটগুলি কিছুটা ডিগ্রীতে বৈধ হয়েছে। এই ক্ষেত্রে, আমরা দেখতে পাচ্ছি যে আমাদের শোষণ করা যেতে পারে কারণ আমরা পরীক্ষা করে দেখিনি যে আমরা একটি চলকটি সংখ্যা হিসাবে ব্যবহার করছিলাম, এটি আসলে সংখ্যাসূচক ছিল। পিএইচপি-তে আপনার ইনপুটগুলি পূর্ণসংখ্যার, ভাসমান, আলফানিউমারিক ইত্যাদি রয়েছে কিনা তা পরীক্ষা করতে বিস্তৃত ফাংশনগুলির একটি সেট ব্যবহার করা উচিত তবে এসকিউএল এর ক্ষেত্রে, প্রস্তুত বিবৃতিটির সর্বাধিক মানটি মনোযোগ দেওয়া উচিত। উপরের কোডটি সুরক্ষিত থাকত যদি এটি প্রস্তুত বিবৃতি হত কারণ ডাটাবেস ফাংশনগুলি জানত যে 1 OR 1=1এটি বৈধ আক্ষরিক নয়।

হিসাবে হিসাবে htmlspecialchars()। এটি নিজস্ব একটি খনি ক্ষেত্র।

পিএইচপি-তে একটি আসল সমস্যা রয়েছে যে এতে বিভিন্ন HTML- সম্পর্কিত পালিয়ে যাওয়া ফাংশনগুলির পুরো নির্বাচন রয়েছে এবং ঠিক কোন ফাংশনগুলি কী করে সে সম্পর্কে কোনও পরিষ্কার নির্দেশিকা নেই।

প্রথমত, আপনি যদি এইচটিএমএল ট্যাগের ভিতরে থাকেন তবে আপনি প্রকৃত সমস্যায় পড়েছেন। তাকানো

echo '<img src= "' . htmlspecialchars($_GET['imagesrc']) . '" />';

আমরা ইতিমধ্যে একটি HTML ট্যাগের ভিতরে রয়েছি, তাই বিপজ্জনক কিছু করার জন্য আমাদের <বা> দরকার নেই। আমাদের আক্রমণ ভেক্টর ঠিক হতে পারেjavascript:alert(document.cookie)

এখন ফলাফল HTML এর মত দেখাচ্ছে

<img src= "javascript:alert(document.cookie)" />

আক্রমণ সরাসরি হয়ে যায়।

এটা খুব খারাপ হচ্ছে. কেন? কারণ htmlspecialchars(যখন এটি বলা হয়) কেবল ডাবল উদ্ধৃতিগুলি এনকোড করে এবং একক নয়। সুতরাং আমরা যদি

echo "<img src= '" . htmlspecialchars($_GET['imagesrc']) . ". />";

আমাদের অশুভ আক্রমণকারী সম্পূর্ণ নতুন পরামিতি ইনজেক্ট করতে পারে

pic.png' onclick='location.href=xxx' onmouseover='...

আমাদের দেয়

<img src='pic.png' onclick='location.href=xxx' onmouseover='...' />

এই ক্ষেত্রে, কোনও ম্যাজিক বুলেট নেই, আপনাকে কেবল নিজেই ইনপুটটি সন্তুষ্ট করতে হবে। আপনি যদি খারাপ চরিত্রগুলি চেষ্টা করে এবং ফিল্টার করেন তবে অবশ্যই ব্যর্থ হবেন। একটি শ্বেত তালিকাটি গ্রহণ করুন এবং কেবল ভাল বর্ণগুলি দিয়ে দিন। এ পদ্ধতি এটা XSS ঠকাই শীট কিভাবে বিচিত্র ভেক্টর হতে পারে উপর উদাহরণের জন্য

এমনকি আপনি যদি htmlspecialchars($string)এইচটিএমএল ট্যাগগুলির বাইরে ব্যবহার করেন তবে আপনি এখনও মাল্টি-বাইট চারসেট আক্রমণ আক্রমণকারীদের কাছে ঝুঁকির মধ্যে রয়েছেন।

আপনি সবচেয়ে কার্যকর হতে পারেন নিম্নোক্তভাবে mb_convert_encoding এবং htmlentities এর সংমিশ্রণটি ব্যবহার করা।

$str = mb_convert_encoding($str, 'UTF-8', 'UTF-8');
$str = htmlentities($str, ENT_QUOTES, 'UTF-8');

এমনকি এটি আইটি 6 কে দুর্বল করে দেয়, কারণ এটি ইউটিএফ পরিচালনা করে of তবে আইআই 6 এর ব্যবহার বন্ধ না হওয়া পর্যন্ত আপনি আইএসও -8859-1 এর মতো আরও সীমিত এনকোডিংয়ে ফিরে যেতে পারেন।

মাল্টিবাইট সমস্যার আরও গভীরতার সাথে অধ্যয়নের জন্য https://stackoverflow.com/a/12118602/1820 দেখুন


24
এখানে কেবল মিস করা জিনিসটি হ'ল ডিবি ক্যোয়ারির প্রথম উদাহরণ ... একটি সাধারণ অন্তঃসার () ইনজেকশনটি সমাধান করবে। কোনও সংখ্যার প্রয়োজন হয় এবং স্ট্রিংয়ের প্রয়োজন না হলে সর্বদা মাইস্কেলস্কেপ ... () এর জায়গায় অন্তর্ () ব্যবহার করুন।
রবার্ট কে

11
এবং মনে রাখবেন যে প্যারামিটারাইজড ক্যোয়ারীগুলি ব্যবহার করা আপনাকে সর্বদা ডেটা হিসাবে কোড হিসাবে নয় এমন ডেটা হিসাবে বিবেচনা করার অনুমতি দেবে। PDO এর মতো একটি লাইব্রেরি ব্যবহার করুন এবং যখনই সম্ভব প্যারামিটারাইজড কোয়েরিগুলি ব্যবহার করুন।
চেকিসফ্ট

9
দুটি মন্তব্য: ১. প্রথম উদাহরণে আপনি যদি প্যারামিটারের আশেপাশে কোটও রাখেন তবে আপনি নিরাপদে থাকবেন $result = "SELECT fields FROM table WHERE id = '".mysql_real_escape_string($_POST['id'])."'";২ like দ্বিতীয় ক্ষেত্রে (ইউআরএলযুক্ত বৈশিষ্ট্য), এর কোনও লাভ নেই htmlspecialchars; এই ক্ষেত্রে, আপনার ইউআরএল এনকোডিং স্কিম ব্যবহার করে ইনপুট এনকোড করা উচিত, যেমন, ব্যবহার করে rawurlencode। এইভাবে, কোনও ব্যবহারকারী javascript:এট আল সন্নিবেশ করতে পারে না ।
মার্সেল করপেল

7
"এইচটিএমএল স্পেশালচার্স কেবল ডাবল কোটগুলি এনকোড করে এবং একক নয়": এটি সত্য নয়, এটি পতাকা নির্ধারণের উপর নির্ভর করে, এর পরামিতিগুলি দেখুন
মার্সেল করপেল

2
এটি গা bold় করা উচিত: Take a whitelist approach and only let through the chars which are good.একটি কালো তালিকা সর্বদা কিছু মিস করবে। +1
জো স্মু

10

চেকিসফ্টের দুর্দান্ত উত্তর ছাড়াও:

  • হ্যাঁ, তারা আপনাকে সুরক্ষিত রাখবে, তবে কেবলমাত্র যদি তারা একেবারে সঠিকভাবে ব্যবহৃত হয়। এগুলি ভুলভাবে ব্যবহার করুন এবং আপনি এখনও দুর্বল হয়ে পড়তে পারেন এবং অন্যান্য সমস্যাও থাকতে পারে (উদাহরণস্বরূপ ডেটা দুর্নীতি)
  • পরিবর্তে প্যারামিটারাইজড ক্যোয়ারী ব্যবহার করুন (উপরে বর্ণিত হিসাবে) আপনি এগুলি পিডিওর মাধ্যমে বা পিয়ার ডিবি এর মতো একটি মোড়কের মাধ্যমে ব্যবহার করতে পারেন
  • নিশ্চিত করুন যে ম্যাজিক_কোটস_জিপিসি এবং ম্যাজিক_কোটিস_রুনটাইম সর্বদা বন্ধ রয়েছে এবং সংক্ষেপে কখনও নয়, ঘটনাক্রমে কখনও চালু হয় না। এইগুলি পিএইচপি এর বিকাশকারীরা সুরক্ষা সমস্যা (যা ডেটা ধ্বংস করে) রোধ করতে প্রাথমিক এবং গভীর পথভ্রষ্ট প্রচেষ্টা are

এইচটিএমএল ইনজেকশন (যেমন ক্রস সাইট স্ক্রিপ্টিং) প্রতিরোধের জন্য সিলভার বুলেট নেই তবে আপনি যদি খুব সহজেই এইচটিএমএল আউটপুট দেওয়ার জন্য কোনও লাইব্রেরি বা টেম্প্লেটিং সিস্টেম ব্যবহার করেন তবে আপনি এটি আরও সহজেই অর্জন করতে পারবেন। কীভাবে জিনিসগুলি যথাযথভাবে এড়ানো যায় তার জন্য ডকুমেন্টেশন পড়ুন।

এইচটিএমএলতে, প্রসঙ্গের উপর নির্ভর করে জিনিসগুলি আলাদাভাবে পালানো দরকার। জাভা স্ক্রিপ্টে স্ট্রিং স্থাপনের ক্ষেত্রে এটি বিশেষভাবে সত্য।


3

আমি অবশ্যই উপরের পোস্টগুলির সাথে একমত হব, তবে চেকিসফ্টের উত্তরের জবাব দিতে আমার একটি ছোট জিনিস আছে, বিশেষত:

যখন এটি ডাটাবেস প্রশ্নের ক্ষেত্রে আসে, সর্বদা চেষ্টা করুন এবং প্রস্তুত প্যারামিটারাইজড কোয়েরিগুলি ব্যবহার করুন। Mysqli এবং PDO গ্রন্থাগারগুলি এটি সমর্থন করে। এটি mysql_real_escape_string এর মতো পালানোর ক্রিয়াকলাপগুলি ব্যবহার করার চেয়ে সীমাহীন সুরক্ষিত।

হ্যাঁ, mysql_real_escape_string কার্যকরভাবে কেবল একটি স্ট্রিং পলায়ন ফাংশন। এটি কোনও ম্যাজিক বুলেট নয়। এটি কেবলমাত্র বিপজ্জনক চরিত্রগুলি এড়ানোর জন্য যাতে তারা একটি একক ক্যোয়ারী স্ট্রিংয়ে নিরাপদ থাকতে পারে। তবে, আপনি যদি আগে থেকে নিজের ইনপুটগুলি স্যানিটাইজ না করেন তবে আপনি নির্দিষ্ট আক্রমণকারী ভেক্টরদের কাছে ঝুঁকির মধ্যে পড়বেন।

নিম্নলিখিত এসকিউএল কল্পনা করুন:

= ফলাফল = "সারণী থেকে ক্ষেত্রগুলি নির্বাচন করুন যেখানে আইডি =" m

আপনার এটি দেখতে সক্ষম হওয়া উচিত যে এটি শোষণের পক্ষে ঝুঁকিপূর্ণ। আইডি প্যারামিটারে সাধারণ আক্রমণ ভেক্টর রয়েছে তা কল্পনা করুন:

1 বা 1 = 1

এনকোড করার জন্য সেখানে কোনও ঝুঁকিপূর্ণ অক্ষর নেই, সুতরাং এটি সরাসরি পালানো ফিল্টারটির মধ্য দিয়ে চলে যাবে। আমাদের ছেড়ে:

সারণী থেকে ক্ষেত্র নির্বাচন করুন যেখানে আইডি = 1 বা 1 = 1

আমি একটি দ্রুত সামান্য ফাংশন কোড করেছিলাম যা আমি আমার ডাটাবেস ক্লাসে রেখেছি যা কোনও সংখ্যক নয় এমন কিছু বের করে দেবে। এটি প্রিগ_রেপস ব্যবহার করে, সুতরাং কিছুটা আরও অনুকূলিত ফাংশন রয়েছে তবে এটি একটি চিমটিতে কাজ করে ...

function Numbers($input) {
  $input = preg_replace("/[^0-9]/","", $input);
  if($input == '') $input = 0;
  return $input;
}

পরিবর্তে ব্যবহার না করে

= ফলাফল = "সারণী থেকে ক্ষেত্রগুলি নির্বাচন করুন যেখানে আইডি =" .mysqlrealescapestring ("1 বা 1 = 1");

আমি ব্যবহার করব

= ফলাফল = "সারণী থেকে ক্ষেত্রগুলি নির্বাচন করুন যেখানে আইডি ="। নম্বর ("1 বা 1 = 1");

এবং এটি নিরাপদে ক্যোয়ারী চালাবে

সারণী থেকে ক্ষেত্রগুলি নির্বাচন করুন যেখানে আইডি = 111

অবশ্যই, এটি কেবল সঠিক সারিটি প্রদর্শন করা থেকে বিরত করেছে, তবে আমি মনে করি না যে যে কেউ আপনার সাইটে স্ক্যাল ইনজেক্ট করার চেষ্টা করছে তাদের পক্ষে এটি একটি বড় সমস্যা;)


1
পারফেক্ট! এটি আপনার প্রয়োজন ঠিক ধরণের স্যানিটাইটিসেশন need প্রাথমিক কোডটি ব্যর্থ হয়েছে কারণ এটি কোনও সংখ্যা সংখ্যাসূচক ছিল তা যাচাই করে নি। আপনার কোড এটি করে। আপনার সমস্ত পূর্ণসংখ্যার-ব্যবহার বারগুলিতে নাম্বার () কল করা উচিত যাদের মান কোডবেজের বাইরের থেকে উদ্ভূত হয়।
Cheekysoft

1
এটি উল্লেখ করার মতো বিষয় যে অন্তর্নিহিত () এটির জন্য পুরোপুরি সূক্ষ্মভাবে কাজ করবে, যেহেতু পিএইচপি স্বয়ংক্রিয়ভাবে আপনার জন্য স্ট্রিংগুলিতে পূর্ণসংখ্যাকে জোর করে।
অ্যাডাম আর্নস্ট

11
আমি অন্তর্নিহিত পছন্দ এটি 1abc2 1 তে পরিণত হয়, 12 নয়
jmucchiello

1
ইনডুয়ালটি ভাল, আইডিতে বিশেষত। বেশিরভাগ সময়, যদি এটি দূষিত হয়ে থাকে তবে এর উপরে যেমন রয়েছে, 1 বা 1 = 1। আপনার অন্য ব্যক্তির আইডি ফাঁস করা উচিত নয়। সুতরাং অন্তর্নিহিত সঠিক আইডি ফিরে আসবে। এর পরে, আপনার পরীক্ষা করা উচিত যে আসল এবং সাফ মানগুলি একই if এটি কেবল আক্রমণ থামানোই নয়, আক্রমণকারীদের সন্ধানেরও দুর্দান্ত উপায়।
ত্রিউণক্ষেত্র

2
ভুল সারিটি বিপর্যয়কর হবে যদি আপনি ব্যক্তিগত ডেটা দেখাচ্ছে, আপনি অন্য ব্যবহারকারীর তথ্য দেখতে পাবেন! পরিবর্তে এটি চেক করা ভাল হবেreturn preg_match('/^[0-9]+$/',$input) ? $input : 0;
ফ্র্যাঙ্ক ফোর্ট 11

2

এই ধাঁধার একটি গুরুত্বপূর্ণ অংশ প্রসঙ্গগুলি ts "1 বা 1 = 1" কে আইডি হিসাবে প্রেরণ করা আপনার সমস্যা নয় যদি আপনি আপনার প্রশ্নের প্রত্যেকটি যুক্তি উদ্ধৃত করেন:

SELECT fields FROM table WHERE id='".mysql_real_escape_string($_GET['id'])."'"

যার ফলাফল:

SELECT fields FROM table WHERE id='1 OR 1=1'

যা অকার্যকর। যেহেতু আপনি স্ট্রিং থেকে পালাচ্ছেন, ইনপুটটি স্ট্রিং প্রসঙ্গে ভেঙে যেতে পারে না। আমি এটি এখন পর্যন্ত মাইএসকিউএল এর 5.0.45 সংস্করণ হিসাবে পরীক্ষা করেছি এবং পূর্ণসংখ্যা কলামের জন্য স্ট্রিং প্রসঙ্গ ব্যবহার করা কোনও সমস্যার কারণ হয় না।


15
এবং তারপরে আমি আমার আক্রমণ ভেক্টরটি মাল্টি-বাইট চার্ট 0xbf27 দিয়ে শুরু করব যা আপনার লাতিন 1 ডাটাবেসে ফিল্টার ফક્શન দ্বারা 0xbf5c27 হিসাবে রূপান্তরিত হবে - এটি একটি একক মাল্টিবাইট অক্ষর এবং তারপরে একটি একক উদ্ধৃতি দ্বারা অনুসরণ করা হবে।
Cheekysoft

8
একক পরিচিত আক্রমণকারী-ভেক্টরের বিরুদ্ধে সুরক্ষিত না রাখার চেষ্টা করুন। আপনি আপনার কোডে প্যাচ পরে প্যাচ প্রয়োগের সময় শেষ না হওয়া অবধি আপনার লেজটি তাড়া করবেন। পিছনে দাঁড়িয়ে সাধারণ কেসগুলিতে সন্ধান করা নিরাপদ কোড এবং আরও ভাল সুরক্ষায় মনোনিবেশিত মানসিকতার দিকে ঝুঁকবে।
Cheekysoft

আমি রাজী; আদর্শভাবে, ওপি প্রস্তুত বিবৃতি ব্যবহার করবে।
লুকাস ওমান

1
যদিও এই পোস্টে প্রস্তাবিত যুক্তিগুলির উদ্ধৃতিটি নির্বোধ নয় তবে এটি প্রচলিত 1 বা 1 = 1 ধরণের আক্রমণগুলিকে প্রশমিত করবে তাই এটি উল্লেখ করার মতো।
নাইট আউল

2
$result = "SELECT fields FROM table WHERE id = ".(INT) $_GET['id'];

64 বিট সিস্টেমে আরও ভাল কাজ করে। বিপুল সংখ্যককে সম্বোধন করার ক্ষেত্রে আপনার সিস্টেমের সীমাবদ্ধতা সম্পর্কে সতর্ক থাকুন, তবে ডেটাবেস আইডির জন্য এটি সময়ের 99% কাজ করে।

আপনার মানগুলি সাফ করার জন্য আপনার একক ফাংশন / পদ্ধতি ব্যবহার করা উচিত। এমনকি যদি এই ফাংশনটি mysql_real_escape_string () এর জন্য কেবল একটি র‍্যাপার হয়। কেন? কারণ একদিন যখন আপনার পছন্দসই পদ্ধতিতে ডেটা সাফ করার পদ্ধতি ব্যবহার করা হয় তখন আপনাকে সিস্টেম-ব্যাপী অনুসন্ধান এবং প্রতিস্থাপনের পরিবর্তে কেবলমাত্র এটি এক জায়গায় আপডেট করতে হবে।


-3

কেন, ওহে কেন, আপনি না আপনার স্কয়ার বিবৃতিতে ব্যবহারকারীর ইনপুটগুলির চারপাশে উদ্ধৃতিগুলি অন্তর্ভুক্ত ? বেশ বোকা মনে হয় না! আপনার বর্গক্ষেত্রের বিবৃতিতে উদ্ধৃতি সহ "1 বা 1 = 1" কে একটি নিষ্ফল প্রচেষ্টা রেন্ডার করবে, না?

সুতরাং এখন, আপনি বলবেন, "যদি ব্যবহারকারী ইনপুটটিতে একটি উদ্ধৃতি (বা ডাবল উদ্ধৃতি) অন্তর্ভুক্ত করে?"

ভাল, এর জন্য সহজ সমাধান: কেবল ব্যবহারকারী ইনপুট'র উদ্ধৃতিগুলি সরান। উদাহরণ: input =~ s/'//g;। এখন, এটি যাইহোক আমার কাছে মনে হচ্ছে, সেই ব্যবহারকারী ইনপুট সুরক্ষিত হবে ...


"কেন, ওহ কেন, আপনি কি আপনার স্কয়ার বিবৃতিতে ব্যবহারকারীর ইনপুটগুলির চারপাশে উদ্ধৃতিগুলি অন্তর্ভুক্ত করবেন না?" - প্রশ্নটি ব্যবহারকারী ইনপুটকে উদ্ধৃত না করার বিষয়ে কিছুই বলে না।
কোয়ান্টিন

1
"ভাল, এর জন্য সহজ সমাধান" - এটির জন্য ভয়ঙ্কর সমাধান fix এটি ডেটা ফেলে দেয়। প্রশ্নে উল্লিখিত সমাধানটি একটি ভাল পদ্ধতির।
কোয়ান্টিন

যদিও আমি সম্মত হয়েছি যে প্রশ্নটি ব্যবহারকারীদের ইনপুটটি উদ্ধৃত করে তা সম্বোধন করে না, তবুও মনে হয় ইনপুটটি উদ্ধৃত না করে। এবং, আমি বরং খারাপ ডেটা ইনপুট চেয়ে ডেটা টস করতে চাই। সাধারণত কোনও ইনজেকশন আক্রমণে, আপনি যে কোনও উপায়ে চান না .... ঠিক?
জেরেট এল

"যদিও আমি সম্মত হয়েছি যে প্রশ্নটি ব্যবহারকারীদের ইনপুটটি উদ্ধৃত করে তা সম্বোধন করে না, তবুও ইনপুটটি উদ্ধৃত না করা সিল বলে মনে হচ্ছে।" - না, তা হয় না। প্রশ্ন এটি একভাবে বা অন্যভাবে প্রদর্শন করে না।
কোয়ান্টিন

1
@ জ্যারেটল হয় প্রস্তুত বিবৃতি ব্যবহার করতে অভ্যস্ত হন বা প্রতি মঙ্গলবার আপনার ডেটা নষ্ট করে ববি টেবিলগুলিতে অভ্যস্ত হন । প্যারামিটারাইজড এসকিউএল এসকিউএল ইঞ্জেকশন থেকে নিজেকে রক্ষা করার একমাত্র সেরা উপায়। আপনি যদি প্রস্তুত বিবৃতি ব্যবহার করেন তবে আপনাকে "এসকিউএল ইঞ্জেকশন চেকস" করার দরকার নেই। এগুলি প্রয়োগ করা অত্যন্ত সহজ (এবং আমার মতে কোডটি খুব সহজেই পড়া সহজ করা যায়), স্ট্রিং কনটেনটেশন এবং এসকিউএল ইনজেকশনের বিভিন্ন আইডিসিএনসিরাসি থেকে রক্ষা করুন এবং সর্বোপরি, আপনাকে এটি বাস্তবায়নের জন্য চাকাটিকে পুনরায় উদ্ভাবন করতে হবে না ।
সিয়ুয়াল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.