PHP

Скажем СПАМу НЕТ!!!

Ссылочный антиспам для веб-форм.

Назначение

Дополнительная хорошая защита от автоматических (и не только) ботов, активно пытающихся засорить веб-страницы (форумы, гостевые книги) ссылками на порносайты.

Принцип работы

Проверка текста на СПАМ по "чёрным" спискам:
1. список запрещённых слов в доменах и субдоменах
2. список запрещённых вхождений в ссылках
3. список запрещённых доменов


Пример использования:
Code (php):	скопировать код в буфер обмена
if (@$_SERVER['REQUEST_METHOD'] === 'POST' && is_spam($_REQUEST)) trigger_error('На нашем сайте СПАМ запрещён!', E_USER_ERROR);


Класс:
<?
/**
 * Назначение:
 *   Дополнительная хорошая защита от автоматических (и не только) ботов,
 *   активно пытающихся засорить веб-страницы (форумы, гостевые книги) ссылками на порносайты.
 *   Если в ссылках найдены запрещённые слова, текст считается спамом.
 *
 * Принцип работы:
 *   Проверка текста на СПАМ по "чёрным" спискам:
 *   1. список запрещённых слов в доменах и субдоменах
 *   2. список запрещённых вхождений в ссылках
 *   3. список запрещённых доменов
 *
 * Пример использования:
 *   if (@$_SERVER['REQUEST_METHOD'] === 'POST' && is_spam($_REQUEST)) trigger_error('На нашем сайте СПАМ запрещён!', E_USER_ERROR);
 *
 * @param   mixed(string/array)  $s      строка или массив для проверки (массивы обходятся рекурсивно)
 *                                       текст м.б. html кодом
 * @param   string               $found  найденный "плохой" фрагмент текста
 * @return  bool                         возвращает TRUE, если тест содержит спам и FALSE в противном случае.
 *
 * @license  http://creativecommons.org/licenses/by-nc-sa/3.0/
 * @author   Nasibullin Rinat <n a s i b u l l i n  at starlink ru>
 * @charset  ANSI
 * @version  1.3.0
 */
