مقالات

ثبت نام های جعلی و تست کارت: یک پشته امنیتی کوچک برای یک SaaS کوچک


اگر فرم ثبت نام شما چند ماه است فعال است، همین الان به جدول جدیدترین کاربران نگاه کنید. مرتب سازی بر اساس created_at، کمی اسکرول کنید. بسیاری از ما چیزهای مشابهی پیدا می کنیم: نام هایی مانند xkqjvbtr، ایمیل های موجود در دامنه هایی که وجود ندارند، پنج حساب از یک IP در یک دقیقه و هیچ کس دیگر وارد سیستم نمی شود.

به راحتی می توان با آن به عنوان نویز برخورد کرد. به دو دلیل نیست. این بی سر و صدا شماره های شما را از بین می برد، و اگر یک فرم کارت در جایی وجود داشته باشد، می تواند به آزمایش کارت تبدیل شود که هزینه واقعی و اعتماد به پردازنده پرداخت شما را دارد.

این تنظیمات امنیتی کوچکی است که من روی یک SaaS کوچک قرار داده بودم، تقریباً به ترتیب تلاش. هیچ یک از آنها به تیم امنیتی نیاز ندارند.

اول، بدانید که به چه چیزی نگاه می کنید

معمولاً سه چیز مختلف با هم مخلوط می شوند:

  1. ثبت نام های ناخواسته اسکریپت هایی که هر فرمی را که پیدا می کنند پر می کنند، اغلب برای انداختن لینک های هرزنامه به برنامه شما یا فقط به این دلیل که فرم شما آنجا است. آزار دهنده، عمدتا بی ضرر، اما آنها همه چیز را آلوده می کنند.
  2. افراد واقعی از لایه آزاد سوء استفاده می کنند. یک نفر، ده ایمیل یکبار مصرف، ده آزمایش رایگان. مشکل متفاوت، رفع متفاوت (در اینجا آن را پوشش نمی‌دهیم).
  3. تست کارت شخصی که فهرستی از شماره کارت دزدیده شده را دارد از فرم پرداخت شما یا «افزودن روش پرداخت» استفاده می‌کند تا بررسی کند کدام کارت‌ها هنوز کار می‌کنند. راهنمای Stripe برای تست کارت این را به خوبی توضیح می دهد، و یک جزئیات در ذهن من ماندگار شد: آزمایش کنندگان کارت را دوست دارند تنظیم اجرا می شود زیرا اعتبار سنجی در آنجا معمولاً در اظهارنامه دارنده کارت نشان داده نمی شود بنابراین هیچ کس متوجه نمی شود.

سومین موردی است که باید جدی گرفته شود. Stripe آنچه را که باعث شما می شود فهرست می کند: اختلافات ناشی از پرداخت های انجام شده، نرخ پرش بالاتری که می تواند شما را ایجاد کند واقعی کارت‌های مشتریان کاهش، هزینه‌های اضافی و «درآمد» جعلی بیشتری دریافت می‌کنند که شبیه مشتریان جدید در داده‌های شما هستند.

چگونه بفهمیم ضربه خورده ای

داشبورد Stripe خود را باز کنید و موارد زیر را جستجو کنید:

  • افزایش در پرداخت های ناموفق یا مسدود شده
  • انبوهی از خطاهای 402 در گزارش های برنامه نویس، تعداد زیادی از آنها generic_decline
  • مبالغ اندک از مشتریان با نام ها و ایمیل های احمقانه

برای ثبت نام های ناخواسته، یک پرس و جو سریع کار می کند:

SELECT date_trunc('day', created_at) AS day,
       count(*) AS signups,
       count(*) FILTER (WHERE last_login_at IS NULL) AS never_logged_in
FROM users
WHERE created_at > now() - interval '30 days'
GROUP BY 1
ORDER BY 1;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اگر never_logged_in در بعضی روزها ناگهان اوج می گیرد، تا زمانی که ترافیک واقعی تغییر نکرده است، یک لحظه ویروسی نیست.

پشته امنیتی، ابتدا ارزانترین

1. CAPTCHA را در هنگام ثبت نام قرار داده و آن را در سرور تأیید کنید

من Cloudflare Turnstile را دوست دارم زیرا اغلب برای افراد عادی نامرئی است، اما محصول خاص کمتر از یک قانون مهم است: رمز پشتیبان خود را بررسی کنید. خود ویجت از چیزی محافظت نمی کند. اسناد Cloudflare این را روشن می کند: توکن ها را می توان جعل کرد، پس از 5 دقیقه منقضی می شود، و هر کدام فقط یک بار می توانند تأیید شوند. بنابراین کنترل کننده ثبت شما باید نقطه پایانی اعتبارسنجی را فراخوانی کند و در صورت عدم موفقیت درخواست را رد کند:

