Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] htmlentities - w którym momencie użyć
Forum PHP.pl > Forum > Przedszkole
MalyKazio
Witam,

Mam może banalne pytanie. Wiem do czego służy ta funkcja, jednak mam wątpliwości w którym miejscu użyć htmlentities? Czy przy wyświetlaniu danych wpisanych przez użytkownika, czy też przed dodaniem ich do bazy danych? Mam włączone magic quotes. Ktoś wpisuje w formularzu tekst, który jest dodawany do bazy. Czy przepuścić go przez htmlentites przed dodaniem do bazy, czy też dopiero po wyciągnięciu z bazy, przed późniejszym wyświetleniem na stronie?
help_mee
moim zdaniem lepiej przed zapytaniem aby nie psuło go.
pyro
Cytat(help_mee @ 5.04.2008, 18:22:58 ) *
moim zdaniem lepiej przed zapytaniem aby nie psuło go.


psuło? haha

htmlentites sluzy glownie do ochrony przed XSS (i podonych do niego atakow), a najlepiej dawac najszybciej jak mozna, najlepiej od razu po daniu przez uzytkownika czyli np.:

$cos = htmlentities($_GET['cos']);
help_mee
psuło czyli nie rozpier&@** ZAPYTANIA DO np. MYSQL i bazy oto biega chłopie
lol
marcio
@help_me lol to chyba ty htmlentites to mniej wiecej to samo co htmlspecialchars() i sluzy przed Xss/html injection(mowie ze to to samo biggrin.gif) a nie zdaje mi sie zeby mialo to cos wspolnego z zapytaniem

P.S jak co moze sluzyc do odczytywania danych z bazy
MalyKazio
Od bezpieczeństwa zapytań jest z tego co wiem m.in magic quotes i addslashes, htmlentities ma mniej więcej zapobiec psuciu wyświelanego kodu html na stronie, czyli np. zamykaniu cudzysłowów w <img src="obraz.jpg" title="Opis podany "zdzicha" uzytkownika zawierający cudzysłów">. Stąd moje pytanie w którym momencie to stosować. Druga kwestia: Jak rozwiązać problem, gdy umożliwia się użytkownikom edycję wprowadzonego tekstu, np. opisu zdjęcia? Kiedy przetrawię tekst za pomocą htmlentites przez dodaniem do bazy danych i potem przed wyświetleniem jako VALUE dla pola input (w formularzu do edycji) to wszystko szlag trafia i zamienia &quot; na &amp;quot;
netmare
no bo dublujesz htmlentities()
za pierwszym razem już wystarczy i zmienia np > w &gt;
i to wystarczy, za drugim razem zmienia to w & amp;gt;(bez spacji) i w rezultacie widzisz w oknie &gt;,
a podumuwując wypowiedzi kolegów użyj najszybciej jak się da i napewno przed zapytaniem do bazy

Edit: poprawiłem nazwę funkcji winksmiley.jpg
Edit2: na tym forum też mam drobny problem z htmlentities winksmiley.jpg
Kicok
Ja mam odmienne stanowisko: zabezpieczać dopiero wtedy, kiedy jest to wymagane. Czyli mysql_escape_string" title="Zobacz w manualu PHP" target="_manual tuż przed wstawieniem zmiennej do zapytania, a htmlspecialchars" title="Zobacz w manualu PHP" target="_manual/htmlentities" title="Zobacz w manualu PHP" target="_manual tuż przed wysłaniem danych do przeglądarki.

W obu przypadkach będziesz miał bezpieczny skrypt, więc stosuj tą metodę którą uważasz za wygodniejszą ;]
MalyKazio
Dzięki za wyjaśnienia. Tak mi się wydawało, że htmlentities przed zapytaniem robiłoby zbędnym addslashes. Z drugiej jednak strony np. w PhpBB jest htmlspecialchars stosowane przed dodaniem do bazy, ale z tego co słyszałem to forum nie jest najlepszym wzorem do naśladowania.
Czy jednak trzeba stosowac mysql_escape_string przy magic_quotes lub addslashes?
netmare
kolega kicok to stray rutyniarz winksmiley.jpg, i to co mówi ma sens, ale musisz pamiętać o tym że w każdym pliku php w którym będziesz to wyświetlał musisz użyć tej konwersji, a ja po prostu napewno bym gdzieś o tym zapomniał, co do magic quotes to warto moim zdaniem się nimi nie sugerować, bo kiedyś zmienisz hosting i się okaże że mają wyłączone magic quotes... a od magic quotes się odchodzi o ile mi wiadomo.

pomyśl o czymś jak if(!get_magic_quotes_runtime) addslashes(...)
marcio
Cytat
Dzięki za wyjaśnienia. Tak mi się wydawało, że htmlentities przed zapytaniem robiłoby zbędnym addslashes

Nie rozumiem cie ogolnie ani htmlspecialchars ani htmlentites nie dodaja slashy
MalyKazio
Chodziło mi o to, że jeśli za pomocą htmlentities zamienię " < > na &quot; &lt; &gt przed wysłaniem zapytania do bazy danych to zapytanie się wykrzaczy albo zostanie potraktowane jako zwykły tekst, a addslashes i tak nie doda przed takim czymś \, więc wychodzi na to że jest zbędne.
Mniej więcej już wiem o co chodzi. Użyję tego tak:
1. addslashes przed dodaniem do bazy
2. htmlentites po pobraniu z bazy i przed wyświetleniem
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.