MalyKazio
5.04.2008, 17:16:55
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
5.04.2008, 17:22:58
moim zdaniem lepiej przed zapytaniem aby nie psuło go.
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
5.04.2008, 17:49:55
psuło czyli nie rozpier&@** ZAPYTANIA DO np. MYSQL i bazy oto biega chłopie
lol
marcio
5.04.2008, 18:15:17
@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

) a nie zdaje mi sie zeby mialo to cos wspolnego z zapytaniem
P.S jak co moze sluzyc do odczytywania danych z bazy
MalyKazio
5.04.2008, 21:05:11
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 " na &quot;
netmare
5.04.2008, 21:09:40
no bo dublujesz htmlentities()
za pierwszym razem już wystarczy i zmienia np > w >
i to wystarczy, za drugim razem zmienia to w & amp;gt;(bez spacji) i w rezultacie widzisz w oknie >,
a podumuwując wypowiedzi kolegów użyj najszybciej jak się da i napewno przed zapytaniem do bazy
Edit: poprawiłem nazwę funkcji
Edit2: na tym forum też mam drobny problem z htmlentities
Kicok
5.04.2008, 21:19:37
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
5.04.2008, 21:20:17
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
5.04.2008, 21:36:46
kolega kicok to stray rutyniarz

, 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
5.04.2008, 22:04:01
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
6.04.2008, 09:18:45
Chodziło mi o to, że jeśli za pomocą htmlentities zamienię " < > na " < > 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.