description

ثبت شدن اطلاعات فــــــــــیــــــــک در دیتـابیس توسط کاربر

- 2 هفته پیش
توسط Igo آپدیت شد
سعید محمدی ( 560 تجربه )
2 هفته پیش

سلام
ممنون میشم یکی از دوستان و اگه خود مهندس موسوی وقت داشتند جواب بدند که خیلی برام مهمه
من سایت لاراول طراحی کردم که کاربر ثبت نام کنه از همون ثبت نام آماده خود لاراول استفاده کردم نسخه ۵.۶ و تو فرم ثبت نام چند تا فیلد هم مثل کد ملی رو هم گذاشتم که کاربر وارد کنه و نکته مهم اینجاست که تمام اعتبار سنجی ها رو هم سمت کلاینت هم سمت لارول ولیدیشن اجرا کردم ولی امروز یه چیز عجیب دیدم

دیدم یه کاربر که ip شم خارجی بود به احتمال زیاد فیلترشکن استفاده کرده بود ثبت شده و نه ایمیل وارد کرده و نه کدملی ۱۰ رقمی شو وارد کرده فقط یه نام وارد کرده واقعا برام هم جالب بود هم تعجب کردم ؟
باید چیکار کنم پس اعتبار سنجی سمت سرور چرا کار نکرد مثلا گفتم کد ملی ۱۰ رقمی وارد کن حتی باید مطابق فرمول واقعی باشه ولی طرف این و وارد کرده ۰۰۰ خودمم چندین بار تست کردم ولی همه چی درست هست و اعتبار سنجی ها همشون کار میکنه ولی نمیدونم اون کاربر چطوری تونسته سیستم ثبت نام و دور بزنه.

ممنون میشم کمکم کنید

محمد مهدی حسین پور ( 290 تجربه )
2 هفته پیش

من یه بار همچین تجربه ای داشتم که بعد فهمیدم هک شدم. البته سایتم وردپرس بود ولی دیدم یه دفعه طرف اومده چند تا اکانت ساخته با اطلاعاتی که من هیچ جوره سمت کلاینت اجازه اعتبار سنجیشو نداده بودم. خلاصه پدرم دراومد تا اون هکو secure کردم.
الان ولی به نظرم بهترین راه اینه که اول سمت کاربر اعتبار سنجی کنی که با javascript خطا بده.
بعد یه اعتبار سنجی هم سمت سرور کنی که اگر اونجا خطا داد یعنی داره خارج از browser و با curl و ابزارهای هک درخواست میفرسته که باید درجا درخواست و ip طرف بلاک بشه.

در رابطه با سایت خودت نظرم اینه که حتما اعتبار سنجیه سمت سرورت مشکل داره که تونسته دور بزنه.
شایدم یه جا باگ sql injection داری که داره inject میکنه که این مورد تو لاراول خیلی بعیده مگه این که از raw statement ها استفاده کرده باشی.

noname212 ( 217 تجربه )
2 هفته پیش

@pichanakian سلام دلیل این موضوع دو مورد میتونه باشه

  1. اینکه شما برای اعتبار سنجی باید "قبل از ارسال به سمت سرور" اعتبار سنجی هایی انجام میدادید و اینکه فقط کد ده رقم باشه اعتبار سنجی نیست باید شرطی تعریف میکردید با js که فیلد ها رو چک کنه که خالی نباشه یا کاراکتر نامربوط داخلش نباشه و حتی با html هم میتونستید پر کردن فیلد رو به حالت اجباری بزارید اگه این کار ها رو انجام دادید و نتیجه اون شده به معنایه اینه که اعتبار سنجی شما در سمت سرور دارایه مشکل هست که شما در اون حالت وقتی که داده کاربر رو دریافت کردید قبل از اینسرت به DB باید چک میشد که خالی نباشه! و در صورتی که خالی بود اخطار به کاربر بده و به دیتابیس هیچ داده ای رو وارد نکنه به نظر من مراحل ولیدیشن رو چک کنید ببینید چگونه میشه بدون وارد کردن اطلاعات یوزر به دیتابیس رسیده باشه
  2. اگه موارد بالا رو انجام دادید و احراز هویت و اعتبار سنجی به صورت صحیح وارد شده بود اما باز هم این اتفاق همراه بود امکان داره شخص نفوذگر یه مشکل امنیتی در بخش ثبت نام شما پیدا کرده که حالا اسیب پذیری های زیادی میتونن باعث ایجاد یک کاربر جدید بدون احراز هویت بشن که اونها رو باید برسی کنید که بهتره موضوع رو با یک برنامه نویس اگاه به مسائل امنیت و نفوذ در میان بگذارید
