2016-11-24 15 views
0

実稼働サーバーでは、エラー出力は必ずルーチンとしてオフになります。(PHP)ストリームラッパーエラーメッセージからパスワードを削除しますか?

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

これは私がftp://ストリームの周りに書いたクラスのコンテキストである:私も私のdevの画面上で、このようなエラーメッセージが表示されたときそれでも、私はびくびく感じています。もちろん、PHPは任意の場所からパスワードを取り除くことはできません。しかし、この場合(URLラッパーなどと同様に)、パスワードの存在は標準的かつ明白です。

私はすでにエラーをキャッチしています。しかし、私は自分自身でこれらのXをする必要があるかどうか疑問に思っていました。すべての文脈で安全な側にあるようにするには、か、PHPに自動的にそしてグローバルに行う方法があれば。(これはここの質問です)私は推測していませんが、ここでプローブを投げることに害はありません。

私の心配は、私の開発画面にしかありません。しかし、エラーレポートはサイト管理者などにも関連し、FTPパスワードを知る必要はありません。エラーログにFTPパスワードをぶつけておくことは問題ではありませんが、データベースなどに保存されたレポートには問題ありません。私は明らかにこのような情報をどこにでも伝えたくはありません。予防ポインタをお願いしますか?

誰かが、パスワードを吹き飛ばすことから関連情報を寄せているような気がしたら、どんなコンテキストでも機密情報を吹き飛ばすことは歓迎です。それ以外は「どこにも何も出力しない」。


編集:より良いオプションは、保留中、私のエラーと例外ハンドラのメッセージ部分は今、これを実行します:

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

SSH2ストリームを扱う場合は、ケース心配にssh2\.(shell|exec|sftp|scp)のために正規表現を追加。また、良い尺度のために、引数を示すスタックトレースを使用する場合は、それらもサニタイズします。


EDIT2:PHPのFTPストリームコンテキストラッパーの経験上、一般的なノートで

  1. 特に、失敗した要求があった場合に繰り返し実行され、スクリプトのタイムアウトが繰り返されます。
  2. ストリームコールバック(create_stream_context/$param['notification'])は、FTPサーバーからの完全な応答ではなく、ほとんどが空白/部分データを記録します。
  3. ストリームコンテキストを使用するファイルシステム関数は、適切な/一貫性のあるエラーを返すことも、戻さないことも、コールバックに何かを記録することもできます。
  4. 永続的な接続のオプションはないと思われます。stream_context_createリソースをリサイクルしても、同じスクリプト内のすべてのファイルシステムコールに対してPHPが再ログインします。

1回限りの基本的なトランザクションではFTPストリームのコンテキストは問題ありませんが、1回で何かをやろうとすると重大な問題はないと思います。 filesys関数のリグ。次...

答えて

1

stream contextにユーザ名とパスワードを設定できるようにするための議論があると思いますが、これはnot an optionです。

URIを使用しないAPI(FTPまたはCurl)を使用して、より冗長なコードを使用すると、これを防ぐことができます。

実稼働システムでのエラー報告を無効にすることが必須です。しかし、独自のエラーハンドラ(環境特有の機能を備えたdev/testとproduction)を有効にすることで、保護層が追加されます。

出力ストリームを改ざんしてエラーメッセージの内容を制御しようとするのは、非スターターではありません。しかし、確かにあなたのエラーハンドラ内の良いアイデア。正規表現でハードコーディングスキームを使用しているのはなぜですか?

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

FTP拡張機能を使用することは別の依存関係になりますが、Curl dothにはもっと多くのコードが必要です。また、ftpストリームのラッパーはパフォーマンスが向上すると期待していますが、私はCurlバージョンもベンチマークに書き込むつもりはありません。正規表現に関して、私はあなたが初心者のために実際に書いたものです(N.B.がssh2。*のために '[a-z2。]'を必要とします)。しかし、パスワード付きのストリームコンテキストは3つしかないので、つまり、 ftp、httpとssh2は、あまり一致しないようにします。他のストリームコンテキストのためにデータをサニタイズする必要はありませんか? –

+0

ええ、私はラッパークラスをFTPおよび/またはCurl afterallに移植しているようですが、ftp://ストリームラッパーは古くなったs ** t(上記のEdit2を参照)のように機能します。そして、私はこれが何か気の利いた滑らかなものだと思っていました。少なくともftp://ストリームに関する限り、フィーチャはまだかなり未成熟であるようです。 Curlのための終日のコードはそれほど多くありません。バルクを管理するための2つの方法があります。ちょうどFTPモジュールのためにまっすぐに行くかもしれません、少なくともそれは実際にはFTPでうまく動作するように専念しているようです。 –

+0

私はカールがより良い演技をするべきだと読んでいます。 FTPモジュールは、私が理解しているところから、ストリームコンテキストの上に構築されています。デフォルトでは有効になっていないようですので、Curlは次のエディション用です。 –

関連する問題