علیرضا
5 سال پیش توسط علیرضا مطرح شد
8 پاسخ

کنترل ورودی کاربر

سلام خسته باشید برای کنترل ورودی کاربر تابع ()Htmlspecialchars کافی هست؟
میشه روش های معرفی کنید که بشه به ورودی های کاربر اعتماد کرد؟
و سئوال دومم اینه که وبسایت برای کاربران پنل جدا در نظر گرفته که میتونن مثلا مطالبی ارسال کنند
وقتی همچین آدرسی وارد میشه
site.ir/wp-admin/post/delete/1 مطلب توسط ادمین باید حذف بشه
خب من اومدم یک کلاس کلی برای کنترل سشن ها و دسترسی نوشتم که امنیت و کارایی کلاس بالاست
و اومدم اون رو تو __counstructor کنترولر مطالب گذاشتم و متدهارو اونجا صدا زدم که کاربر دسترسی و سشنش چک میشه
خودم فکرمیکنم امنیتش خیلی پایینه که اینطور عمل کردم آیا واقعا اینطوره؟


ثبت پرسش جدید
Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 5 سال پیش مطرح شد
0

سلام
@paressep28

خواهش میکنم انشالا که مفید باشه!
تو counstructor نزارید به نظرم بهتر هست!
برای موارد ولیدیشی متد جدا در نظر بگیرید
همه چیز رو partial کنید ، جدا جدا
تو یه جا همه رو قرار ندید که دستتون بعدا برای توسعه باز باشه!
بعدا خواستید یه کاری کنید به فرض به این ولیدیتشن نیازی نداشتید ، حالا تو counstructor هست ...! کلی متد ها وابسته شه !! میتونید کاریش کنید نه!
پس جدا کنید همه رو .
به نظرم به صورت trait تعریف کنید ، هر جا تو ر کلاسی نیاز داشتید از اون trait استفاده کنید


Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 5 سال پیش آپدیت شد
0

سلام
@paressep28

برای چک کردن ورودی های کاربر خیلی کارا میشه کرد و خیلی (filterha) ها میشه قرار داد
یه نمونه براتون میزارم

function db_safe($safe_data) {

    $safe_data = strip_tags($safe_data);
    $safe_data = htmlentities($safe_data, ENT_COMPAT, 'UTF-8');
    $safe_data = stripslashes($safe_data);
    $safe_data = htmlspecialchars($safe_data);
    $safe_data = str_replace("\\","",$safe_data);
    $safe_data = str_replace("%","",$safe_data);
    $safe_data = str_replace("$","",$safe_data);
    $safe_data = str_replace("#","",$safe_data);
    $safe_data = str_replace("^","",$safe_data);
    $safe_data = str_replace("~","",$safe_data);
    $safe_data = str_replace("etc","",$safe_data);
    $safe_data = str_replace("passwd","",$safe_data);
    $safe_data = str_replace("<script>","",$safe_data);
    $safe_data = str_replace("<div>","",$safe_data);
    $safe_data = str_replace("while","w h i l e",$safe_data);
return $safe_data;

و راجب سوال دوم
شما باید سشن کاربر ، دسترسی کاربر رو برای هر عملی چک کنید
و اینکه نوع متد های ارسالی رو هم چک کنید
من این لینک شما رو
site.ir/wp-admin/post/delete/1
تو آدرس بار بزنم باید حذف شه؟ خیر
اگه حذف شه اشتباهه!!!!!!!
چون متدم GET هست
شما قبلش شرط بزارید اگر سشن اوکی بود ، اگر دسترسی اوکی بود ، اگر متد POST بود ، اگر هوا خوب بود ، اگر طرف دستش به موس بود
و ...
بعد بیا پاک کن
به همین سادگی نگیرید
کمی شروط بزارید قبلش که چک بشه
این موارد توی فریم ورکا خیلی راحت و خوب پیاده سازی میشه
جلوگیری از حملات CSRF و این موارد که چک کنه هر سندی هر بار که ارسال میشه اطلاعاتش ، همون بار ولیدیت شده هست 100 بار دیگه هم که بزنه 100 بار نباید اون پست حذف شه!

این موارد رو توی کد ها میتونید با گذاشتن شروط متفاوت هندل کنید


علیرضا
تخصص : فرانت اند وب
@sep28 5 سال پیش مطرح شد
0

@Alimotreb
خیلی ممنونم از شما .آقا واقعا عالی جواب میدین و خیلی لذت میبرم:)
تو سئوال۲ من تمام چیزها حتی هوا رو چک میکنم و اونارو تو یه متد میزارم واونا رو تو counstructor اون کلاسی که قراره عملیات انجام بشه فرامیخونم از این لحاظ ضعفی نیست؟


Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 5 سال پیش مطرح شد
0

سلام
@paressep28

خواهش میکنم انشالا که مفید باشه!
تو counstructor نزارید به نظرم بهتر هست!
برای موارد ولیدیشی متد جدا در نظر بگیرید
همه چیز رو partial کنید ، جدا جدا
تو یه جا همه رو قرار ندید که دستتون بعدا برای توسعه باز باشه!
بعدا خواستید یه کاری کنید به فرض به این ولیدیتشن نیازی نداشتید ، حالا تو counstructor هست ...! کلی متد ها وابسته شه !! میتونید کاریش کنید نه!
پس جدا کنید همه رو .
به نظرم به صورت trait تعریف کنید ، هر جا تو ر کلاسی نیاز داشتید از اون trait استفاده کنید


علیرضا
تخصص : فرانت اند وب
@sep28 5 سال پیش مطرح شد
0

@Alimotreb
اقا سلامی مجدد ببخشید
من چنین url هایی دارم

site.ir/post/{titile}

title یه پارامتر هست که ب داده پاس داد میشه
آیا بهینه نیست که در تنظیمات روترم این پارامتر رو از زیر فیلترها عبور بدم بعد به متد مربوطه پاس بدم؟
یا باید تو اون متد اون پارامتر رو از زیر فیلتر عبور بدم؟
د
تو روش اول من یبار قرار میدم برای همیشه

و سئوال دوم من چنین url دارم
site.ir/post/
آیا این میتونه مورد حمله sql injection قرار بگیره؟
من طوری تعریف کردم اگر =site/post?pt جلوش قرار گرفت بی تفاوت عمل کنه


Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 5 سال پیش آپدیت شد
0

سلام
@paressep28

توی معماری MVC ولیدیشن بهتره توی متد قرار بگیره !
SQL Injection به خیلی چیزا بستگی داره
به اینکه شما چطوری به پایگاه داده وصل شدی اصلا
mysql
mysqli
pdo
به این که آیا bindparam میکنید یا نه
یا از صافی رد میکنید یا نه
به این که آیا چیزای مخرب رو از توی کوئری ها در میارید یا نه...!


علیرضا
تخصص : فرانت اند وب
@sep28 5 سال پیش مطرح شد
0

@Alimotreb
خیلی ممنون
اگه از صافی عبور بدم دیگه نیازی به binparam هست یا نه؟


Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 5 سال پیش مطرح شد
1

سلام
@paressep28

اگر از دیتا مطمئنید نه دیگه...
ولی زدنشم خالی از لطف نیست

هم صافی بزارید ، هم فیلتر بزارید
هم توری بزارید
فنس بکشید...!
:-)
چون مهمه واقعا! همه جوره دیتا باید امن باشه.


علیرضا
تخصص : فرانت اند وب
@sep28 5 سال پیش مطرح شد
0

@Alimotreb
درود بر شما


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام