2012-06-11 2 views
11

나는 내 데이터베이스 마이그레이션 파일에서 이러한 문자열/텍스트 필드가 있습니다레일 ActiveRecord 유효성 검사 : 문자열의 최대 길이?

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

을 그리고이 내 질문입니다 : 모든 문자열/텍스트 속성이 두 가지 목적을위한 최대 길이 유효성 검사를해야한다, 보안

  1. (몇 MB의 텍스트 입력을받지 않으려는 경우) 및 데이터베이스 (string = varchar 인 경우, mysql은 255 자로 제한됩니다). 그게 맞습니까? 아니면 데이터베이스의 모든 문자열/텍스트 속성에 대해 최대 길이 유효성 검사를하지 않는 이유가 있습니까?
  2. 저자와 제목의 길이가 너무 길어서 문자열로 저장하기에는 너무 길지 않으므로 그 각각에 대해 최대 길이를 255로 설정해야합니까?
  3. URL의 최대 길이가 약 2000자인 경우 링크를 텍스트가 아닌 문자열로 저장하는 것이 안전합니까? regexp를 사용하여 형식을 이미 검증하고 있다면 링크 속성의 최대 길이를 검증해야합니까?
  4. 무제한 길이의 입력으로부터 데이터베이스를 보호하기 위해 컨텐츠 (텍스트) 속성이 최대 길이를 가져야합니까? 예를 들어, 텍스트 필드의 최대 길이를 합리적으로 100,000 자로 설정하는 것입니까, 아니면 완전히 무의미하고 비효율적입니까?

나는이 질문들이 어떤 사람들에게는 중요하지 않겠지 만 모든 응용 프로그램에 요구되는 입력의 유효성 확인이라고 생각합니다. 여기서는 오히려 편집증적일 가치가 있다고 생각합니다.

답변

5

질문은 훌륭합니다. 레일/mysql 내부에 대해 더 많은 지식을 가진 사람들은 더 확장 할 수 있습니다.

1) 모델에서 유효성 검사를 수행하면 한계를 초과하는 경우 오류가 발생하기를 원하는 위치에 따라 다릅니다. 이 모델은 모델을 사용하는 대부분의 객체를 포괄 할 가능성이 높으므로 가장 좋은 옵션입니다. 다른 대안은 단순히 maxlength 속성을 사용하여 양식 필드를 제한하는 것입니다.

첫 번째 옵션은 선택 입력란에서 작동하지 않습니다.

2) 나는 어림짐작을 전혀 모르고있다. 가장 오래 걸리는 것을 사용하고 조금 더 크게 만드십시오.

3) 제 규칙은 255 이상은 텍스트입니다. 이것에 대한 자세한 정보를 찾을 수 있습니다 Here

4) 동일한 내용을 보유하고있는 열 - 값이있을 수 있습니다. 일부 유스 케이스는 콘텐츠 유형이나 사용자에 따라 최대 길이가 다를 수 있습니다.

위의 모든 내용은 프로젝트의 데이터 유효성 검사 요구 사항이 얼마나 엄격한 지에도 영향을받습니다.

관련 문제