Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Funkcje do obsługi danych z formularza
Forum PHP.pl > Forum > PHP
Piotrbaz
Witam,

Szukałem sporo, nie tylko na forum i trochę się zamotałem z funkcjami do walidacji danych z formularza HTML. Proszę więc o pomoc, bo trochę zgłupiałem wink.gif

Do rzeczy:

Mam do czynienia z formularzem HTML, w którym użytkownik podaje tytuł, opis, treść i jakieś tam załączniki. Standard. Taki post czy news użytkownika, będzie później wyświetlany na stronie lub/i umieszczany w inputach przy okazji edycji. Wypadałoby więc, żeby zachować tagi HTML, które będą dozwolone (o ile nie jest to duży błąd)
Znalazłem gdzieś, że przyda się do tego funkcja strip_tags(). Później doszło htmlspecialchars() i na którejś z kolei funkcji straciłem wątek.

A więc mam małą prośbę do doświadczonych w tym zakresie wink.gif Mianowicie chodzi mi o małą listę funkcji PHP lub/i kolejność postępowania po odebraniu danych z formularza, tak aby bezpiecznie je zapisać do bazy, a potem odczytać na stronie w takiej formie, jaką użytkownik zostawił. Chodzi o totalne podstawy.

ps Do wrzucania danych do bazy używam PDO i zapytań prepare.
ps 2 Sprawdzanie długości stringów czy pól wymaganych załatwię HTML5 (required itp)
Damonsson
Jako 2gi parametr strip_tags możesz podać dozwolone tagi. Może zainteresuj się HTML Purifier - podobno dobra rzecz do czegoś takiego.

#PS2 Walidacja tylko i wyłącznie po stronie serwera, wszystko po stronie przeglądarki to tylko plus estetyczny dla użyszkodnika smile.gif
reptile_rex
@up Plusik za wspomnienie o HTML Purifier

Warto jednak pomyśleć o tym że używanie HTML Purifier nie będzie wpływać pozytywnie na wydajność serwisu.

Trzeba zdecydować co jest ważniejsze, wydajność czy bezpieczeństwo, u siebie we frameworku mam przełącznik w konfiguracji

Coś w rodzaju poziomu zabezpieczania przed XSS:
0 - podstawowe zabezpiecznienie htmlspecjalchars, etc
1 - HTML Purifier

W zależności od projektowanej aplikacji mogę ustawić odpowiedni dla niej poziom zabezpieczenia przed XSS
Piotrbaz
No spoko, ale na razie wolałbym to ogarnąć krok po kroku.

Mam $ciąg z formularza i teraz po kolei:


1. Sprawdzam czy pusty empty($ciag);
2. Sprawdzam warunek na długość strlen($ciag);
3. Usuwam puste przestrzenie trim($ciag);
4. Usuwam ew. tagi oprócz dozwolonych strip_tags($ciag, '<b><u><p><i><br>');
5. htmlspecialchars($ciag); ?

Ciąg przez bindValue w PDO do bazy


Następnie pobieram z bazy i:
1. htmlspecialchars_decode($ciag_z_bazy);


Co pominąłem, co niepotrzebne ? mysqli_real_escape_string() ?



p.s. sorry za pogrubianie funkcji, ale w tagach [php] wyglądało to strasznie
!*!
1. pierw sprawdź czy istnieje isset, a dopiero później czy jest pusty.
2. strlen może nie wystarczyć, zastosuj mb_strlen, a będziesz mieć poprawną długość.

Jak używasz PDO, to mysqli_real_escape_string Ci nie potrzebne.
Piotrbaz
Ok, czyli odwrotnie będzie. Funkcję htmlspecialchars($ciag) daję dopiero przy wyświetlaniu danych na stronie.

Problem w tym, że przy okazji edycji wpisu przez użytkownika, chce zainicjować inputa wartością (z bazy) zawierającą normalne tagi. Ciężko oczekiwać, żeby user pracował na encjach.
Co wtedy ? worriedsmiley.gif Czy jedyną funkcją przychodzącą z pomocą jest strip_tags()? (wywołaną zresztą przed zapisaniem danych do bazy)
!*!
Przeczytaj manual, jest funkcja która to dekoduje.
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-2025 Invision Power Services, Inc.