PDA

View Full Version : مبتدی: mysql_real_scape_string کاربردش چیه ؟



reza10wert
یک شنبه 27 فروردین 1391, 10:37 صبح
سلام دوستان
mysql_real_scape_string کاربردش چیه ؟

speeed
یک شنبه 27 فروردین 1391, 11:21 صبح
سلام دوستان
mysql_real_scape_string کاربردش چیه ؟
سلام دوست من
از mysql_real_scape_string برای جلوگیری ار حملات sql injection استفاده شده.

SadeghPro19
یک شنبه 27 فروردین 1391, 11:39 صبح
دوستان فرق mysql_real_escape_string با mysql_escape_string چیه ؟!

reza10wert
یک شنبه 27 فروردین 1391, 11:57 صبح
مرسی دوست عزیز
میشه در مورد SQL injection توضیح بفرمایید ؟ چه ضررهایی به سایت میرسونه ؟ این دستوری که نوشتم چی کار میکنه ؟

توضیح کامل لطفا دوستان

SadeghPro19
یک شنبه 27 فروردین 1391, 12:01 عصر
Sql injection در واقع نفذ کردن به سایت یا همون هک کردن سایت از طریق تزریق کدهای sql که میتونه اگه از تابعی که گفتی استفاده نکنی سایتت به راحتی میتونه هک شه..کلا نباید به داده هایی که از کاربر دریافت میکنی اعتماد کنی !!

lady64
یک شنبه 27 فروردین 1391, 12:42 عصر
مرسی دوست عزیز
میشه در مورد SQL injection توضیح بفرمایید ؟ چه ضررهایی به سایت میرسونه ؟ این دستوری که نوشتم چی کار میکنه ؟

توضیح کامل لطفا دوستان

این تاپیک رو هم بخونید . یه تابع برای جلوگیری از ورود داده ها بصورت خام در دیتابیس

http://barnamenevis.org/showthread.php?329684-شرح-یک-تابع

MMSHFE
یک شنبه 27 فروردین 1391, 22:01 عصر
فرض کنید از کاربر دو مقدار user و pass رو ازطریق فرم گرفتین و فرضاً از روش post استفاده شده. بنابراین متغیرهای ['POST['user_$ و ['POST['pass_$ حاوی نام کاربری و رمز عبوری هستن که کاربر وارد کرده. حالا فرض کنیم بعد از دریافت اطلاعات با این Query میخوایم ببینیم کاربر اطلاعاتش درسته یا نه (برای سادگی، موضوع هش کردن رمز رو نادیده گرفتم چون ارتباطی به موضوع بحث ما نداره) :

mysql_query("SELECT * FROM `users` WHERE (`user`='{$_POST['user']}' AND `pass`='{$_POST['pass']}')");
خوب حالا فرض کنید کاربر توی قسمت نام کاربری بنویسه ali و توی قسمت رمز هم بنویسه 1234 که باعث میشه کد فوق بصورت Query زیر در بیاد و اجرا بشه:
SELECT * FROM `users` WHERE (`user`='ali' AND `pass`='1234')
خوب تا اینجا، چون یک کاربر خوب داشتیم، مشکلی پیش نمیاد و فقط درصورتی که نام کاربری و رمز عبور درست وارد شده باشه، کاربر میتونه لاگین کنه. اما فرض کنید یک کاربر شیطون داریم که توی کادر user این عبارت رو مینویسه و قسمت رمز رو هم خالی میگذاره:

admin' OR 1=1);--
ببینیم Query چطوری میشه؟
SELECT * FROM `users` WHERE (`user`='admin' OR 1=1);-- AND `pass`='')
خوب همونطور که میدونیم، توی SQL از -- برای توضیحات استفاده میشه. پس کاربر میتونه الآن با نام کاربری admin و بدون آگاهی از رمز کاربر مدیر سیستم، وارد بشه چون حتی اگه نام کاربری رو هم درست حدس نزده باشه، قسمت OR 1=1 باعث میشه نتیجه کلی شرط WHERE درست باشه و بتونه لاگین کنه و بعد هم رمز رو عوض کنه یا هر کار دیگه که دلش میخواد انجام بده. به این کار میگن SQL Injection و تابع mysql_real_escape_string با Escapeکردن کارکترهای خطرناک مثل ' و - و ; و... و تبدیل اونها به '\ و -\ و ;\ و... اونها رو به کارکترهای معمولی تبدیل کنه تا دیگه برای SQL معنای خاصی نداشته باشن و اون کار اصلی (که پایان دستور اول و تبدیل بقیه Query به توضیحات هست) رو نتونن انجام بدن. اینطوری جلوی اینگونه حملات گرفته میشه.
امیدوارم خوب توضیح داده باشم. موفق باشید.

reza10wert
یک شنبه 27 فروردین 1391, 23:51 عصر
فرض کنید از کاربر دو مقدار user و pass رو ازطریق فرم گرفتین و فرضاً از روش post استفاده شده. بنابراین متغیرهای ['POST['user_$ و ['POST['pass_$ حاوی نام کاربری و رمز عبوری هستن که کاربر وارد کرده. حالا فرض کنیم بعد از دریافت اطلاعات با این Query میخوایم ببینیم کاربر اطلاعاتش درسته یا نه (برای سادگی، موضوع هش کردن رمز رو نادیده گرفتم چون ارتباطی به موضوع بحث ما نداره) :

mysql_query("SELECT * FROM `users` WHERE (`user`='{$_POST['user']}' AND `pass`='{$_POST['pass']}')");
خوب حالا فرض کنید کاربر توی قسمت نام کاربری بنویسه ali و توی قسمت رمز هم بنویسه 1234 که باعث میشه کد فوق بصورت Query زیر در بیاد و اجرا بشه:
SELECT * FROM `users` WHERE (`user`='ali' AND `pass`='1234')
خوب تا اینجا، چون یک کاربر خوب داشتیم، مشکلی پیش نمیاد و فقط درصورتی که نام کاربری و رمز عبور درست وارد شده باشه، کاربر میتونه لاگین کنه. اما فرض کنید یک کاربر شیطون داریم که توی کادر user این عبارت رو مینویسه و قسمت رمز رو هم خالی میگذاره:

admin' OR 1=1);--
ببینیم Query چطوری میشه؟
SELECT * FROM `users` WHERE (`user`='admin' OR 1=1);-- AND `pass`='')
خوب همونطور که میدونیم، توی SQL از -- برای توضیحات استفاده میشه. پس کاربر میتونه الآن با نام کاربری admin و بدون آگاهی از رمز کاربر مدیر سیستم، وارد بشه چون حتی اگه نام کاربری رو هم درست حدس نزده باشه، قسمت OR 1=1 باعث میشه نتیجه کلی شرط WHERE درست باشه و بتونه لاگین کنه و بعد هم رمز رو عوض کنه یا هر کار دیگه که دلش میخواد انجام بده. به این کار میگن SQL Injection و تابع mysql_real_escape_string با Escapeکردن کارکترهای خطرناک مثل ' و - و ; و... و تبدیل اونها به '\ و -\ و ;\ و... اونها رو به کارکترهای معمولی تبدیل کنه تا دیگه برای SQL معنای خاصی نداشته باشن و اون کار اصلی (که پایان دستور اول و تبدیل بقیه Query به توضیحات هست) رو نتونن انجام بدن. اینطوری جلوی اینگونه حملات گرفته میشه.
امیدوارم خوب توضیح داده باشم. موفق باشید.
ممنون دوست عزیز
بسیار عالی و روان توضیح دادید
مرسی از اطلاعات خوبتون