На производственных серверах выход ошибки, безусловно, отключается как обычное дело. Тем не менее, я чувствую себя нервным, когда я вижу сообщения об ошибках, как это даже на моем экране 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.
- Выполняет паршивость, в частности, если есть какие-либо сбои в запросе, дающие повторяющиеся таймауты сценария.
- Обратный вызов потока (определенный в
create_stream_context
/$param['notification']
) записывает в основном пробелы/частичные части вместо полных ответов с FTP-сервера. - Функции файловой системы, использующие контексты потока, могут или не могут возвращать правильные/согласованные ошибки или записывать что-либо в обратный вызов. (Если кто-то хочет поломку сбоев, спросите прочь.)
- Кажется, нет возможности для постоянного соединения: PHP перестраивает вход для каждого вызова filesys в том же скрипте, даже если я перерабатываю ресурс
stream_context_create
.
Предположим, что контексты потока FTP хороши для одноразовых базовых транзакций, но серьезный отказ от попыток сделать что-либо еще за один раз немного похож на незрелый alt. для функций filesys. Следующая ...
Использование расширения FTP будет другой зависимостью, и, увы, Curl требуется намного больше кода. Также я ожидаю, что обтекатель потока ftp будет работать лучше, а не то, что я собираюсь написать версию Curl слишком просто для сравнения. Что касается регулярного выражения, я на самом деле написал его так же, как и для стартеров (для N.B. требуется '[a-z2.]' Для ssh2. * Stuff). Но поскольку существует только три встроенных контекста потока с паролями, т.е. ftp, http и ssh2, делает их менее подходящими. Нет необходимости дезинформировать данные для других контекстов потока? –
Да, кажется, что я портирую свой класс-оболочку на FTP и/или Curl afterall, обертка потока ftp: // работает как stale s ** t (см. Edit2 выше). И здесь я думал, что это было что-то отличное и гладкое. Похоже, что функция все еще довольно незрелая, по крайней мере, в отношении потоков ftp: //. Не так много кода в конце дня для Curl, что с помощью нескольких методов для управления массовым. Может просто пойти прямо на FTP-модуль, по крайней мере, похоже, что он действительно предназначен для правильной работы с FTP-ах. –
Я читаю, что Curl должен работать лучше. Модуль FTP, исходя из того, что я понимаю, построен поверх контекста потока. По-видимому, он не включен по умолчанию, поэтому Curl для следующего выпуска. –