PDA

View Full Version : mysql_real_escape_stringو... کی حذف میشن؟



theboy
یک شنبه 17 دی 1391, 22:56 عصر
سلام.
دوستان من مجبور شدم تو اسکریپتم از این کد استفاده کنم:

mysql_real_scape_stirng

ولی در php.net زده این تابع حذف خواهد شد! سوالی که دارم اینه که کی حذف میشه؟(اگه مثلا یه چند ماهی بشه تا بتونم mysqli یاد بگیرم خوبه:متفکر: )

بعد برای جلوگیری از sql injection راه بهتری سراغ دارید؟(به جز addslashes)

rezaonline.net
یک شنبه 17 دی 1391, 23:09 عصر
مستندات پی اچ پی
mysqli رو بخون
زیر دو ساعت یاد میگیری .
5 تا متد داره ، استفاده کن .

MMSHFE
یک شنبه 17 دی 1391, 23:13 عصر
با سلام، دوست گرامی، این تابع به این زودی حذف نخواهد شد، بلکه منسوخ میشه. نه تنها این تابع، بلکه کلاً Extension مربوط بهش یعنی mysql حذف میشه و بجاش باید از PDO یا MySQLi استفاده کنید. همیشه هم روال تیم توسعه PHP این بوده (و خواهد بود) که تا چند ماه بعد از اعلام تغییرات (هنوز که تغییری رخ نداده اما اگه رخ بده هم باز تا چند ماه بعدش) توابع قبلی رو تحت عنوان Backward Compatibility پشتیبانی میکنه تا طراحان و توسعه دهندگان قبلی، فرصت سازگاری با نسخه جدید رو داشته باشن. نگران نباشین، اینجا قلمرو مایکروسافت نیست که بدون هماهنگی و رعایت حقوق برنامه نویسان، هر تغییری بخوان ایجاد کنن. ضمناً برای جلوگیری از SQL Injection بهترین راه، استفاده از addslashes (درصورت روشن بودن Magic Quotes) و بعد Escapeکردن با mysql_real_escape_string هست. البته توی MySQLi و PDO عمل Escape یه جورایی توکار شده.

eshpilen
دوشنبه 18 دی 1391, 08:37 صبح
همیشه هم روال تیم توسعه PHP این بوده (و خواهد بود) که تا چند ماه بعد از اعلام تغییرات (هنوز که تغییری رخ نداده اما اگه رخ بده هم باز تا چند ماه بعدش) توابع قبلی رو تحت عنوان Backward Compatibility پشتیبانی میکنه تا طراحان و توسعه دهندگان قبلی، فرصت سازگاری با نسخه جدید رو داشته باشن.
فقط چند ماه؟
نه فکر میکنم چند سال خیلی عادی باشه در این زمینه.
مسخره که نشده این همه برنامه و برنامه نویس که از روش قدیمی استفاده کردن.
هیچ ضرورتی نداره برنامه های قدیمی به این سرعت تغییر کنن یا اصلا تغییر کنن!!

rezaonline.net
دوشنبه 18 دی 1391, 09:45 صبح
اگه نخوای پی اچ پی رو آپدیت کنی ، خب این مشکل پیش نمیاد .
فکر کنم حالا حالاها از php5.3 پشتیبانی بشه .

راستی یکی از مزایای برنامه نویسی شی گرایی اینه که توی همچین مواقعی ، فقط کلاس دیتابیس رو تغییر میدی اونم یکی دو ساعت طول میکشه فقط :قلب:

siavashsay
دوشنبه 18 دی 1391, 09:55 صبح
دوستان فرض کنیم که اصلا قرار حذف بشه !
این تابع جایگزینی داره یا نه ؟!
مثلا به قول آقای شهرکی بجای این تابع از Addslashes استفاده کنیم و بعد از stripslashes ؟!
این رو واسه این میگم که اصلا گیریم 2 سال دیگه این اتفاق افتاد ! به هر حال برای یه مدتی وب سایت به مشکل نخوره !
راه داره آیا ؟!

eshpilen
دوشنبه 18 دی 1391, 10:39 صبح
اگه نخوای پی اچ پی رو آپدیت کنی ، خب این مشکل پیش نمیاد .
فکر کنم حالا حالاها از php5.3 پشتیبانی بشه .

حتی اگر آپدیت هم کنی نباید به این زودیها حذف بشه.
ممکنه نیاز باشه نسخهء PHP رو بخاطر یک باگ امنیتی آپدیت کنی یا به علل دیگه که بعضیاش تحت کنترل همیشگی برنامه نویس و کاربر نیست.
قرار نیست مثلا برای استفاده از یک برنامهء قدیمی در پیدا کردن یک هاست که نسخهء PHP سازگار با برنامه رو داشته باشه به این دلیل به مشکل بخوریم.
برنامهء جا افتاده و بدون مشکلی که داره کار میکنه رو کسی نباید با این دلایل سطحی و غیرضروری از کار بندازه. بازنگری و تغییر این همه برنامه که به این سادگی و همیشه ممکن نیست! گذشته از اینکه معقول و به صرفه هم نیست.

بطور معمول از امکانات Obsolete شده تا چند سال پشتیبانی میشه.
در خیلی موارد اصلا تا مدتهای مدید (حتی بیش از 10 سال، و در مواردی حتی تا چند دهه) و حتی نسلهای متعددی از زبان برنامه نویسی، اون ویژگی حذف نمیشه و فقط برچسب Obsolete میخوره، و برای اطمینان بیشتر از آگاهی برنامه نویسان ممکنه موقع استفاده پیام هشداری چیزی بده موقع اجرا و/یا در محیطهای برنامه نویسی.

