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

VPS Starter Arubacloud
0 głosów
208 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 (599,730 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 (599,730 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 (599,730 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 (599,730 p.)
komentarz 26 czerwca 2016 przez HaKIM Szeryf (87,590 p.)
Dziękuję.

Podobne pytania

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

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...