2011-01-24 13 views
1

すべてのリクエスト(SERVER_SIGNATUREなど)にわたって静的でないすべてのPHP $_SERVER variablesをデータベーステーブルに記録する予定です。私は2つの質問があります:データベースへのPHP SERVER変数のログ

1)HTTP_ACCEPTなどのフィールドの最大長はありますか?私は次の構造を使用しています。それは最適化されておらず、最良ではありません。いくつかの/全てのバリアブルについて最大の長さを見つけることができる場所へのリンクは便利です。

2)PHP_AUTH_USERとPHP_AUTH_PWを保存することをお勧めしますか?これによりセキュリティ上の問題が生じる可能性がありますか?一方、これらのフィールドは、トラフィックを分析する際に遠隔からでも役立つことがありますか?

注:

1)今のところ、私はちょうど私がそれでもリモートで将来的に自分のサイトへのトラフィックを分析することで私を助けることができ、すべてをログに記録します。

2)いくつかのことについては、実用的な制限があると思っています(サーバー上に100文字以上の長さのパス名を作成しないなど)。しかし、私は、特にクライアントの要求に依存する分野で、安全にプレーしたいです。所与のヘッダー(例えばApacheのhttpdの中で事実上使用)

`PHP_SELF` varchar(1024) NOT NULL, 
`SERVER_PROTOCOL` varchar(128) NOT NULL, 
`REQUEST_METHOD` varchar(128) NOT NULL, 
`REQUEST_TIME` timestamp NOT NULL, 
`QUERY_STRING` varchar(4096) NOT NULL, 
`DOCUMENT_ROOT` varchar(512) NOT NULL, 
`HTTP_ACCEPT` varchar(2048) NOT NULL, 
`HTTP_ACCEPT_CHARSET` varchar(2048) NOT NULL, 
`HTTP_ACCEPT_ENCODING` varchar(2048) NOT NULL, 
`HTTP_ACCEPT_LANGUAGE` varchar(2048) NOT NULL, 
`HTTP_CONNECTION` varchar(1024) NOT NULL, 
`HTTP_HOST` varchar(1024) NOT NULL, 
`HTTP_REFERER` varchar(4096) NOT NULL, 
`HTTP_USER_AGENT` varchar(4096) NOT NULL, 
`HTTPS` varchar(128) NOT NULL, 
`REMOTE_ADDR` varchar(64) NOT NULL, 
`REMOTE_PORT` varchar(128) NOT NULL, 
`SCRIPT_FILENAME` varchar(512) NOT NULL, 
`SERVER_PORT` varchar(128) NOT NULL, 
`SCRIPT_NAME` varchar(512) NOT NULL, 
`REQUEST_URI` varchar(4096) NOT NULL, 
`PHP_AUTH_DIGEST` varchar(512) NOT NULL, 
`PHP_AUTH_USER` varchar(512) NOT NULL, 
`PHP_AUTH_PW` varchar(512) NOT NULL, 
`AUTH_TYPE` varchar(512) NOT NULL, 
`PATH_INFO` varchar(4096) NOT NULL, 
`ORIG_PATH_INFO` varchar(4096) NOT NULL, 
+0

このログの目的は何ですか? –

+0

@Col。 Shrapnel:あなたの以前のアドバイスにもかかわらず、私はこのすべてのもので時間を無駄にしています:)。正直言って、私はまだ私は自分のもの(Googleアナリティクスなどではない)であり、ディスクI/Oをまったく使用しない(少なくとも要求を処理した時点では使用しません。要求が提供された後に優先度の低いプロセスとしてログが記録されるようになります)、時間が来たときに自分のアルゴリズムを使用して分析できるものがあります。 –

+0

だから、あなたはまだ分かりません。私はあなたの質問に答えることは不可能だと恐れている –

答えて

0

一般的に受け入れられた最大長8Kである:表の

関連部分は以下のように見えます。 (8192バイト)

このデータの保存に関するセキュリティ上の問題は、ユーザーが提供するデータの保存と同じです。パラメータバインディングを使用する(PDOのように)。文字列をエスケープするだけでカウントしないでください。

データベーススキーマには他にもパフォーマンスに関する考慮事項があります。 thisのために列を変更することを検討してください:

)すべてのテーブル(ストレージエンジンに関係なく)の最大行サイズは65,535バイトです[BLOBおよびTEXT列は[9-12 】バイト行サイズの制限に向かって列ごとにこれらのカラムの内容が行の残りの部分とは別個に格納されているため)

+0

また、スキルレスな性質(CouchDB/MongoDBと思う)のために、この種のデータを記録するためのドキュメント指向の "NoSQL"ソリューションも考えているかもしれませんが、それは私が思うこの質問の範囲外です。 :) –

+0

素敵な情報ありがとう。私は8Kは、合計のヘッダーの長さだと思いますか?それはおそらく個々のフィールドについての良い考えを与えるものではありません。ユーザー提供のデータに関しては、ユーザー資格情報のセキュリティ違反ですか?これらの暗号化されていないパスワードはありますか?最後に、あなたのリンクを読んだ後に、タイプをテキストに変更します。 –

0

2)PHP_AUTH_USER およびPHP_AUTH_PWを格納することが賢明か?これにより のセキュリティ問題が発生する可能性がありますか?一方、 これらのフィールドは遠隔地でさえも可能です トラフィックの分析に役立ちますか?

私はPHP_AUTH_PW?を保存しないことをお勧めしますが、個人的な好みのユーザーパスワードを分析することを除いて、それはあなたを助けません。しかし、あなたがこの種のデータを保存していることが分かった場合(あなたが(そうかもしれない)ことが許されていない場合)、あるいは別の人があなたのデータベースになんとかアクセスして、それらのユーザ/アカウントにアクセスする。

PHP_AUTH_USERと関連性があります。ユーザーのloginnameだけを格納してもセキュリティ上の問題は発生しません。

+0

ありがとうございます。これは非常にポイント2の疑問を解決します。あなたは私の意図を完全に理解しました - 私は多分私は個人的な好みをこのように分析することができると思っていましたが、それは危険だと思います。 –

関連する問題