Чистка бд
@SilverBulletRUПривет.
Как вы зачастую чистите базы данных емейлов / мейлпасс?
Самые частые варианты – Ручная чистка, Софты (в т.ч. и батники). Некоторые и вовсе не чистят бд. Ну а зачем чистить? Взять дамп какой-то, расшифровать, вот тебе идеальный мат. В этой статейке расскажу, зачем чистить базы и как это можно делать.
Зачем вообще чистить базы?
В тех же дампах (откуда и берется основа для переделок и тд) довольно много мусора. Вот некоторые пунктики, на которые стоит обратить внимание:
- Пароли.
Первое и самое важное – пустые пароли. Отсутствие пароля / whitespace символы (символы-невидимки, по типу пробела) = явное удаление строки из бд.
Хеш в поле пароля тоже лучше бы чистить – пароля нет как такового. Виды хешей можно посмотреть тут: ссылочка. - Мейлы.
Тут давайте поподробнее. Мейл делится на две части – логин и домен. Разделитель – '@'.
- Логин.
Зачастую это весьма... интересная часть емейла. Немного всё усложняется спецификациями RFC 822 и RFC 5322. Однако из личных наблюдений – большинство логинов имеет такую структуру (REGEX, пример):(?!.*[-_.+]{2})[a-zA-Z0-9]([a-zA-Z0-9_+.-]*[a-zA-Z0-9])?
т.е. буквы, цифры, парочка спецсимволов и всё. Однако зачастую запрещаются ставить подряд более одного спецсимвола + запрещается ставить спецсимвол в начале и в конце логина.
- Домен.
А вот тут самое вкусное – можно неплохо разгуляться. Допускается использование IPv4/IPv6 айпи, стандартных доменов и доменов в формате punycode (начинается с xn--). Сначала делаем регулярки для этих форматов (всё есть в инете), переходим далее. Какие могут быть домены? Обычные домены эл. почты, сервисы временной почты и уже неработающие домены. Либо и вовсе несуществующие.
Такие домены просто регуляркой не проверить. Убрать домены временной почты можно очистить, собрав базу доменов временной почты (благо, есть списки на гитхабе + апи кикбокса того же) и написав скрипт на том же питоне. Неработающие / несуществующие домены можно чистить через DNS записи. Дело в том, что домен обязан иметь MX записи в DNS, если собирается принимать почту. И снова, собираем новые для себя домены (исключая биги) и гоняем каким-нибудь скриптом для проверки MX записи. Запись есть - прекрасно, домен рабочий. Нет / нет ответа по домену – идет в мусорку.
Бум, мы почистили строки с говнодоменами. - Логины – хз, есть ли смысл чистить. Зачастую логины подчиняются регулярке
[a-zA-Z0-9_-]{4,20}, что значит - можно и вручную пройтись.
Как можно чистить базы? Какие техники, может, спец софт для этого?
Думаю, все мы видели на тематических форумах софт для чистки бд. Зачастую всё ограничивается обычной чисткой пустых полей (пустой пароль, мейл / логин), дубликатов строк и мейлов. Но вот что еще можно подметить:
Есть текстовый редактор EmEditor. Весьма удобный кстати. Качаем кряк, открываем в нем бд и уже сейчас мы можем сортировать строки, удалять дубликаты и работать с регулярками. Как минимум уже неплохая база для чистки вручную.
Есть вариант делать самописные скрипты для чистки бд в разных сценариях. Тоже как вариант, причем для некоторых методик – крайне необходимый. Та же проверка DNS записи или сверка доменов с базой временных доменов.
Еще есть пара слов про гугловские мейлы.
Допустим, у нас есть мейл login@gmail.com. Если к логину добавить '+' и какой-то текст – письмо придет на основной мейл. Если логин разбивать точками – результат будет тот же. Т.е. l.o.g.i.n+random@gmail.com -> login@gmail.com. Сам '+' и текст после него чистить нужно 100%, но вот точки – не знаю.
Проблема в том, что можно зарегать акк гугла с логином, содержащим точки, что значит – при жестком удалении точек со всех емейлов есть шанс потерять истинный логин почты. В общем, выбор за вами...
Что мы имеем в итоге? Пожалуй, стоит комбинировать ручную чистку и пару скриптов. Ручками быстренько почистить дубликаты строк, отсортировать и пройтись регулярками. Может чуть позже в канал залью регулярки для чистки... Ну а потом – скриптами для чистки от строк с херовыми доменами.
Как вам статейка? Что можно еще улучшить, может, где-то рассказать поподробнее? Жду фидбек в комментах :)
P.S. Автору на кофе: TBZzJCydBzokJSZecEpLLW8joBCtoKcNXJ USDT TRC20