PDA

View Full Version : escape قبل از insert یا زمان خروجی



IMANAZADI
جمعه 12 شهریور 1395, 09:37 صبح
سلام
دوستان یک سوال


شما برای جلوگیری از xss اطلاعات رو زمانی ورودی از کاربر escape میکنید یا زمان خروجی ؟؟؟

واضح تر : شما وقتی یک ورودی از کاربر میگیرید مثلا محتویات input type='text' همون موقع escape میکنید و در دیتابیس insert میکنید یا محتویات رو بصورت خام و unescape در دیتابیس وارد میکنید و زمانیکه میخواهید به کاربر نمایش بدید escape میکنید ؟؟؟؟

لطفا دلیل خودتون رو ارائه کنید

Unique
جمعه 12 شهریور 1395, 11:51 صبح
موضوع escape ربطی به XSS نداره ! escape برای جلوگیری از حملات SQL Injection هست که با توجه به اینکه mysqli و pdo به صورت پارامتریک اطلاعات را میگیرن و شما Prepared Statement را روی پایگاه اجرا میکنید کلا نیاز به escape کردن نیست دیگه! مگه اینکه از mysql استفاده کنید یا query را توی mysqli و pdo به صورت inline بنویسین. این هم کاملا معلومه که escape باید قبل از اجرا query حالا چه select و چه insert انجام بشه.

در مورد XSS و اینکه شما کی باید escape کنید جواب در خودش مستتر هست ! اصولا وقتی با Data ی مواجه میشیم ممکنه تصمیم اولیه این باشه که مثلا html نباید توش باشه یا مثلا فقط باید به صورت html نمایش داده بشه اما ممکنه در آینده تصمیم به اضافه کردنش توی یک سرویس XML یا JSON داشته باشیم و توی داکیومنت ها باید بگیم ما داریم فلان scaping را انجام میدیم و غیره و غیره !!!!. یا اصلا روشی که برای escape پیش گرفتیم را در میانه های کار تغییر بدیم و حالا باید Data قدیمی و جدید را با توجه به اختلافاتشون توی escape و غیره تغییر بدیم. خلاصه اگر و اما توش هست. اما اگه اصل را ذخیره کنیم و موقع نمایش بر اساس نیاز escape کنیم هیچ مشکلی پیش نمیاد و همیشه نسخه اصلی را داریم !

حواستون باشه منظور XSS هست ها با Sanitize کردن قاطی نکنیم ! وقتی کاربر باید جایی مقدار عددی ارسال کنه باید خطا بدیم ! یا توی Query ها inline باید برای SQL داده را escape کنیم. این ها را با هم قاطی نکنید !

IMANAZADI
جمعه 12 شهریور 1395, 22:09 عصر
موضوع escape ربطی به XSS نداره ! escape برای جلوگیری از حملات SQL Injection هست که با توجه به اینکه mysqli و pdo به صورت پارامتریک اطلاعات را میگیرن و شما Prepared Statement را روی پایگاه اجرا میکنید کلا نیاز به escape کردن نیست دیگه! مگه اینکه از mysql استفاده کنید یا query را توی mysqli و pdo به صورت inline بنویسین. این هم کاملا معلومه که escape باید قبل از اجرا query حالا چه select و چه insert انجام بشه.


دوست عزیز میدونم من اول پست گفتم برای جلوگیری از xss به این خاطر sql injection رو نگفتم چون از pdo و prepare استفاده میکنم پس دلیی واسه نگرانی از حملات sql injection نیست


من خودم اعتقاد دارم escape باید برای xss موقع نمایش انجام بشه چون تو اکثر سایت های معتبر خارجی و مرجع خوندم که گفته بودند
validate input
escape output

ولی خواستم نظر دیگران هم بدونم

hamedarian2009
شنبه 13 شهریور 1395, 11:55 صبح
توی فریمورک های معروف هم موقع نمایش Escape میکنن معمولا با امکانات template engine ایی که دارن و در کل منظقی تر هم هست که موقع نمایش اینکار انجام بشه