2016-11-24 2 views
0

На производственных серверах выход ошибки, безусловно, отключается как обычное дело. Тем не менее, я чувствую себя нервным, когда я вижу сообщения об ошибках, как это даже на моем экране Dev:Удалить пароли из сообщений об ошибках потока потока (PHP)?

stat(): stat failed for ftp://user:[email protected]:21/dir-de-nada 

Это в контексте класса я написал вокруг ftp:// потока. Конечно, PHP не может отфильтровывать пароли из любого произвольного местоположения. Но в этом случае (как и с обертками URL и где бы то ни было) наличие пароля является стандартным и очевидным.

Я уже догадываюсь об ошибках. Однако мне показалось, что мне нужно, чтобы я сам это сделал, просто чтобы быть в безопасности во всех контекстах, , или если у меня есть способ, чтобы PHP мог делать это автоматически и глобально. (Это вопрос здесь.) Я догадываюсь, но не вредно бросать в зонд здесь.

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

И если кто-то чувствует себя способным связать заметки о том, что PHP не позволяет разглашать пароли и т. Д. Конфиденциальную информацию в любом контексте, это также приветствуется. Кроме того, «ничего не выводить».


Edit: Лучших вариантов в ожидании, сообщение-часть моих ошибок и исключений обработчиков теперь работает следующим образом:

$msg = preg_replace('#((ftp|http)://)([^@]+?)@#', '$1*:*@', $msg); 

При работе с SSH2 потоками, добавить в регулярном выражении для ssh2\.(shell|exec|sftp|scp) в случае касается , И для хорошей меры, если вы используете трассировки стека, которые показывают аргументы, продезинфицируйте их тоже.


Edit2: На общей ноте на опыте потока FTP контекста обертку PHP.

  1. Выполняет паршивость, в частности, если есть какие-либо сбои в запросе, дающие повторяющиеся таймауты сценария.
  2. Обратный вызов потока (определенный в create_stream_context/$param['notification']) записывает в основном пробелы/частичные части вместо полных ответов с FTP-сервера.
  3. Функции файловой системы, использующие контексты потока, могут или не могут возвращать правильные/согласованные ошибки или записывать что-либо в обратный вызов. (Если кто-то хочет поломку сбоев, спросите прочь.)
  4. Кажется, нет возможности для постоянного соединения: PHP перестраивает вход для каждого вызова filesys в том же скрипте, даже если я перерабатываю ресурс stream_context_create.

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

ответ

1

No.

Я думаю, что есть аргумент в пользу настройки имени пользователя и пароля в stream context, но это not an option.

Вы можете предотвратить это из-за использования API, который не использует URI (FTP или Curl), но это означает более подробный код.

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

Попытка вмешательства в выходной поток для управления содержимым сообщений об ошибках является не стартером. Но это, безусловно, хорошая идея в вашем обработчике ошибок. Почему вы жестко кодируете схемы в своем регулярном выражении?

#(([a-zA-Z]+)://)([^@]+?)@# 
+0

Использование расширения FTP будет другой зависимостью, и, увы, Curl требуется намного больше кода. Также я ожидаю, что обтекатель потока ftp будет работать лучше, а не то, что я собираюсь написать версию Curl слишком просто для сравнения. Что касается регулярного выражения, я на самом деле написал его так же, как и для стартеров (для N.B. требуется '[a-z2.]' Для ssh2. * Stuff). Но поскольку существует только три встроенных контекста потока с паролями, т.е. ftp, http и ssh2, делает их менее подходящими. Нет необходимости дезинформировать данные для других контекстов потока? –

+0

Да, кажется, что я портирую свой класс-оболочку на FTP и/или Curl afterall, обертка потока ftp: // работает как stale s ** t (см. Edit2 выше). И здесь я думал, что это было что-то отличное и гладкое. Похоже, что функция все еще довольно незрелая, по крайней мере, в отношении потоков ftp: //. Не так много кода в конце дня для Curl, что с помощью нескольких методов для управления массовым. Может просто пойти прямо на FTP-модуль, по крайней мере, похоже, что он действительно предназначен для правильной работы с FTP-ах. –

+0

Я читаю, что Curl должен работать лучше. Модуль FTP, исходя из того, что я понимаю, построен поверх контекста потока. По-видимому, он не включен по умолчанию, поэтому Curl для следующего выпуска. –

Смежные вопросы