async function verifyTurnstile(token, ip) {
  const res = await fetch(
    "https://challenges.cloudflare.com/turnstile/v0/siteverify",
    {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({
        secret: process.env.TURNSTILE_SECRET_KEY,
        response: token,
        remoteip: ip,
      }),
    }
  );
  const data = await res.json();
  return data.success === true;
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بسیاری از برنامه های مستقل ویجت را ارائه می کنند و هرگز توکن را تأیید نمی کنند. ربات ها فقط آن را از دست می دهند.

2. سرعت نقاط پایانی مهم را محدود کنید

نه کل سایت فقط ثبت نام کنید، وارد شوید، رمز عبور را بازنشانی کنید و هر چیزی که کارت را لمس می کند. چیزی مانند “حداکثر 5 ثبت IP در ساعت” اکثر اسکریپت ها و تقریباً هیچ شخصی را متوقف می کند. Stripe همان ایده را برای آزمایش کارت ها ارائه می دهد، به عنوان مثال محدود کردن تعداد مشتریان جدیدی که یک IP می تواند در یک روز ایجاد کند.

اگر از یک چارچوب میان‌افزار استفاده می‌کنید، ممکن است 20 خط با یک شمارنده Redis یا یک قانون در CDN/WAF شما باشد، اگر قبلاً از آن استفاده می‌کنید.

3. اجازه ندهید غریبه ها به شکل کارت برسند

این همان کاری است که اگر در جایی یک فرم نقشه وجود داشت، ابتدا انجام می دادم. اگر کسی بتواند بدون حساب یا با حسابی که دو ثانیه پیش ساخته است، «افزودن کارت» را بزند، شما یک چک کننده کارت رایگان هستید. افراد را وادار کنید ابتدا ثبت نام کنند و ایمیل خود را تأیید کنند، سپس مرحله پرداخت را نشان دهند. راهنمای Stripe به این نکته نیز اشاره می کند: هرچه راحت تر به فرم پرداخت خود دسترسی پیدا کنید، تست کارت آسان تر است.

همچنین تعداد کارت هایی را که یک حساب می تواند اضافه کند محدود کنید. مشتری واقعی یک، شاید دو اضافه می کند. هیچ کس قانونی در ده دقیقه 9 اضافه نمی کند.

4. در صورت امکان از قسمت های پرداخت میزبانی شده استفاده کنید

اگر از Stripe، Checkout یا Payment Element استفاده می‌کنید دارای امنیت داخلی برای آزمایش کارت (محدودیت‌های نرخ، الگوها، راه‌اندازهای CAPTCHA) هستند. اگر شکل نقشه خود را در مقابل API خام قرار داده اید، خودتان بیشتر این کار را انجام می دهید. برای یک تیم کوچک، معمولاً تصمیم درستی است که اجازه دهید Stripe مالک این قسمت شود.

5. مراقب تلاش های مجدد باشید

اسناد Stripe یکی را داشت که من انتظارش را نداشتم: تکرار پرداخت تهاجمی می تواند نگاهی بینداز مانند کارت‌های آزمایشی، در صورتی که در سنبله‌هایی با نرخ موفقیت پایین بیایند. و پس از یک حمله، کارت های متصل به مشتریان جعلی را دوباره امتحان نکنید، زیرا این فقط حمله به سمت شما را تکرار می کند.

پاکسازی بعد از حمله

اگر چیزی قبلا گذشت:

  • پرداخت‌های غیر ضروری را قبل از اینکه به اختلاف تبدیل شوند، به سرعت بازیابی کنید
  • حساب های جعلی را حذف یا پرچم گذاری کنید تا دیگر در شماره های شما نمایش داده نشوند
  • بررسی کنید که آیا کلید مخفی شما ممکن است لو رفته باشد (این کلید هرگز نباید در کد فرانت اند یا مخزن عمومی باشد)
  • داشبورد را برای چند روز نظارت کنید تا مطمئن شوید که اصلاحات کار می کنند

بخشی که مردم از دست می دهند: شماره های شما

حتی اگر پول جابجا نشود، ثبت نام های جعلی تصمیمات شما را اشتباه می گیرد. نرخ شرکت شما کاهش می‌یابد، شروع به “تعفیف” انتخاب خوب می‌کنید، و زمانی که کانال واقعاً یک مزرعه ربات بود عالی به نظر می‌رسد. وقتی به معدود معیارهای محصولی که برای 100 کاربر اول شما اهمیت دارد نگاه می کنید، حساب هایی را که هرگز وارد سیستم نشده اند را فیلتر کنید، یا اینکه شماره فعال سازی فقط به شما دروغ می گوید.

ایمیل‌های جعلی نیز پرش می‌کنند و پرش به شهرت فرستنده شما آسیب می‌زند. سپس گذرواژه‌های کاربران واقعی شما بازنشانی می‌شود و ایمیل‌های خوش‌آمدگویی شروع به فرود در هرزنامه می‌کنند. من در مورد اینکه چرا ایمیل بازنشانی رمز عبور شما احتمالاً در هرزنامه است اینجا در DEV نوشتم و ثبت نام های ناخواسته یکی از دلایل خاموش است.

بنابراین: کار بعد از ظهر. تأیید سمت سرور CAPTCHA، محدودیت سرعت در چهار نقطه پایانی، فرم کارت پشت یک حساب تأیید شده. این بیشتر مواردی که روی یک محصول کوچک می افتد را پوشش می دهد.

آیا قبلاً تحت تأثیر آزمایش کارت قرار گرفته اید؟ به شما چه گفت؟


Source link

نوشته های مشابه

دیدگاهتان را بنویسید

دکمه بازگشت به بالا