PHP mysql_real_escape_string() ফাংশন
অর্থ ও ব্যবহার
mysql_real_escape_string() ফাংশন এসকেইপ করে SQL স্ট্রিংয়ের বিশেষ অক্ষরগুলিকে।
এই অক্ষরগুলি প্রভাবিত হয়:
- \x00
- \n
- \r
- \
- '
- "
- \x1a
সফল হলে, এই ফাংশনটি এসকেইপ করা স্ট্রিং ফিরিয়ে দেয়। ব্যর্থ হলে, false ফিরিয়ে দেয়。
বিবরণ
mysql_real_escape_string(string,connection)
পারামিটার | বিবরণ |
---|---|
string | বাধ্যতামূলক। এসকেইপ করতে হলে হলো চিহ্নিত স্ট্রিংটি নির্দিষ্ট করুন。 |
connection | বাধ্যতামূলক। সংযোগ নির্দিষ্ট করুন। যদি নির্দিষ্ট না হয়, তবে আগের সংযোগ ব্যবহার করা হবে。 |
বিবরণ
এই ফাংশনটি string এখানকার বিশেষ অক্ষরগুলির এসকেইপ করা হয়, এবং সংযোগের বর্তমান অক্ষরসমষ্টির কথা মাথায় রেখে, তাই নিরাপদভাবে ব্যবহার করা যায় mysql_query().
সূচনা ও মন্তব্য
সূচনা:এই ফাংশনটি ব্যবহার করে ডাটাবেস হামলা প্রতিরোধ করা যায়。
প্রকল্প
উদাহরণ 1
<?php $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); } // ব্যবহারকারীর নাম ও পাসওয়ার্ড পাওয়ার কোড // ব্যবহারকারীর নাম ও পাসওয়ার্ড এসকেইপ করে, SQL-এ ব্যবহারের জন্য $user = mysql_real_escape_string($user); $pwd = mysql_real_escape_string($pwd); $sql = "SELECT * FROM users WHERE user='" . $user . "' AND password='" . $pwd . "'" // আরও কোড mysql_close($con); ?>
উদাহরণ 2
ডাটাবেস হামলা। এই উদাহরণ দেখায় যদি আমরা ব্যবহারকারীর নাম ও পাসওয়ার্ডের জন্য mysql_real_escape_string() ফাংশন লাগাবো না, তবে কি হবে:
<?php $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); } $sql = "SELECT * FROM users WHERE user='{$_POST['user']}' AND password='{$_POST['pwd']}'" mysql_query($sql); // ব্যবহারকারীর নাম ও পাসওয়ার্ড নিশ্চিত করবে না // ব্যবহারকারীর কোনোভাবের নাম বা পাসওয়ার্ড হতে পারে, যেমন: $_POST['user'] = 'john'; $_POST['pwd'] = '" OR ''='"; // কিছু কোড... mysql_close($con); ?>
তারপর SQL কোড এইরকম হবে:
SELECT * FROM users WHERE user='john' AND password='' OR ''=''
This means that any user can log in without entering a valid password.
Example 3
Correct way to prevent database attacks:
<?php function check_input($value) { // Remove backslashes if (get_magic_quotes_gpc()) { $value = stripslashes($value); } // If not a number, add quotes if (!is_numeric($value)) { $value = "'" . mysql_real_escape_string($value) . "'"; } return $value; } $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); } // Perform secure SQL $user = check_input($_POST['user']); $pwd = check_input($_POST['pwd']); $sql = "SELECT * FROM users WHERE user=$user AND password=$pwd"; mysql_query($sql); mysql_close($con); ?>