سعید محمدی ( 560 تجربه )
2 هفته پیش

دوستان ممنون از نظرهاتون
گفتم از سیستم آماده احراز هویت و ثبت نام خود لاراول استفاده کردم و همه اعتبارسنجی هارو انجام دادم چه سمت کلاینت چه سرور خودم بارها تست کردم چون توکن داریم نمیشه درخواست جعل ارسال بشه با curl هم تست کردم چیزی ثبت نشد تو دیتابیس همه مواردی که فرمودین و قبلا تست کردم و چون به نتیجه نرسیدم اینجا مطرح کردم.

noname212 ( 217 تجربه )
2 هفته پیش

@pichanakian پس یه مشکل امنیتی در سایتتون وجود داره که نفوذگر تونسته به سایتتون داده های دلخواه رو با وجود اعتبار سنجی و احراز هویت ارسال کنه با توکن فقط جلویه Cross site request forgery رو میگیره حداقل 5 الی 6 اسیب پذیری امنیتی دیگه میتونه باعث ایجاد کاربر جدید بشن
در صورت امکان سایتتون رو اف کنید تا مشکل رو پیدا کنید
در صورتی که خودتون با اسیب پذیری اشنایی دارید خودتون دنبال مشکل بگرید
در صورت عدم اشنایی با یک متخصص امنیت مشورت کنید
و توصیه اخر حتی با انجام تمام امن سازی ها سایتتون رو پشت محیط های کلود قرار بدید این جلویه هکر های حرفه ای رو نمیگیره اما جلویه افرادی رو که دانش خاصی برخوردار نیستن و قصد دارن با چند تا ابزار اماده سعی به نفوذ کنن که امضا های دیجیتال بیشتر اون ابزار ها توسط فایروال های کلود ثبت شده رو میگیره

حسام موسوی ( 69306 تجربه )
2 هفته پیش

برای اعتبار سنجی شماره ملی از rule مربوط به regex استفاده کنید . بدونه هیچ استثنایی باید بر اساس پترن regex اطلاعات قرار بگیره و از این داستانها نخواهید داشت

سعید محمدی ( 560 تجربه )
2 هفته پیش

دقیقا اعتبارسنجی کد ملی از پترن regex استفاده شده که به هیچوجه جز کد ملی واقعی رو قبول نمیکنه به هر حال ممنون از نظرات تون ولی من چیزی از خودم ننوشتم همون Auth پیشفرض و فرم Register خود لاراول و استفاده کردم و اصلا بحث کد ملی نیست کاربر تونسته بدون ایمیل هم ثبت کنه !!!!!!! من که دیگه سیستم اعتبارسنجی پیش فرض لاراول و دستکاری نکردم که...
فقط یه فیلد کد ملی اضافه کردم حتی ریکپچل گوگل هم داره فرم.

سیدعلی موسوی ( 7734 تجربه )
2 هفته پیش

سلام

برای من هم یکی دوبار پیش امده بود ، الان هم هست (هم سمت سرور چک میکنم هم سمت کاربر)
عجیبه!! فکر میکردم فقط واس منه این اتفاق!

اومدم فیلدهای مهم رو nullable() هم قرار دادم. ولی باز این مشکل هست!

Igo ( 3479 تجربه )
2 هفته پیش

@pichanakian
سلام
وقتی کد ملی فقط باید 10 رقم باشه باید نوع داده توی دیتابیس CHAR 10 باشه.
یا فیلدی مثل ایمیل باید حتما یونیک باشه که کسی نتونه مقدار تکراری ثبت کنه
اینطوری اگر کسی هم منطق برنامه نویسی و اعتبار سنجی شما رو دور بزنه برای ثبت اطلاعات در سطح پایگاه داده با خطا رو به رو میشه و نمیتونه اطلاعات فیک رو ثبت کنه

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