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

- 4 روز پیش
توسط علیرضا آپدیت شد
علیرضا ( 5210 تجربه )
6 روز پیش
تخصص : بیکار

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

بهترین پاسخ انتخاب شده توسط علیرضا
Alimotreb
6 روز پیش

سلام
@paressep28

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

Alimotreb ( 130332 تجربه )
6 روز پیش
تخصص : کانفیگ سرور و برنامه نویس

سلام
@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 بار نباید اون پست حذف شه!

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

علیرضا ( 5210 تجربه )
6 روز پیش
تخصص : بیکار

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

Alimotreb ( 130332 تجربه )
6 روز پیش
تخصص : کانفیگ سرور و برنامه نویس

سلام
@paressep28

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

علیرضا ( 5210 تجربه )
5 روز پیش
تخصص : بیکار

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

site.ir/post/{titile}

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

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

Alimotreb ( 130332 تجربه )
5 روز پیش
تخصص : کانفیگ سرور و برنامه نویس

سلام
@paressep28

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

علیرضا ( 5210 تجربه )
4 روز پیش
تخصص : بیکار

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

Alimotreb ( 130332 تجربه )
4 روز پیش
تخصص : کانفیگ سرور و برنامه نویس

سلام
@paressep28

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

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

علیرضا ( 5210 تجربه )
4 روز پیش
تخصص : بیکار

@Alimotreb
درود بر شما

برای ارسال پاسخ باید وارد سایت شوید