آفلاین
user-avatar

امنیت فرم های عضویت در خبر نامه با php

PHP -
2 سال پیش
توسط Igo آپدیت شد
آفلاین
user-avatar
سید رضا موسوی ( 6567 تجربه )
2 سال پیش
تخصص : برنامه

سلام دوستان
برای برقرای هرچه بیشتر فرم های عضویت در خبرنامه باید چیکار کرد؟

بهترین پاسخ انتخاب شده توسط سید رضا موسوی
آفلاین
user-avatar
Igo
2 سال پیش

در هر وب‌ سایتی که فرمی برای ارسال اطلاعات به سرور موجود باشد، آن وب سایت مستعد ارسال اسپم و بمباران درخواست‌های متعدد خواهد بود.
در برخی موارد استفاده از کپچا می‌تواند راه خوبی برای جلوگیری از ارسال‌های مکرر و مخرب باشد، ولی گاهی اوقات سناریوی ما به شکلی است که امکان استفاده از کپچا، به عنوان یک مکانیزم امنیتی مقدور نیست.
اگر شما یک فرم تماس با ما داشته باشید استفاده از کپچا یک مکانیزم امنیتی معقول می‌باشد و همچنین اگر فرمی جهت ارسال پست داشته باشید. اما در برخی مواقع مانند فرمهای ارسال کامنت، پاسخ، چت و ... امکان استفاده از این روش وجود ندارد و باید به فکر راه حلی مناسب برای مقابل با درخواست‌های مخرب باشیم.
من برای مقابله با مشکل یک شناسه‌ی منحصر به فرد را برای هر درخواست ایجاد کنیم.
برای تولید این شناسه از IP درخواست جاری به مشخصات مرورگر میچسبونم و بعد Hash آن رو حساب میکنم.
مرحله بعد پیاده سازی مکانیزمی برای نگهداری این اطلاعات و بازیابی آن‌ها در هر درخواست است.
برای پیاده سازی این مکانیزم از Cache استفاده میکنم.(هرچند که راه های بهتری هم وجود داره) و زمان انقضا Cache رو یک مقدار دلخواه برای مثال 1 دقیقه قرار میدهم.
خوب حالا یک درخواست ب سرور رسیده. اول شناسه منحصر به فرد این درخواست رو ایجاد میکنم(Hash) و سپس در Cache ب دنبال این شناسه میگردم اگر وجود داشت یعنی این درخواست یک اسپم هست.

آفلاین
user-avatar
حسام موسوی ( 382959 تجربه )
2 سال پیش
تخصص : طراح و برنامه نویس

فرم های خبرنامه تنها وظیفه گرفتن ایمیل کاربر رو دارن تنها کاری که با php باید انجام بدید اینکه اطلاعات رو اعتبار سنجی کنید که حتما ایمیل باشه یا میتونید با htmlspecialchars مقدار کراکتر ها رو چک کنید و در نهایت حتما با کلاس pdo ذخیره سازی انجام بدید

آفلاین
user-avatar
سید رضا موسوی ( 6567 تجربه )
2 سال پیش
تخصص : برنامه

مهندس من اگه یک ربات بزارم که در لحظه چندین عدد ریکوئست ایمیل رو سمت فرم عضویت در خبرنامه بفرسته سایت دان میشه! اینو چیکار باید کرد؟!!

آفلاین
user-avatar
حسام موسوی ( 382959 تجربه )
2 سال پیش
تخصص : طراح و برنامه نویس

میتونید از recaptcha گوگل استفاده کنید
البته میتونید ابتدا چک کنید اگر ip کاربر در رنج ip کاربرای ایرانی نبود recaptcha اعمال بشه
و همچنین راه دیگه اینکه محدودیت بزارید شما میتونید کاری کنید هر کاربر در هر ۳۰ دقیقه یا ۱ ساعت تنها بتونه سه درخواست به اون url ارسال کنه البته منظورم از کاربر ip هست
البته recaptcha راه خوبیه

آفلاین
user-avatar
سید رضا موسوی ( 6567 تجربه )
2 سال پیش
تخصص : برنامه

مهندس ری کپتچا برای قسمت عضویت در خبرنامه عملا هیچ جایی ندیدم استفاده بشه، ولی اون روشی که گفتی هر 30 دقیقه درخواست های url را مبنی بر ip چک و بررسی کنه رو نمیدونم باید چجوری پیاده سازی کنم

آفلاین
user-avatar
سید رضا موسوی ( 6567 تجربه )
2 سال پیش
تخصص : برنامه

مهندس من پروژه ام لاراول نیست که روی هر مسیری اینکارو بکنم، پروژه های غیر لاراول که با php mvc هستند یا همون دیجی کالا که با asp هست اینا اگه بخواند کاربر رو محدود به 3 کلیک در 30 دقیقه کنند عملا بعد از باز کردن 2-3 تا پیج بلاک میشن!

آفلاین
user-avatar
Igo ( 3869 تجربه )
2 سال پیش

در هر وب‌ سایتی که فرمی برای ارسال اطلاعات به سرور موجود باشد، آن وب سایت مستعد ارسال اسپم و بمباران درخواست‌های متعدد خواهد بود.
در برخی موارد استفاده از کپچا می‌تواند راه خوبی برای جلوگیری از ارسال‌های مکرر و مخرب باشد، ولی گاهی اوقات سناریوی ما به شکلی است که امکان استفاده از کپچا، به عنوان یک مکانیزم امنیتی مقدور نیست.
اگر شما یک فرم تماس با ما داشته باشید استفاده از کپچا یک مکانیزم امنیتی معقول می‌باشد و همچنین اگر فرمی جهت ارسال پست داشته باشید. اما در برخی مواقع مانند فرمهای ارسال کامنت، پاسخ، چت و ... امکان استفاده از این روش وجود ندارد و باید به فکر راه حلی مناسب برای مقابل با درخواست‌های مخرب باشیم.
من برای مقابله با مشکل یک شناسه‌ی منحصر به فرد را برای هر درخواست ایجاد کنیم.
برای تولید این شناسه از IP درخواست جاری به مشخصات مرورگر میچسبونم و بعد Hash آن رو حساب میکنم.
مرحله بعد پیاده سازی مکانیزمی برای نگهداری این اطلاعات و بازیابی آن‌ها در هر درخواست است.
برای پیاده سازی این مکانیزم از Cache استفاده میکنم.(هرچند که راه های بهتری هم وجود داره) و زمان انقضا Cache رو یک مقدار دلخواه برای مثال 1 دقیقه قرار میدهم.
خوب حالا یک درخواست ب سرور رسیده. اول شناسه منحصر به فرد این درخواست رو ایجاد میکنم(Hash) و سپس در Cache ب دنبال این شناسه میگردم اگر وجود داشت یعنی این درخواست یک اسپم هست.

آفلاین
user-avatar
Igo ( 3869 تجربه )
2 سال پیش

البته من حواسم نبود که بات ها میتونند هدر User Agent رو عوض کنند.
با توجه به این موضوع دیگه از مشخصات مروگر برای تولید شناسه‌ی منحصر به فرد استفاده نمیکنیم.

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