Реализация Real-Time Email Verification, Spam Detection и Fraud Bot Protection с нуля

#frontend#security#email-validation#npm

TL;DR

Разбираем создание кастомного NPM-пакета для real-time верификации email, защиты от спама и фрод-ботов. Вместо подключения тяжелых сторонних решений - легковесный модуль с MX-рекордами проверкой и базой disposable-почт. Пример реализации на Node.js + React для dashboard.

Введение: контекст и актуальность

В современных веб-приложениях проблема спама и фрода стоит особенно остро. Типичные решения вроде reCAPTCHA или сторонних API:

Мы разберем альтернативу - кастомный модуль veripy-sdk, который:

  1. Проверяет MX-записи в реальном времени
  2. Сверяется с базой 100k+ disposable-почт
  3. Предоставляет admin dashboard для мониторинга

Основная часть: архитектура решения

Ядро: валидация MX-записей

// core/verifyMX.js
import dns from 'dns/promises';

export async function verifyEmailMX(email) {
  const domain = email.split('@')[1];
  try {
    const records = await dns.resolveMx(domain);
    return records.length > 0;
  } catch {
    return false;
  }
}

Disposable-база: bloom filter для оптимизации

Вместо хранения 100k+ записей в памяти используем probabilistic data structure:

// core/disposableFilter.js
import { BloomFilter } from 'bloom-filters';

const disposableDomains = ['tempmail.com', '10minutemail.net' /* ... */];
const filter = BloomFilter.from(disposableDomains, 0.01); // 1% false positive

export function isDisposable(email) {
  const domain = email.split('@')[1];
  return filter.has(domain);
}

Композитная проверка

// index.js
export async function verifyEmail(email) {
  const [validMX, isDisposable] = await Promise.all([
    verifyEmailMX(email),
    isDisposable(email),
  ]);

  return {
    valid: validMX && !isDisposable,
    reasons: {
      invalidMX: !validMX,
      disposable: isDisposable,
    },
  };
}

Практическое применение

Интеграция с фронтендом

  1. Устанавливаем пакет:
npm install veripy-sdk
  1. Real-time проверка в форме:
import { verifyEmail } from 'veripy-sdk';

function EmailForm() {
  const [validation, setValidation] = useState(null);

  const handleChange = debounce(async (email) => {
    const result = await verifyEmail(email);
    setValidation(result);
  }, 500);

  return (
    <>
      <input type="email" onChange={(e) => handleChange(e.target.value)} />
      {validation && !validation.valid && (
        <div className="error">
          {validation.reasons.invalidMX && 'Invalid email domain'}
          {validation.reasons.disposable && 'Disposable email not allowed'}
        </div>
      )}
    </>
  );
}

Admin Dashboard

Реализация на Next.js + WebSockets для real-time мониторинга:

// pages/dashboard.js
import { useEffect, useState } from 'react';
import io from 'socket.io-client';

export default function Dashboard() {
  const [logs, setLogs] = useState([]);

  useEffect(() => {
    const socket = io(process.env.NEXT_PUBLIC_WS_URL);
    socket.on('email_verified', (data) => {
      setLogs(prev => [data, ...prev.slice(0, 100)]);
    });
    return () => socket.disconnect();
  }, []);

  return (
    <div>
      {logs.map(log => (
        <LogEntry key={log.timestamp} {...log} />
      ))}
    </div>
  );
}

Заключение

Представленное решение демонстрирует, что critical security-функционал можно реализовать:

Для production-рекомендаций стоит добавить:

  1. Rate limiting на уровне nginx
  2. Периодическое обновление disposable-базы
  3. Интеграцию с SMTP для deep-валидации

Готовое решение: veripy-sdk (документация в README).


Источник: https://dev.to/urkiddennnn/building-real-time-email-verification-spam-detection-and-fraud-bot-protection-from-scratch-45lc