AbiriAmir
دوشنبه 18 دی 1391, 13:19 عصر
ضمناً برای جلوگیری از SQL Injection بهترین راه، استفاده از addslashes (درصورت روشن بودن Magic Quotes) و بعد Escapeکردن با mysql_real_escape_string هست. البته توی MySQLi و PDO عمل Escape یه جورایی توکار شده.


It's highly recommended to use DBMS specific escape function (e.g. mysqli_real_escape_string() for MySQL or pg_escape_string() for PostgreSQL), but if the DBMS you're using doesn't have an escape function and the DBMS uses \ to escape special chars, you can use this function.
این متن سایت PHP هست...
طبق این حرف آیا mysql_real_escape_strinf کفایت نمیکنه؟
من متوجه نمیشم که چرا باید از addslashes استفاده کنیم؟

rezaonline.net
دوشنبه 18 دی 1391, 16:34 عصر
ممکنه نیاز باشه نسخهء PHP رو بخاطر یک باگ امنیتی آپدیت کنی یا به علل دیگه که بعضیاش تحت کنترل همیشگی برنامه نویس و کاربر نیست.
فیکس باگ ها تغییری روی ورژن ندارن ، ساب ورژن رو تغییر میدن . php5.3.8 , php5.3.19 اینا همشون php5.3 هستن

Unique
دوشنبه 18 دی 1391, 16:35 عصر
این طبیعی هست که مرور زمان mysql و کلا extension هایی که براشون extension های قوی تری اومده حذف بشوند ! مشکل برای کسانی پیش میاد که اسپاگتی کد میزنن وگرنه برای کسایی که از کلاس ها استفاده میکنند ، مثلا کل عملیات ارتباط با پایگاه و اجرای query ها و مقادیر واکشی شده را از روی یک کلاس انجام میدهند تنها تغییر براشون به روز کردن اون کلاس هست (صحبی که آقا رضا البته گفتند) ، پس سعی کنید به مرور زمان نوع کد نویسی را از وابستگی در بیارین بعدش هر چیزی تغییر منه توی سه سوت میشه upgrade کرد !

siavashsay
دوشنبه 18 دی 1391, 18:11 عصر
یک سوال دارم !
من زیاد با کلاس نویسی آشنا نیستم ! ( بلدم اما نه کلاس های پیچیده رو )
وب سایتم هم نیازی به برنامه نویسی شی گرا نداره به اون صورت ! یعنی زیاد حاد نیست ( البته نه به این منظور که شی گرایی چیز خاصی هست که من نیاز ندارم )
در کل میخوام بدونم مثلا برای Login - Register کردن و یه سری ازین موارد اگر تابع نویسی کنم در یک فایل و بعد در جاهای مورد نیاز اون ها رو استفاده کنم کافی هست یا نه - حتما باید از شی گرایی استفاده شه !
چون توی اکثر کلاس ها بیشتر با توابع کار شده یعنی اون چیزهایی که مورد نیاز من هست !
خوب ازونجایی که منم با کلاس نویسی زیاد رابطه ای ندارم مشکلی نیست اگر تابع نویسی کنم ؟!
فرق زیادی داره ؟!

MMSHFE
دوشنبه 18 دی 1391, 18:25 عصر
همون توابع هم کافی هستن. شئ گرایی بیشتر یک ابزار کمکی هست برای مدیریت راحت تر کد در پروژه های بزرگ.

rezaonline.net
دوشنبه 18 دی 1391, 18:29 عصر
فکر کنم این مبحث رو یکبار دیگه دوستان مطرح کرده بودن ، که من گفتم شی گرایی امکانات بیشتری داره و کاری به فانکشال نداره .
انواع دیزاین پترن رو مطالعه کنید
http://rezaonline.net/blog/dlink/12/?addr=http://www.fluffycat.com/PHP-Design-Patterns/

با هر کدوم که راحت بودید بر اون اساس برنامه تون رو پیاده کنید .
من برای کسائی مثل شما که با MVC کار نکردن ، Factory رو پیشنهاد میکنم ، خیلی ساده است برای هر کاری یک کلاس بنویسید!

داشتم یه مطلب توی وبلاگم مینوشتم در مورد ساخت آدرسهایی بصورت site.ir/index.php/post/id/1 که با oop و کمی خلاقیت قابل پیاده هست بدون نیاز به htaccess .
اگه وقت کنم میذارم توی انجمن .

eshpilen
سه شنبه 19 دی 1391, 08:49 صبح
فیکس باگ ها تغییری روی ورژن ندارن ، ساب ورژن رو تغییر میدن . php5.3.8 , php5.3.19 اینا همشون php5.3 هستن
تاجاییکه دیدم بعضی وقتا مواردی هست که به نسخهء بعدی موکول میشن.

bikran
سه شنبه 19 دی 1391, 22:21 عصر
آيا در MySqli هم بايد رشته ها رو escape كرد براي جلوگيري از SqlInjection؟
يا خود اين كلاس اين كارو انجام ميده و ديگه نيازي نيست ما اين كارو انجام بديم؟

rezaonline.net
چهارشنبه 20 دی 1391, 08:39 صبح
از قابلیت statment استفاده کنید .

bikran
چهارشنبه 20 دی 1391, 09:32 صبح
از قابلیت statment استفاده کنید .

من جواب سوالمو نگرفتم .. آیا خود MySqli اینکارو میکنه ؟ و اینکه آیا کافی هست برای جلوگیری از حملات؟
در مورد قابلیت Statment و نحوه کارکردش هم،اگه میشه بیشتر توضیح بدید؟

MMSHFE
شنبه 23 دی 1391, 21:30 عصر
با سلام، اینجا (http://php.net/manual/en/mysqli.real-escape-string.php) رو ببینید.