2017-09-11 7 views
-1

私は、ユーザーが名前、電子メール、件名、メッセージを入力する必要がある標準的なHTML連絡フォームを用意しています。これらのフィールドは、すべてクライアント側とサーバー側の両方で既に検証されています(空であってはいけません。電子メールは適切な電子メールアドレスでなければなりません)。クライアントが長すぎないことを確認するためにチェックすることも必要です(クライアントの最大長とサーバー内のstrlen)。私がチェックしておらず、悪意のあるユーザーが数千または数百万の文字のような非常に長いテキストを入力するとどうなりますか?それはサーバーのパフォーマンスに影響を与えますか?それともチェックしないのは安全ですか?フォーム入力の長さをチェックする必要がありますか?

+0

[SQL-Injection](https://en.wikipedia.org/wiki/SQL_injection)のようなものがあります。しかし、最大長を超えているかどうかを確認することはおそらく最善の方法ではありません。たとえば、50文字に設定すると、誰かが何かを送ることができます。特定の文字をフィルタリングする必要がありますか? – Granny

+0

はい、私はSQLインジェクションを認識しています。ただし、フォームはメールを介して直接メッセージを送信し、SQLは関係しません。私はちょうどユーザーが文字列変数としてphpによって処理されるスーパーの長いテキストを入力した場合に起こることを知りたがっています。 – LoveTyger

+0

ああ、すみません、私はSQLを見て誓うことができます...私のせいです。 – Granny

答えて

0

SQLで最大サイズより長い文字列を渡すと、切り捨てられます。

(メッセージフィールドなどで)何千もの文字を送信することによるサーバーのパフォーマンスへの影響は最小限に抑えられます。サーバーは要求を受け取り、メモリに入れてmysqlに送信する必要があります。

投稿されたデータを処理し、データベースにクエリする際に推奨されるすべての方法を使用していることを考慮すると、ユーザーがギガバイトのデータを送信するとメモリが枯渇する可能性があります。しかし、それはあなたのPHPが要求ごとに比較的正確なメモリ制限を持っているので、それを送信するユーザにのみ影響します。

mySQLのテキスト列を制限しない場合、最終的に送信されたギガバイトのデータが格納されます。悪意のあるユーザーがこの種の要求にあふれてしまうと、完全なディスクになる可能性があります。または、通常の帯域幅/ストレージ費用よりも高い費用が発生します。

+0

ありがとうございますが、私のケースではSQLはありません。フォームはデータを処理してから電子メールを送信します。私はPHPのメモリの制限はまだ関与していると思いますか?だから、それが128MBで、ユーザーが128MBを超えるものを送ると、それは送信されません。 – LoveTyger

+0

投稿されたフォームデータを処理しようとすると、PHPで致命的なエラーが発生します。ユーザーは505のhttpステータスを受信し、プロセスはそこで終了するため、メールは送信されません。 mysqlに保存する代わりにメールを送信する場合、同じ制限が適用されます。サーバーはどこかでデータを送信する必要があるため、帯域幅の使用があります。また、自分のメールサーバーに送信している場合は、ディスクの使用量もあります。 – Salketer

+0

505 => 500申し訳ありません。 – Salketer

関連する問題