На днях дополнял статью Защита сайта от спама обратной связи, где рассматривал общие аспекты безопасности контактных форм. В отдельную статью решил уже вынести материал про уязвимость старых версий Virtuemart. Наиболее подвержены атакам морально устаревшие сайты на связке Joomla 1.5 и Virtuemart 1.x

Уязвимость спам рассылок через рекомендательный компонент Virtuemart
Уязвимость спам рассылок через рекомендательный компонент Virtuemart

В уязвимом шаблоне нету проверок на прямое обращение к файлу, так и никакой капчи! При этом можно отсылать произвольные сообщения на любой электронный адрес! Чем не идеальный вариант для вирусных рассылок без заражения сайта?

Итак, как проверить, уязвим наш сайт или нет? Достаточно к адресу сайта добавить вызов "Рекомендовать товар другу":

/index.php?page=shop.recommend&product_id=1&pop=1&tmpl=component&option=com_virtuemart&Itemid=1&vmcchk

Как видим, появляется искомое поле для ввода данных для отправки сообщения любому адресату. В новых версиях уже внедрен системный плагин джумлы рекапчи, понадобится только ввести ключи для защиты от спама в админке. Однако это лишь доступно владельцам виртуемарт 2 и 3, рассмотрим методы защиты для 1-й версии Virtuemart.

Защищаем Virtuemart от спама

В принципе, существует 3 варианта решения проблемы:

1) Обновиться до последних версий магазина и джумлы. Однако безболезненной миграцию не назовешь, и далеко не каждый специалист справится с этой задачей. Кроме этого есть различия в ЧПУ ссылок, существует риск вылететь на некоторое время из поиска. Но при всём негативе это самый правильный выбор - поддерживать актуальность состояния установленных компонентов и пользоваться современными возможностями.

2) Можно рассмотреть возможность самостоятельного внедрения капчи в рекомендации. Однако стоит подумать о целесообразности такого варианта.

3) И просто убрать доступ и возможность отправлять рекомендательные письма. Для этого находим файл 

/administrator/components/com_virtuemart/html/shop.recommend.php

И видоизменяем начало файла следующим образом:

<?php
if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );
header('Location: /'); exit;

где вместо / желательно указать страницу 404 ошибки. Если Вы не знаете, где она находится или как это сделать, оставляйте как есть, будет просто переходить на главную страницу.

Таким образом даже старые сайты смогут безопасно существовать в дальнейшем!

Добавить комментарий