20.11.2019

Prestashop, spam z kontaktního formuláře

Zasílá Vám Prestashop otravné emaily plné čínských znaků?

Také jsem je dostával a bohužel i můj klient, pro kterého jsem eshop vytvořil. Se spamem z Prestashopu jsem bojoval delší čas a žádné řešení se neukázalo jako trvalé. Po různých zásazích po čase začal chodit dál.

Prestashop je myslím příklad, jak přesně by opensource neměl vypadat. Nepřehledný, nezabezpečený, plný balastu, ale dost nářku.

Toto je návod, jak se zbavit spamu, který chodí z modulů Kontaktní formulář a Modul pro doporučení produktů známému. Ten druhý je nejlépe rovnou odinstalovat, nejspíše i v nových verzích obsahuje bezpečnostní díru. U toho prvního je zvláštní, že nepomůže ani obligátní recapcha a spam nějak chodí dál. Je to trochu nepochopitelný spam, protože zaplavuje „zaměstnecké“ emaily eshopu, jako je zákaznická podpora a nechápu, co z toho kdo může mít.

 

Řešení

Použil jsem tedy řešení, které jsem nalezl zde, ale stále to nebylo ono. Skript blokuje koncovky adres, ze kterých přichází většina spamu. U mě to byla hlavně @qq.com. Přidal jsem postupně i další a atak slábl. Pak ale přišlo pár regulérních adres z Hotmailu a Gmailu a to se blokovat nedá. Uvědomil jsem si, že všechny maily obsahují v těle zprávy čínské znaky, přidal jejich detekci a byl klid. Nyní tedy návod.

Vytvořte nový php soubor, pojmenujte jej ContactController.php, vložte do kód na konci stránky a nakopírujte do složky override/controllers/front . Nejdříve se přesvěčte, zda v daném umístění již tento soubor nemáte. Pokud ano, je potřeba vložit jen část kódu, nebo upravit funkci postProcess(). Nakonec smažte soubor cache/class_index.php , aby se změna projevila.

Poznámky:

  1. Přesto, že se detekce čínských znaků projevila jako efektivní, nechal jsem i část s vyhodnocováním adres.
  2. V části, kde se vyhodnocuje přítomnost byť i jediného čínského znaku jsem záměrně ponechal chybovou hlášku o neplatné adrese, nikoli obsahu. Není důvod spammerům cokoli usnadňovat

<?php class ContactController extends ContactControllerCore { public function postProcess() { if(Tools::isSubmit('submitMessage')) { $message = Tools::getValue('message'); $from = Tools::getValue('from'); $banned_in_email = ['.ru', 'qq.com', '.vn', 'sina.com', 'yeah.net', '163.com', '126.com', '139.com' ]; $banned_content = ['email marketing']; if(preg_match("/\p{Han}+/u", $message)){ $this->errors[] = Tools::displayError('This email address is not allowed');
}

foreach ($banned_in_email as $string) {
if(strstr(strtolower($from), $string))
$this->errors[] = Tools::displayError('This email address is not allowed');
}

foreach ($banned_content as $string) {
if(strstr($message, $string))
$this->errors[] = Tools::displayError('Invalid Content');
}
}
parent::postProcess();
}
}

Máte zavirovaný WordPress? Provedu odvirování WordPressu a zabezpečím Vaše webové stránky na vyšší úroveň.