2012-06-11 8 views
11

mam tych pól ciąg/tekstowe w mojej bazy danych pliku migracji:Sprawdzanie poprawności Railsów ActiveRecord: maksymalna długość napisu?

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

A oto moje pytania:

  1. Każdy atrybut ciąg/tekst powinien mieć maksymalną sprawdzanie długości dla obu celów, bezpieczeństwo (jeśli nie chcesz otrzymywać kilku MB wprowadzania tekstu) i bazy danych (jeśli string = varchar, mysql ma limit 255 znaków). Czy to prawda, czy jest jakiś powód, dla którego nie ma maksymalnej walidacji długości dla wszystkich atrybutów ciągów/tekstów w bazie danych?
  2. Jeśli nie zależy mi na dokładnej długości autora i tytułu, ponieważ nie są one zbyt długie, aby można je było zapisać jako ciągi, czy należy ustawić maksymalną długość na 255 dla każdego z nich?
  3. Jeśli maksymalna długość adresu URL wynosi około 2000 znaków, czy bezpieczne jest przechowywanie łączy jako ciągów, a nie jako tekstów? Czy powinienem walidować maksymalną długość atrybutu łącza, jeśli już sprawdzam poprawność jego formatu za pomocą wyrażeń regularnych?
  4. Czy atrybut zawartości (tekst) powinien mieć maksymalną długość, aby chronić bazę danych przed wprowadzeniem nieograniczonej długości? Na przykład, czy ustawienie maksymalnej długości pola tekstowego na 100 000 znaków jest uzasadnione, czy jest to całkowicie bezcelowe i nieefektywne?

Rozumiem, że te pytania mogą wydawać się nieistotne dla niektórych osób, ale nadal - to jest potwierdzenie wkładu, które jest wymagane dla każdej aplikacji, - i myślę, że warto tu być raczej paranoikiem.

Odpowiedz

5

Pytanie jest wspaniałe, a być może osoby posiadające większą wiedzę na temat rails/mysql internals będą w stanie rozszerzyć więcej.

1) Posiadanie jakiejkolwiek walidacji w modelu zależy od miejsca, w którym ma nastąpić niepowodzenie w przypadku przekroczenia limitu. Model jest najlepszą opcją, ponieważ najprawdopodobniej obejmie większość obiektów korzystających z modelu. Inną alternatywą jest po prostu ograniczenie pól formularza za pomocą atrybutu maxlength.

Pierwsza opcja nie działa dla pól opcjonalnych.

2) Nie znam żadnej zasady. Użyj tego, co wiesz, jest najdłuższe i spraw, by było trochę większe.

3) Moja zasada brzmi: wszystko powyżej 255 jest tekstem. Więcej informacji na ten temat można znaleźć pod następującym numerem: Here 4) Jeśli kolumna zawiera tę samą treść - może być w tym wartość. Niektóre przypadki użycia mogą mieć różną maksymalną długość w zależności od typu zawartości lub użytkownika.

Na wszystkie powyższe wpływa również sposób, w jaki surowe wymagania dotyczące walidacji danych są w projekcie.