• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

"Biblioteka", która będzie walidowała dane, które zostały podane przy logowaniu/rejestracji.

0 głosów
105 wizyt
pytanie zadane 26 czerwca 2016 w PHP, Symfony, Zend przez HaKIM Maniak (71,440 p.)

Zaznaczam, iż takowej nie poszukuję.

Hej,

Chciałbym stworzyć prostą biblioteczkę, która będzie walidowała dane z logowania/rejestracji, chroniła przed sql injection, xss injection, shell injection, i innych.

Chciałbym ją stworzyć tak, aby dało się ją podpiąć do jakiejkolwiek aplikacji.

Niestety, im dalej w las, tym gorzej.

Największy problem jest z stworzeniem klasy, która będzie walidowała dane.

Dajmy na to:

Mamy formularz rejestracji, a w nim:

  • Login
  • Email
  • Hasło
  • Powtórzenie hasła

 Dane wysyłam metodą POST, w kontrolerze sprawdzam czy zostały one wysłane, i opakowuję je w metodę, dajmy na to: valAll(); - Do niej możemy wsadzić kolejno: 

$foo->valAll($_POST['login'], $_POST['email'], $_POST['password'], $_POST['re_password'])

Lub cokolwiek.

Nastaje problem... Skąd dana  metoda będzie wiedziała co i jak walidować? Aby dla email sprawdzała czy jest poprawny, nie zawiera [ ] ' - ; i innych nieprawidłowych znaków, dla hasła czy ma przynajmniej 6 liter, dla loginu czy ma przynajmniej 3 litery, i nie ma w nim również znaków specjalnych?

Jesteśmy w ogóle stanie zrobić metodę valAll(); czy każde dane będziemy musieli walidować inną metodą? valEmail(), valPassword(), valLogin(), valSqlInjection(), lub inne.

Jak sprawić, aby biblioteka była dostępna dla każdej aplikacji, która chciałby walidować swoje dane, aby użytkownik nie musiał grzebać w kodzie źródłowym, a po prostu włożyć to, co ma być walidowane, do metody?

Zaznaczam iż całość jest dla nauki, a nie tworzenia biblioteki z prawdziewgo zdarzenia, które będzie chronić dane przed wszelkimi możliwymi atakmi.

Streszczając:

  • Jak stworzyć bibliotekę, którą będzie można dołączyc do jakiegokolwiek projektu, napisanego obiektywnie?
  • Czy możliwe jest stworzenie metody, dajmy na to: valAll();, która wiedziałby co z daną rzeczą zrobić, po włożeniu do niej danych takich jak: vallAll($_POST['login'], $_POST['email'], $_POST['haslo]); czy jest to niemożliwe, i należałoby do wszystkiego tworzyć osobną metodę?
  • Jak wyglądałaby przykładowa struktura katalogów?
  • Co będzie mi wymagane?

1 odpowiedź

+3 głosów
odpowiedź 26 czerwca 2016 przez Comandeer Mentor (364,880 p.)
wybrane 26 czerwca 2016 przez HaKIM
 
Najlepsza

Walidator powinien używać reguł do walidacji. Wówczas tablica $_POST byłaby walidowana zgodnie z tym, co sam ustaliłeś.

Jak mogłoby to wyglądać?

$validator = new Validator( new RuleSet( [
	'email' => [
		new Rule/Required,
		new Rule/EMail
	],

	'login' => [
		new Rule/Required,
		new Rule/Length( 3, 255 ),
		new Rule/AlphaNum
	]
] ) );

// Zawartość $_POST:
// [ 'email' => 'spam@spam.pl', 'login' => '!@' ]

$errors = $validator->validate( $_POST )->getErrors();

var_dump( $errors ); // [ 'login' => [ 'length', 'alphanum' ] ]

 

komentarz 26 czerwca 2016 przez HaKIM Maniak (71,440 p.)
edycja 26 czerwca 2016 przez HaKIM

No dobrze.

Ale...

Jak to działa?

    'email' => [
        new Rule/Required,
        new Rule/EMail
    ],
 
    'login' => [
        new Rule/Required,
        new Rule/Length( 3, 255 ),
        new Rule/AlphaNum
    ]

Nie jestem w stanie oganąć tego, co po takim new Rule/Required otrzymuje 'login'...

$validator, to główna klasa, która zawiera w sumie klasę, z ustawieniami, do której dodajemy tablicę, a w tablicy są indeksy, które zawierają inne klasy, z walidacją, ale w __contructor, gdyż bez podanej metody, albo to jest namepspace...

Nie rozumiem.

Pódję przetestować podobny kod, tę tablicę, ale daję 99.99% iż nie uda mi się dojść do tego, jak coś podobnego stworzyć.

komentarz 26 czerwca 2016 przez Comandeer Mentor (364,880 p.)

To są po prostu reguły walidacji. Wiadomo, że dane znajdujące się pod indeksem login muszą istnieć, mieć długość od 3 do 255 znaków i być alfanumeryczne.

komentarz 26 czerwca 2016 przez HaKIM Maniak (71,440 p.)

Tego się domyśliłem. :)

Problem jest z tym, jak to dokładnie działa?

'email' => [
    new Rule/Required,
    new Rule/EMail
],

Co by się stało, gdybyśmy użyli var_dump() na email?

Pierwszy raz spotykam się z takim wyglądem tablicy, nie jestem w stanie pojąć co tu się dzieje.

1
komentarz 26 czerwca 2016 przez Comandeer Mentor (364,880 p.)
To po prostu tablica obiektów – nic więcej.
komentarz 26 czerwca 2016 przez efik Maniak (71,070 p.)
Ładnie pokazane OOP Comandeer ;) Plusik.

Poczyta o OOP, interfejsach i zrobi taki vaildator.

Ważne, aby nie pchać wszystkiego do jednej klasy.
komentarz 26 czerwca 2016 przez HaKIM Maniak (71,440 p.)
Zrobić - zrobię. Później mam zamiar dać kod na forum, w celu oceny. :> Nie jestem pewien ile może to potrwać... Tymbardziej widzę to wtedy, kiedy Comandeer daje mi taki kod, a ja mam dosłownie  wielkiego brainfucka; gdy staram się go przeanalizować.
komentarz 26 czerwca 2016 przez HaKIM Maniak (71,440 p.)
Prosiłbym jeszcze o strukutre katalgów, która będzie dobra do tego typu projektu. Następnie będę mógł zamknąć temat.
komentarz 26 czerwca 2016 przez Comandeer Mentor (364,880 p.)
komentarz 26 czerwca 2016 przez HaKIM Maniak (71,440 p.)
Dziękuję.

Podobne pytania

+2 głosów
1 odpowiedź 121 wizyt
pytanie zadane 22 maja w PHP, Symfony, Zend przez ŁukaszD. Początkujący (340 p.)
0 głosów
1 odpowiedź 51 wizyt
pytanie zadane 14 października 2016 w PHP, Symfony, Zend przez ThePatrykOOO Mądrala (6,550 p.)
Obowiązuje już zaktualizowany regulamin.

Czy wiesz, że nie musisz już odświeżać strony głównej?

Lista pytań i odpowiedzi aktualizuje się automatycznie!

38,606 zapytań

76,489 odpowiedzi

149,376 komentarzy

18,071 pasjonatów

Przeglądających: 316
Pasjonatów: 31 Gości: 285

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...