私は、ユーザーが名前、電子メール、件名、メッセージを入力する必要がある標準的なHTML連絡フォームを用意しています。これらのフィールドは、すべてクライアント側とサーバー側の両方で既に検証されています(空であってはいけません。電子メールは適切な電子メールアドレスでなければなりません)。クライアントが長すぎないことを確認するためにチェックすることも必要です(クライアントの最大長とサーバー内のstrlen)。私がチェックしておらず、悪意のあるユーザーが数千または数百万の文字のような非常に長いテキストを入力するとどうなりますか?それはサーバーのパフォーマンスに影響を与えますか?それともチェックしないのは安全ですか?フォーム入力の長さをチェックする必要がありますか?
答えて
SQLで最大サイズより長い文字列を渡すと、切り捨てられます。
(メッセージフィールドなどで)何千もの文字を送信することによるサーバーのパフォーマンスへの影響は最小限に抑えられます。サーバーは要求を受け取り、メモリに入れてmysqlに送信する必要があります。
投稿されたデータを処理し、データベースにクエリする際に推奨されるすべての方法を使用していることを考慮すると、ユーザーがギガバイトのデータを送信するとメモリが枯渇する可能性があります。しかし、それはあなたのPHPが要求ごとに比較的正確なメモリ制限を持っているので、それを送信するユーザにのみ影響します。
mySQLのテキスト列を制限しない場合、最終的に送信されたギガバイトのデータが格納されます。悪意のあるユーザーがこの種の要求にあふれてしまうと、完全なディスクになる可能性があります。または、通常の帯域幅/ストレージ費用よりも高い費用が発生します。
ありがとうございますが、私のケースではSQLはありません。フォームはデータを処理してから電子メールを送信します。私はPHPのメモリの制限はまだ関与していると思いますか?だから、それが128MBで、ユーザーが128MBを超えるものを送ると、それは送信されません。 – LoveTyger
投稿されたフォームデータを処理しようとすると、PHPで致命的なエラーが発生します。ユーザーは505のhttpステータスを受信し、プロセスはそこで終了するため、メールは送信されません。 mysqlに保存する代わりにメールを送信する場合、同じ制限が適用されます。サーバーはどこかでデータを送信する必要があるため、帯域幅の使用があります。また、自分のメールサーバーに送信している場合は、ディスクの使用量もあります。 – Salketer
505 => 500申し訳ありません。 – Salketer
- 1. 入力がイオンで空であるかどうかチェックする必要があります
- 2. 文字列を入力する/文字列の長さを確認する必要があります(C++)
- 3. 「テンソルフローのプレースホルダテンソル入力の値を入力する必要があります」
- 4. InvalidArgumentError:プレースホルダテンソルプレースホルダの値を入力する必要があります
- 5. 入力に値がある場合、特定のラジオボタンをチェックする必要があります
- 6. 同じページの1つのフォームから別のフォームにユーザー入力を渡す必要があります
- 7. ボタンは親ラジオボタンを入力する必要があります
- 8. jQuery addフィールドを入力する必要があります
- 9. オートコンプリートが機能するためには、入力はフォーム内にある必要がありますか?
- 10. 入力値に2を加える必要があります
- 11. C#でラジオボタンをチェックする必要がありますか?
- 12. CollectionChangedイベントでNotifyCollectionChangedActionをチェックする必要がありますか?
- 13. はNCFTPシェルスクリプトに入力する必要があります
- 14. 入力文字列をチェックするには、以下のsequeceに従う必要がありますか?
- 15. Angular2で入力する必要がありません
- 16. モック関数で入力変数(ポインタ)をチェックする必要がありますか?
- 17. HTTPエラー411、要求がチャンクされているかコンテンツの長さがある必要があります
- 18. フォーム入力があるかどうかをチェック
- 19. Access 2016フォーム列のフィールドサイズと入力検証を設定する必要がありますか?
- 20. 入力フォームからdbへのファイルパスを設定する必要があります
- 21. ユーザのテキスト入力 - モバイルプレフィックスは、入力された桁数を制限する必要があります。
- 22. 入力が必要ですがまだフォームが送信されています
- 23. 私はModelSerializerユーザー入力を使用する必要がありますか?
- 24. 変数から値を入力する必要があります
- 25. アプリケーションにインスタンスURLを入力する必要がありますか?
- 26. 入力検証とDBクエリを分離する必要がありますか?
- 27. Heroku。 ProcFileに何を入力する必要がありますか?
- 28. Gitは "入力"フォルダを追跡する必要がありますか? (typings.json)
- 29. 出力を一致させる必要があります
- 30. Selenium webdriverチェックボックスをチェックする必要があります
[SQL-Injection](https://en.wikipedia.org/wiki/SQL_injection)のようなものがあります。しかし、最大長を超えているかどうかを確認することはおそらく最善の方法ではありません。たとえば、50文字に設定すると、誰かが何かを送ることができます。特定の文字をフィルタリングする必要がありますか? – Granny
はい、私はSQLインジェクションを認識しています。ただし、フォームはメールを介して直接メッセージを送信し、SQLは関係しません。私はちょうどユーザーが文字列変数としてphpによって処理されるスーパーの長いテキストを入力した場合に起こることを知りたがっています。 – LoveTyger
ああ、すみません、私はSQLを見て誓うことができます...私のせいです。 – Granny