Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Czyszczenie inputut od usera
Forum PHP.pl > Forum > Przedszkole
sadistic_son
Cześc, Próbuję popełnić klasę do czyszczenia inputów od userów.

klasa Request:
  1. namespace nameOne;
  2.  
  3. class Request
  4. {
  5.  
  6. public $post;
  7. public $get;
  8.  
  9. public function sanitizePostString($request)
  10. {
  11. $this->post = filter_input(INPUT_POST, $request, FILTER_SANITIZE_STRING);
  12. return $this->post;
  13. }
  14.  
  15. public function sanitizePostArray($request)
  16. {
  17. $this->post = filter_input_array(INPUT_POST, $request, FILTER_SANITIZE_STRING);
  18. return $this->post;
  19. }
  20. }



Kawałek próbujący wyświetlić wyczyszczony post:
  1. if (isset($_POST['submitTest']) && isset($_POST['testText'])) {
  2. $cleanTestText = new Request();
  3. echo '<br>' . $cleanTestText->sanitizePostString($_POST['testText']);
  4. }


Oczywiście nic się nie wyświtla. W klasie robiłem return 'dupa' i też się ona nie wyświetla. Post przechodzi, no bo echo $_POST['testText'] wyświetla wpisany tekst.


Boże co za wstydliwy post. Gdybym tego nie robił w OOP, którego się uczę, to bym w życiu nie pytał o takie pierdoły sad.gif



EDIT: Skoro po tylu wyświetleniach nikt nie odpisał to ja odpiszę (bo rozwiązałem problem) smile.gif
  1. if (isset($_POST['submitTest']) && isset($_POST['testText'])) {
  2. $cleanTestText = new Request();
  3. echo '<br>' . $cleanTestText->sanitizePostString('testText');
  4. }
viking
I jaki jest cel tego oczyszczania? Bo do wrzucenia do bazy przez bindowanie zbędne. Do jakiegoś oczyszczania z html - za słabe. Nie czepiam się tylko musisz sobie uświadomić że musi być jakiś cel tej metody. Jeśli to na rozmowę o pracę to pewnie ktoś zada to samo pytanie.
sadistic_son
Hmm, do html za słabe? Cel jest taki żeby wyczyścić ze wszystkiego co może popsuć cokolwiek na stronie lub w bazie. Do bazy używam bindowania, racja.

Jak rozumiem z manuala to FILTER_SANITIZE_STRING czyści htmlowe tagi oraz cudzysłowy. to nie wystarczy?
"Strip tags and HTML-encode double and single quotes, optionally strip or encode special characters."
viking
A doszedłeś do tej części manuala?
Deprecated as of PHP 8.1.0, use htmlspecialchars() instead

Nie stosuje się oczyszczania na zaś. Raz potrzebujesz datę, innym razem maila.
sadistic_son
Uzywam obecnie PHP Version 8.0.25, ale good point - trzeba zaprzestać używania tego, co wycofane.
  1. //czyli zamiast:
  2. $this->post = filter_input(INPUT_POST, $request, FILTER_SANITIZE_STRING);
  3.  
  4. //wystarczy to?
  5. $this->post = htmlspecialchars($request);
I tyle? POST bezpieczny i gotowy do bindowania przed wrzuceniem do bazy?
Tablicy tym nie wyczyszczę, co?
viking
Są znacznie bardziej zaawansowane ataki bazujące np na zestawie innych znaków. A jak będziesz potrzebował oryginał zmiennej? Uparłeś się nie wiedzieć czemu na to pseudo zabezpieczenie i trzymasz się tego.
sadistic_son
No nie, nie uparłem się. Ale nie mogę wziąć jakiegoś gotowego komponentu co ma 100 linijek, a sam takiego nie napiszę. Chcę to zabezpieczyć z grubsza - przed zwykłym userem co co najwyżej umie F12 wcisnąć w przeglądarce, a nie przed kimś z grupy anonymous wink.gif

EDIT:
Ale już widzę, że htmlspecialchars nie zabezpiecza np przed taką wartością wrzucona do inputu ---> <script>alert('siema');</script>
viking
To atak xss. I dlatego od dawna wybijamy ci tutaj używanie takich metod. Ja bym na Twoim miejscu zrobił to normalnie czyli chociaż zapoznał się jak działają zewnętrzne biblioteki do walidacji. Robiłem rekrutacje i gdybyś mi wyskoczył z takim kodem to długo byśmy nie porozmawiali. Nie musisz w 100% rozumieć bibliotek, ale musisz znać podstawy od psr zaczynając. I co najmniej rozumieć podstawy typowania. Jakieś zabezpieczanie przez bindowanie. A przede wszystkim, i to jest całkowita podstawa, musisz umieć czytać dokumentację php oraz bibliotek zewnętrznych. Jak ktoś powie ze masz użyć biblioteki x to nie musisz jej znać ale musisz rozumieć coś z opisu.
sadistic_son
Ok, brzmi rozsądnie. W takim razie oleję ten przykład z ksiązki który wałkowałem. Poleć mi więc proszę jakąś przystępną, niezbyt zaawansowaną bilbiotekę do czyszczenia inputów.
A bind z PDO to wystarczy zupełnie do zabezpieczenia się przed problemami z danymi z bazy?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.