function is_spam($s, &$found = null)
{
    if (is_array($s)) foreach ($s as $k => &$v) if (is_spam($v, $found)) return true;
    if (! is_string($s) || strlen($s) < 6 /*sex.ru*/) return false;

    #Ниже представлены домены первого уровня общесетевых и географических (региональных) ресурсов.
    #Источник: http://www.tigir.com/domains.htm
    $domains1 = array(
        #Домены общесетевых ресурсов
        'com',    #коммерческие ресурсы
        'net',    #ресурсы и организации связанные с сетью
        'org',    #некоммерческие организации
        'info',   #информационные узлы
        'biz',    #ресурсы для бизнеса
        'name',   #доменная зона для частных лиц. Домен в зоне .name имеет три 'уровня' и выглядит так: имя.фамилия.name или так: фамилия.имя.name.
        'aero',   #домен для членов Авиационного сообщества и их потребителей
        'arpa',   #домен используемый исключительно для инфраструктуры интернета
        'edu',    #ВУЗ-ы США
        'int',    #международные организации
        'gov',    #правительственные организации США
        'mil',    #военные ведомства США
        'coop',   #кооперативы и организации их обслуживающие
        'museum', #музеи, учреждения и частные лица, имеющие отношение к музейному делу
        'mobi',   #сайты для мобильных устройств
        'travel', #индустрия путешествий, экскурсий и отдыха: турагентства, туроператоры и т.д.

        #Географические домены
        'ac', #о-в Вознесения (Ascension Island)
        'ad', #Андорра (Andorra)
        'ae', #Объединенные Арабские Эмираты (United Arab Emirates)
        'af', #Афганистан (Afghanistan)
        'ag', #Антигуа и Барбуда (Antigua and Barbuda)
        'ai', #Ангилья (Anguilla)
        'al', #Албания (Albania)
        'am', #Армения (Armenia)
        'an', #Антильские острова (Netherlands Antilles)
        'ao', #Ангола (Angola)
        'aq', #Антарктида (Antarctica)
        'ar', #Аргентина (Argentina)
        'as', #Американское Самоа или Восточное Самоа (American Samoa)
        'at', #Австрия (Austria)
        'au', #Австралия (Australia)
        'aw', #Аруба (Aruba)
        'az', #Азербайджан (Azerbaijan)
        'ba', #Босния и Герцеговина (Bosnia and Herzegovina)
        'bb', #Барбадос (Barbados)
        'bd', #Бангладеш (Bangladesh)
        'be', #Бельгия (Belgium)
        'bf', #Буркина-Фасо (Burkina Faso)
        'bg', #Болгария (Bulgaria)
        'bh', #Бахрейн (Bahrain)
        'bi', #Бурунди (Burundi)
        'bj', #Бенин (Benin)
        'bm', #Бермудские острова (Bermuda)
        'bn', #Бруней (Brunei Darussalam)
        'bo', #Боливия (Bolivia)
        'br', #Бразилия (Brazil)
        'bs', #Багамские острова (Bahamas)
        'bt', #Бутан (Bhutan)
        'bv', #остров Буве (Bouvet Island)
        'bw', #Ботсвана (Botswana)
        'by', #Белоруссия (Belarus)
        'bz', #Белиз (Belize)
        'ca', #Канада (Canada)
        'cc', #Cocos (Keeling) Islands (Кокосовые острова)
        'cd', #Демократическая Республика Конго (Democratic Republic of the Congo)
        'cf', #Центральноафриканская Республика (Central African Republic)
        'cg', #Республика Конго (Republic of the Congo)
        'ch', #Швейцария (Switzerland)
        'ci', #Кот-д'Ивуар (Cote d'Ivoire)
        'ck', #острова Кука (Cook Islands)
        'cl', #Чили (Chile)
        'cm', #Камерун (Cameroon)
        'cn', #Китай (China)
        'co', #Колумбия (Colombia)
        'cr', #Коста-Рика (Costa Rica)
        'cu', #Куба (Cuba)
        'cv', #Кабо-Верде (Cape Verde)
        'cx', #остров Рождества (Christmas Island)
        'cy', #Кипр (Cyprus)
        'cz', #Чешская Республика (Czech Republic)
        'de', #Германия (Germany)
        'dj', #Джибути (Djibouti)
        'dk', #Дания (Denmark)
        'dm', #Доминика (Dominica)
        'do', #Доминиканская Республика (Dominican Republic)
        'dz', #Алжир (Algeria)
        'ec', #Эквадор (Ecuador)
        'ee', #Эстония (Estonia)
        'eg', #Египет (Egypt)
        'eh', #Западная Сахара (Western Sahara)
        'er', #Эритрея (Eritrea)
        'es', #Испания (Spain)
        'et', #Эфиопия (Ethiopia)
        'eu', #ная зона стран Евросоюза
        'fi', #Финляндия (Finland)
        'fj', #Фиджи (Fiji)
        'fk', #Фолклендские острова или Мальвинские острова (Falkland (Malvina) Islands)
        'fm', #Микронезия (Micronesia)
        'fo', #Фарерские острова (Faroe Islands)
        'fr', #Франция (France)
        'ga', #Габон (Gabon)
        'gd', #Гренада (Grenada)
        'ge', #Грузия (Georgia)
        'gf', #Французская Гвиана (French Guiana)
        'gg', #Гернси (Guernsey)
        'gh', #Гана (Ghana)
        'gi', #Гибралтар (Gibraltar)
        'gl', #Гренландия (Greenland)
        'gm', #Гамбия (Gambia)
        'gn', #Гвинея (Guinea)
        'gp', #Гваделупа (Guadeloupe)
        'gq', #Экваториальная Гвинея (Equatorial Guinea)
        'gr', #Греция (Greece)
        'gs', #Южная Георгия и Южные Сандвичевы острова (South Georgia and the South Sandwich Islands)
        'gt', #Гватемала (Guatemala)
        'gu', #Гуам (Guam)
        'gw', #Гвинея-Бисау (Guinea-Bissau)
        'gy', #Гайана (Guyana)
        'hk', #Гонконг (Hong Kong)
        'hm', #островов Херд и Макдоналд (Heard and McDonald Islands)
        'hn', #Гондурас (Honduras)
        'hr', #Хорватия (Croatia)
        'ht', #Гаити (Haiti)
        'hu', #Венгрия (Hungary)
        'id', #Индонезия (Indonesia)
        'ie', #Ирландия (Ireland)
        'il', #Израиль (Israel)
        'im', #остров Мэн (Isle of Man)
        'in', #Индия (India)
        'io', #Британских территорий в Индийском океане (British Indian Ocean Territory)
        'iq', #Ирак (Iraq)
        'ir', #Иран (Iran)
        'is', #Исландия (Iceland)
        'it', #Италия (Italy)
        'je', #Джерси (Jersey)
        'jm', #Ямайка (Jamaica)
        'jo', #Иордания (Jordan)
        'jp', #Япония (Japan)
        'ke', #Кения (Kenya)
        'kg', #Киргизия (Kyrgyzstan)
        'kh', #Камбоджа (Cambodia)
        'ki', #Кирибати (Kiribati)
        'km', #Коморы (Comoros)
        'kn', #Сент-Китс и Невис (Saint Kitts and Nevis)
        'kp', #Северная Корея (Korea Norht)
        'kr', #Южная Корея (Korea South)
        'kw', #Кувейт (Kuwait)
        'ky', #Каймановы острова (Cayman Islands)
        'kz', #Казахстан (Kazakhstan)
        'la', #Лаос (Laos)
        'lb', #Ливан (Lebanon)
        'lc', #Сент-Люсия (Saint Lucia)
        'li', #Лихтенштейн (Liechtenstein)
        'lk', #Шри-Ланка (Sri Lanka)
        'lr', #Либерия (Liberia)
        'ls', #Лесото (Lesotho)
        'lt', #Литва (Lithuania)
        'lu', #Люксембург (Luxembourg)
        'lv', #Латвия (Latvia)
        'ly', #Ливия (Libya)
        'ma', #Morocco
        'mc', #Монако (Monaco)
        'md', #Молдова (Moldova)
        'mg', #Мадагаскар (Madagascar)
        'mh', #Маршалловы острова (Marshall Islands)
        'mk', #Македония (Former Yugoslav Republic of Macedonia)
        'ml', #Мали (Mali)
        'mm', #Бирма (Burma) или Мьянма (Myanmar)
        'mn', #Монголия (Mongolia)
        'mo', #Макао (Macao)
        'mp', #северные Марианские острова (Northern Mariana Islands)
        'mq', #Мартиника (Martinique)
        'mr', #Мавритания (Mauritania)
        'ms', #Монтсеррат (Montserrat)
        'mt', #Мальта (Malta)
        'mu', #Маврикий (Mauritius)
        'mv', #Мальдивы (Maldives)
        'mw', #Малави (Malawi)
        'mx', #Мексика (Mexico)
        'my', #Малайзия (Malaysia)
        'mz', #Мозамбик (Mozambique)
        'na', #Намибия (Namibia)
        'nc', #Новая Каледония (New Caledonia)
        'ne', #Нигер (Niger)
        'nf', #Норфолк (Norfolk Island)
        'ng', #Нигерия (Nigeria)
        'ni', #Никарагуа (Nicaragua)
        'nl', #Нидерланды (Netherlands)
        'no', #Норвегия (Norway)
        'np', #Непал (Nepal)
        'nr', #Науру (Nauru)
        'nu', #остров Ниуэ (Niue)
        'nz', #Новая Зеландия (New Zealand)
        'om', #Оман (Oman)
        'pa', #Панама (Panama)
        'pe', #Перу (Peru)
        'pf', #Французская Полинезия (French Polynesia)
        'pg', #Папуа - Новая Гвинея (Papua New Guinea)
        'ph', #Филиппины (Philippines)
        'pk', #Пакистан (Pakistan)
        'pl', #Польша (Poland)
        'pm', #Сен-Пьер и Микелон. (St. Pierre and Miquelon)
        'pn', #остров Питкэрн (Pitcairn Island)
        'pr', #Пуэрто-Рико (Puerto Rico)
        'ps', #Палестинские территории (Palestinian Territories)
        'pt', #Португалия (Portugal)
        'pw', #Палау (Palau)
        'py', #Парагвай (Paraguay)
        'qa', #Катар (Qatar)
        're', #остров Реюньон (Reunion Island)
        'ro', #Румыния (Romania)
        'ru', #Россия (Russia)
        'rw', #Руанда (Rwanda)
        'sa', #Саудовская Аравия (Saudi Arabia)
        'sb', #Соломоновы Острова (Solomon Islands)
        'sc', #Сейшеллы (Seychelles)
        'sd', #Судан (Sudan)
        'se', #Швеция (Sweden)
        'sg', #Сингапур (Singapore)
        'sh', #остров Святой Елены (St. Helena)
        'si', #Словения (Slovenia)
        'sj', #острова Шпицберген и Ян-Майен (Svalbard and Jan Mayen Islands)
        'sk', #Словакия (Slovakia)
        'sl', #Сьерра-Леоне (Sierra Leone)
        'sm', #Сан-Марино (San Marino)
        'sn', #Сенегал (Senegal)
        'so', #Сомали (Somalia)
        'sr', #Суринам (Suriname)
        'st', #Сан-Томе и Принсипи (Sao Tome and Principe)
        'su', #территориальный домен CCCP
        'sv', #Сальвадор (El Salvador)
        'sy', #Сирия (Syria)
        'sz', #Свазиленд (Swaziland)
        'tc', #острова Тёркс и Кайкос (Turks and Caicos Islands)
        'td', #Чад (Chad)
        'tf', #Южные Французские Территории (French Southern Territories)
        'tg', #Того (Togo)
        'th', #Таиланд (Thailand)
        'tj', #Таджикистан (Tajikistan)
        'tk', #Токелау (Tokelau)
        'tm', #Туркменистан (Turkmenistan)
        'tn', #Тунис (Tunisia)
        'to', #Тонга (Tonga)
        'tp', #Восточный Тимор (East Timor)
        'tr', #Турция (Turkey)
        'tt', #Тринидад и Тобаго (Trinidad and Tobago)
        'tv', #Тувалу (Tuvalu)
        'tw', #Тайвань (Taiwan)
        'tz', #Танзания (Tanzania)
        'ua', #Украина (Ukraine)
        'ug', #Уганда (Uganda)
        'uk', #Соединённое Королевство (United Kingdom)
        'um', #Американские Малые Внешние острова (US Minor Outlying Islands)
        'us', #Соединенные Штаты Америки (United States)
        'uy', #Уругвай (Uruguay)
        'uz', #Узбекистан (Uzbekistan)
        'va', #Ватикан (Vatican)
        'vc', #Сент-Винсент и Гренадины (Saint Vincent and the Grenadines)
        've', #Венесуэла (Venezuela)
        'vg', #Британские Виргинские острова (British Virgin Islands)
        'vi', #Американские Виргинские острова (US Virgin Islands)
        'vn', #Вьетнам (Vietnam)
        'vu', #Вануату (Vanuatu)
        'wf', #острова Уоллис и Футуна. (Wallis and Futuna Islands)
        'ws', #Самоа (Samoa)
        'ye', #Йемен (Yemen)
        'yt', #Майотта (Mayotte)
        'yu', #Yugoslavia
        'za', #ЮАР, Южно-Африканская Республика (South Africa)
        'zm', #Замбия (Zambia)
        'zw', #Зимбабве (Zimbabwe)
    );

    $re_urls = array(
        #1. список запрещённых слов в доменах и субдоменах
        array(
            '.',
            '~(?<![a-z@])
              (?: sexy?        (?>[-\d.][-a-z\d]*)*  #! sexadecimal, sextan
                | seks         (?>[-\d.][-a-z\d]*)*
                | xxx          (?>[-\d.][-a-z\d]*)*
                | free         (?>[-\d.][-a-z\d]*)*  #! freedom, freebsd
                | porno?       [-a-z\d.]*
                | porevo       [-a-z\d.]*
                | putana       [-a-z\d.]*
                | prostitutk   [-a-z\d.]*
                | individualk  [-a-z\d.]*
                | orgazm       [-a-z\d.]*
                | viagra       [-a-z\d.]*
                | siski        [-a-z\d.]*
                | link         [-a-z\d.]*  #linkspace, linkfeed, etc.
                #на бесплатных хостингах создают много рекламных и порно-сайтов
                | host(?:s|ing)? (?>[-\d.][-a-z\d]*)*  #! hostel, hostile
                | [a-z\d]+host(?:s|ing)?
                | \d+[mgt]b      (?>[-\d.][-a-z\d]*)*  #100mb.com, 1gb.ru
              )
              \.(?:' . implode('|', $domains1) . ')
              (?![a-z\d])
             ~six',
        ),

        #2. список запрещённых вхождений в ссылках
        array(
            ':/',
            '~ (?:htt?ps?|ftp)://?
               [^\x20\r\n\t]*
               (?: #порнуха
                   porno?
                 | porev[oa]
                 | eroti[kc]
                 | dosug
                 | gruppovuh
                 | razvrat
                 | seksapiln
                 | zanima[tlu]
                 | oralnym
                 | seksom
                 | klitor
                 | sisk[iao]
                 | pizda
                 | pisk[aio]
                 | minet
                 | orgazm
                 | grudi
                 | chlen
                 | vlagalische
                 | soset
                 | traha[euy]t
                 | drochit
                 | vaginaln
                 | putana
                 | prostitutk
                 | individualk
                 | lesbiy?ank
                 | starushk
                 | gomoseks
                 | gomosexy?
                 | devochk
                 | suchk[ia]
                 | telk[ia]
                 | seksualn
                 | gryazn[oiy]
                 | goryachenk
                 | gol[oiy]e
                 | gol[yi]h
                 | zrel[yi]m
                 | zadnicam
                 | fuck
                 | ebutsya
                 | iznasilovan
                 | sexy?zone
                 | (?<![a-z]) seks   (?![a-z])
                 | (?<![a-z]) sexy?  (?![a-z])
                 | (?<![a-z]) hu[yi] (?![a-z])
                 | (?<![a-z]) xxx    (?![a-z])
                 | (?<![a-z]) ebut   (?![a-z])
                 | (?<![a-z]) ebal   (?![a-z])
                 | (?<![a-z]) free   (?![a-z])

                 #услуги, реклама и прочее
                 | viagra
                 | znakomstv
                 | znamenitost
                 | arend[au]
                 | kupit
                 | prodat
                 | shop
                 | narkotiki
                 | nasilie
                 | izdevatelstv
                 | nikrofil
                 | mafia
                 | besplatno
                 | halyava
               )
             ~six',
        ),

        #3. список запрещённых доменов (которые пытались добавить на веб-сайт автоматические роботы-спаммеры)
        array(
            '.',
            '~(?<![-a-z\d@])  #проверяем, чтобы домен небыл частью другого домена или e-mail адресом!
              (?: #на бесплатных хостингах создают много рекламных и порно-сайтов
                  #список был получен из интернета и сформирован примерно так: preg_match_all() -> strtolower() -> array_unique() -> sort()
                  02g\.net
                | 3dn\.ru
                | 3x\.ro
                | 5gigs\.com
                | 6te\.net
                | 99inch\.com
                | addr\.ru
                | affari\.to
                | agava\.ru
                | al\.ru
                | alfamoon\.com
                | alfaspace\.net
                | awardspace\.com
                | ayola\.net
                | beplaced\.(?:com|de|ru)
                | bestof\.ru
                | bfast\.com
                | bip\.ru
                | bloomberg\.ru
                | bobos\.ca
                | boom\.mail\.ru
                | boom\.ru
                | bos\.ru
                | by\.ru
                | byu\.ru
                | chat\.ru
                | clan\.su
                | dama-pik\.ru
                | dem\.ru
                | dotgeek\.org
                | e2e\.ru
                | eclub\.lv
                | envy\.nu
                | eomy\.net
                | europeel\.com
                | ezgoal\.biz
                | f5k\.com
                | far\.ru
                | fatal\.ru
                | flywebs\.com
                | fortunecity\.com
                | freevat\.com
                | fud\.ru
                | galactic-tech\.com
                | h\d+\.ru
                | ho\.com\.ua
                | hobby\.ru
                | hobi\.ru
                | holm\.ru
                | hop\.ru
                | hopshot\.com
                | hothostcity\.com
                | hut\d*\.ru
                | i7i\.ru
                | indusfamily\.com
                | intobservatory\.ru
                | isolation\.cc
                | iwebs\.ru
                | jino(?:-net)?\.ru
                | k70\.ru
                | km\.ru
                | lapin\.ru
                | lgg\.ru
                | medbox\.ru
                | mesto\.ws
                | mixa\.cc
                | moy\.su
                | mrezha\.ru
                | my1\.ru
                | mydot\.ru
                | myopenweb\.com
                | na\.by
                | narod\.ru
                | nixup\.com
                | noka\.ru
                | nx0\.ru
                | o2g\.net
                | onepage\.ru
                | org(?:free)?\.ru
                | orthodoxy\.[rs]u
                | paltus\.ru
                | pesni\.ru
                | phpmysql\.ru
                | polubomu\.ru
                | pp\.net\.ua
                | promostudio\.ru
                | pud\.ru
                | qksrv\.net
                | ru-web\.net
                | samanko\.com
                | saxen\.net
                | sbn\.bz
                | sigom\.com
                | sitecity\.ru
                | sitebooth\.com
                | spaceall\.de
                | spaceports\.com
                | sretenie\.ru
                | subs\.ru
                | takeinet\.ru
                | medagent\.ru
                | traktir\.(?:ru|org)
                | tut\.by
                | ucoz\.ru
                | ueuo\.com
                | vhoste\.ru
                | vi[op]\.ru
                | vip\.su
                | vip(?:centr|pochta|shop|top)\.ru
                | virtualave\.net
                | wagoo\.com
                | wagoo[12]\.com
                | webeve\.com
                | webforfree\.ru
                | webprovider\.com
                | webrise\.ru
                | webservis\.ru
                | wikispaces\.com
                | ws\.co\.ua
                | x5x\.ru
                | xay\.ru
                | xost\.ru
                | xxh\.ru
                | yadviga\.ru
                | yard\.ru
                | netfirms\.com
                | saxen\.net
                | sigom\.com
                | zerver\.ru
                | zportal\.info

                #прочие домены, которые воспользовались услугами спамеров:
                | love-give\.com
                | klasspornd\.ru
                | fotopornd\.ru
                | mashki\.ru
                | celerod\d*\.ru
                | metrocartochka\.ru
                | votetopornod\.ru
                | ziza\.ru
                | ssisi\.ru
                | anuss\.ru
                | blondino4ka\.ru
                | coolpopa\.ru
                | ebbat\.ru
                | klitora\.ru
                | sexi1\d*\.ru
                | trah1\d*\.ru
                | superblonde\.ru
                | vibrosex\.ru
                | vendingpmr\.ru
                | freedrugs\.webng\.com
                | x-strana\.ru
                | znamenitut\.ru
                | bargainchick\.com
                | erotictrustf\.ru
                | hotxugmo\.ru
                | ubrlfcxzazou\.ru
                | vixrdbwx\.ru
                | pyporno\.com
                | eblyautrom\.ru
                | aromatizator\.ru
                | hellepron\.ru
                | porevojore\.ru
                | csexprovids\.ru
                | ofigetraxnul\.ru
                | armaq\.ru
                | sexy?zombi\.ru
                | polonrotd\.ru
                | snovadporn\.ru
                | gbp-usd\.ru
                | superintop\.info
                | drochitut\.msk\.ru
                | justfree\.com
                | isnovaya\.ru
                | opaturki.ru
                | io\.ua
                | creep\.ru
                | viddler\.com
                | 228duble\.com
                | videocodezone\.com
                | hotysex\.ru
                | goldencards\.ru
                | ynastrafi\.ru
                | newdgal\.ru
                | nojdimpor\.ru
                | scribd\.com
                | vigrapills\.info
                | warec\.ws
                | e-states\.ru
                | pifinans\.ru
                | djina\.ru
                | ufsawo76\.ru
                | allthemes\.ru
                | dvdbum\.ru
                | greenmapworld\.info
                | adyma\.ru
                | hot-books\.ru
                | obnetdengah\.ru
                | hostinfa\.ru
                | uznovosti\.ru
                | onguvi\.ru
                | sellmyweb\.ru
                | medicininfo\.ru
                | brightworks\.ru
                | bugeokact\.ru
                | cnupthoe\.ru
                | cydba\.ru
                | polet-kosmos\.net
                | correctdiet\.ru
                | kseon\.org
                | forgsms\.info
                | workidea\.ru
                | kluchniza\.ru
                | avant4wd\.ru
                | vistaaero\.ru
                | votpodnw\.ru
                | geynewdi\.ru
                | gostrf\.ru
                | forsmi\.ru
                | kevser\.ru
                | viptelefon\.su
                | jtlogistic\.ru
                | callvipgirls\.com
                | cekcanem\.ru
                | wmmail\.ru
                | dnt\.ru
                | inedvig\.ru
                | masax\.ru
                | superrike\.ru
                | samolety-poezda\.ru
                | stroyshik\.ru
                | sweet-souvenirs\.ru
                | snovumia\.ru
                | d-e-v-u-s-h-k-a\.ru
                | m-a-l-c-h-i-k-i\.ru
                | sexyfly\.cn
                | men-erectile\.info
                | vigra-rx\.info
                | altonika-td\.ru
                | krim-dom\.ru
                | legion-td\.ru
                | flat1\.ru
                | nowtec\.ru
                | opattakdel\d+\.ru
                | detoms\.ru
                | rusbyte\.com
                | bybyw\.com

                # IP адреса
                | 222\.73\.37\.253
              )
              (?![-a-z\d.])  #проверяем, чтобы домен небыл частью другого домена!
             ~six',
        ),
    );

    #шаг 1.
    foreach ($re_urls as $a) if (strpos($s, $a[0]) !== false && preg_match($a[1], $s, $m))
    {
        $found = $m[0];
        return true;
    }

    #шаг 2.
    #ловим обман типа "viaggra" -- убираем повторяющиеся символы
    $s = preg_replace('/([\x00-\x7f])\\1+/s', '$1', $s);
    #ловим обман типа "s-i-s-k-i" -- убираем добавочные символы между буквами, но аккуратно обрабатываем слова типа "my-ski".
    $s = preg_replace('/[-_]([a-zA-Z\d])(?=[\x00-\x2f\x3a-\x40\x5b-\x60\x7b\x7f])/s', '$1', $s);

    unset($re_urls[2]);  #удаляем список запрещённых доменов
    foreach ($re_urls as $a) if (strpos($s, $a[0]) !== false && preg_match($a[1], $s, $m))
    {
        $found = $m[0];
        return true;
    }

    return false;
}

?>
Теги:
СПАМ, фильтр
Добавлено: 15 Сентября 2013 06:46:49 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...