11

データベース移行ファイルに次の文字列/テキストフィールドがあります。

  t.string :author
  t.string :title
  t.string :summary
  t.text :content
  t.string :link

そして、これらは私の質問です:

  1. すべての文字列/テキスト属性には、セキュリティ(数MBのテキスト入力を受け取りたくない場合)とデータベース(文字列= varcharの場合、mysqlには255文字の制限があります)の両方の目的で最大長の検証が必要です。それは正しいですか、それともデータベース内のすべての文字列/テキスト属性に対して最大長の検証を行わない理由がありますか?
  2. 著者とタイトルの正確な長さを気にしない場合、文字列として保存するには長すぎないので、それぞれの最大長を255に設定する必要がありますか?
  3. URLの可能な最大長が約2000文字の場合、リンクをテキストではなく文字列として保存しても安全ですか?正規表現を使用してその形式をすでに検証している場合、リンク属性の最大長を検証する必要がありますか?
  4. 無制限の長さの入力からデータベースを保護するためだけに、コンテンツ(テキスト)属性の最大長を設定する必要がありますか?たとえば、テキストフィールドの最大長を100,000文字に設定するのは妥当ですか、それともこれはまったく無意味で非効率的ですか?

これらの質問は一部の人にとっては重要ではないように思われるかもしれませんが、それでも–これは、あらゆるアプリケーションに必要な入力の検証です–そして、ここではかなり偏見を持たせる価値があると思います。

4

1 に答える 1

5

質問は素晴らしいです。おそらく、rails/mysql の内部についてより多くの知識を持っている人は、さらに拡張できるでしょう。

1)モデルに検証があるかどうかは、制限を超えた場合に失敗をどこで発生させたいかによって異なります。モデルを使用してほとんどのオブジェクトをカバーする可能性が高いため、モデルが最適なオプションです。他の代替手段は、単純に maxlength 属性を使用してフォーム フィールドを制限することです。

最初のオプションは、オプション フィールドでは機能しません。

2) 私は経験則を知りません。あなたが知っている最も長いものを使用して、少し大きくしてください。

3) 私のルールは、255 を超えるものはすべてテキストです。詳細については、こちらをご覧ください

4) 列が同じ内容を保持している場合 - そこに価値がある可能性があります。一部のユース ケースでは、コンテンツ タイプまたはユーザーに応じて maxlength が異なる場合があります。

上記のすべては、プロジェクトでのデータ検証要件の厳しさによっても影響を受けます。

于 2012-06-12T01:22:07.300 に答える