UI: panel horizontal con tabs + OSINT dorking profesional (95 dorks)

- index.html: sustituye grid de bloques por 6 tabs horizontales
  (Cuentas base / Redes sociales / Mensajería / Streaming / Buscadores / Data brokers)
  con items como tarjetas en grid responsive
- egosurfing.html: dorking expandido de 12 dorks a ~95 organizados en
  10 categorías OSINT profesionales (nombre, email, teléfono, alias,
  data brokers, pastes/brechas, registros oficiales, perfil profesional,
  geolocalización, archivo histórico) con sistema de tabs dinámico
- erase.js: límites de longitud en campos opcionales (nickname 100,
  phone 30, address 300, extra 500) + type-check explícito en email

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
hacklab 2026-04-07 17:21:56 +02:00
parent 0ca9203522
commit b5ae0ceb29
4 changed files with 479 additions and 166 deletions

View file

@ -12,6 +12,7 @@ const egosearch = require('./routes/egosearch');
const app = express();
app.set('trust proxy', 1); // confía en nginx para obtener la IP real del cliente
app.disable('x-powered-by');
app.use(helmet());
app.use(express.json({ limit: '10kb' }));

View file

@ -7,7 +7,9 @@ const ALLOWED_PROVIDERS = new Set(Object.keys(PROVIDER_DATA));
module.exports = async (req, res) => {
try {
const { provider, email, nickname, phone, address, extra } = req.body;
const { provider, email,
nickname: rawNick, phone: rawPhone,
address: rawAddr, extra: rawExtra } = req.body;
// Validación mínima
if (!provider || !email) {
@ -20,10 +22,16 @@ module.exports = async (req, res) => {
}
// Validación básica de email
if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
if (typeof email !== 'string' || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
return res.status(400).json({ error: 'Email inválido' });
}
// Límites de longitud en campos opcionales (defensa en profundidad)
const nickname = String(rawNick || '').slice(0, 100).trim();
const phone = String(rawPhone || '').slice(0, 30).trim();
const address = String(rawAddr || '').slice(0, 300).trim();
const extra = String(rawExtra || '').slice(0, 500).trim();
// Hash irreversible para referencia (auditoría sin almacenar PII)
const hash = crypto
.createHash('sha256')