Перейти к содержимому


- - - - -

Ошибка в обработке php.php?


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 4

#1 SeoNizator

SeoNizator

    Участник

  • Пользователи
  • PipPip
  • 25 сообщений

Отправлено 10.11.2009, 14:58

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

Цитата

Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in W:\home\mysite.ru\www\zengine\classes\zfilter\php.php(45) : eval()'d code on line 121
Понятно, что нет коннекта с маил сервером.
Но мне кажется подобные ошибки могут привести к более серьёзным проблемам. (если  я правильно понял - это из-за того, что при варнингах теряется конец\начало php\html кода)

И, кстати, как обработать эту ошибку?

#2 support

support

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 1 140 сообщений

Отправлено 11.11.2009, 07:42

Просмотр сообщенияSeoNizator (10.11.2009, 14:58) писал:

Понятно, что нет коннекта с маил сервером.
Но мне кажется подобные ошибки могут привести к более серьёзным проблемам. (если  я правильно понял - это из-за того, что при варнингах теряется конец\начало php\html кода)
Фильтр zfilter_php выполняет содержимое текста страницы как PHP-скрипт. Если после этого фильтра использовать фильтр zfilter_text2html, то возможны проблемы с формированием HTML кода. В целом, все сообщения об ошибках обрабатываются согласно настройкам PHP (то есть, если их нужно выводить, они выводятся). Потенциальных проблем с возникновением в скрипте таких ошибок я не вижу.

Просмотр сообщенияSeoNizator (10.11.2009, 14:58) писал:

И, кстати, как обработать эту ошибку?
Либо выключить вывод ошибок (предпочтительно), либо добавить подавление ошибок при вызове функции mail (@mail).

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

#3 SeoNizator

SeoNizator

    Участник

  • Пользователи
  • PipPip
  • 25 сообщений

Отправлено 11.11.2009, 19:07

Просмотр сообщенияsupport (11.11.2009, 07:42) писал:

Либо выключить вывод ошибок (предпочтительно), либо добавить подавление ошибок при вызове функции mail (@mail).
Я имел ввиду именно обработать, а не подавить их вывод.

Цитата

Если после этого фильтра использовать фильтр zfilter_text2html
Да именно он наверняка и является причиной.

Цитата

Потенциальных проблем с возникновением в скрипте таких ошибок я не вижу.
Мммм.. Я имел ввиду само не наличие (показ) варнингов, и именно обработку вывода результата в браузер.
Т.е. когда получается смешивание фильтров (или чего там происходит) и при этом (я допускаю) возможно открытие доступа к сайту. Иначе говоря - взлом.

Цитата

Другой вариант это создать свой модуль для формы обратной связи. В качестве примера можно взять модуль карты сайта.
Это конечно может и вариант, но не мой ;) У меня есть заготовочки, которые я и юзаю (для форм оно проще так).
А вот модуль для обработки подобных ошибок - это может быть. Попробую поразбираться на досуге. ;)

#4 support

support

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 1 140 сообщений

Отправлено 11.11.2009, 19:32

Просмотр сообщенияSeoNizator (11.11.2009, 19:07) писал:

Мммм.. Я имел ввиду само не наличие (показ) варнингов, и именно обработку вывода результата в браузер.
Если результат вызова функции не зависит от аргументов (как в случае с mail) и при возникновении внутренней ошибки происходит вывод сообщения об ошибке, то в этом случае требуется обработать эту ситуацию и подавить генерацию ошибки:

<?php
if (!@mail(...)) {
	echo 'Не удалось отправить письмо. Либо выводим доп. координаты, либо пишем в файл.';
}
?>

Это нормальный подход, так как исключительная ситуация обрабатывается, а не игнорируется.

Просмотр сообщенияSeoNizator (11.11.2009, 19:07) писал:

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

Просмотр сообщенияSeoNizator (11.11.2009, 19:07) писал:

Это конечно может и вариант, но не мой ;) У меня есть заготовочки, которые я и юзаю (для форм оно проще так).
Ну, смотрите, так как использование модуля может быть проще - скопировал файл, создал страницу, прописал у нее пару свойств (что используется модуль и на какой ящик отправлять письма, если нужно) и все, страница с обратной связью готова :) Конечно, для этого нужен уже готовый модуль, но если он есть использовать его не так уж сложно.

Просмотр сообщенияSeoNizator (11.11.2009, 19:07) писал:

А вот модуль для обработки подобных ошибок - это может быть. Попробую поразбираться на досуге. ;)
Если получится что-нибудь придумать, пишите :)

#5 SeoNizator

SeoNizator

    Участник

  • Пользователи
  • PipPip
  • 25 сообщений

Отправлено 12.11.2009, 10:41

Просмотр сообщенияsupport (11.11.2009, 19:32) писал:

<?php
if (!@mail(...)) {
	echo 'Не удалось отправить письмо. Либо выводим доп. координаты, либо пишем в файл.';
}
?>
Это нормальный подход, так как исключительная ситуация обрабатывается, а не игнорируется.
Естественно так и сделано. За исключением подавления ошибки (не @mail(), а mail()) ;)

В остальном - я лишь хотел обратить Ваше внимание на потенциально небезопасное поведение движка. По моему мнению. Но я ж могу и ошибаться. Просто мой подход в вопросах безопасности - лучше перебдеть, чем недоспать ;)

В любом случае - спасибо за отличнейший двиг!




Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых пользователей