• 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.

Object Storage Arubacloud
0 głosów
213 wizyt
pytanie zadane 26 czerwca 2016 w PHP przez HaKIM Szeryf (87,590 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 Guru (600,710 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 Szeryf (87,590 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 Guru (600,710 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 Szeryf (87,590 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 Guru (600,710 p.)
To po prostu tablica obiektów – nic więcej.
komentarz 26 czerwca 2016 przez efiku Szeryf (75,160 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 Szeryf (87,590 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 Szeryf (87,590 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 Guru (600,710 p.)
komentarz 26 czerwca 2016 przez HaKIM Szeryf (87,590 p.)
Dziękuję.

Podobne pytania

0 głosów
1 odpowiedź 312 wizyt
pytanie zadane 25 września 2020 w PHP przez niezalogowany
+2 głosów
2 odpowiedzi 1,513 wizyt
pytanie zadane 9 grudnia 2017 w PHP przez patrus456 Początkujący (290 p.)

92,537 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,922 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...