kamil1114
22.12.2009, 13:51:45
Mam stronę , na której można dodawać komentarze. Każdy może taki komentarz dodać. Gdzieś przeczytałem , że strona jest źle zabezpieczona , jeżali poprzez formularz dodawania komentarzy można wykonać dowolne polecenie html'a lub php. Czy tak jest naprawdę ? Bo jak wpiszę w polu komentarza na przykład <img src="./obrazek.jpg"></img> , to obrazek w komentarzach się pojawia.
nospor
22.12.2009, 14:00:53
no tak, skoro mozna do strony zapodać dowolny kod i on się wykona, to strona jest dziurawa.
W przypiętych tematach w dziale php masz o bezpiczenstwie
$code = htmlspecialchars($code); i po htmlu
natomiast sa jeszcze inne sposoby na przeoranie Twojej strony
poszukaj na forum i w googlu
kamil1114
22.12.2009, 14:49:47
A co taki potencjalny włamywacz może zrobić ?
Ten htmlspecialchars to jest taki jakby filtrowanie wpisywanego tekstu , dobrze rozumiem ? Ja jeszcze kiedyś słyszałem o jakiejś metodzie add shlashes , czy jakoś tak.
bełdzio
22.12.2009, 19:19:57
kamil1114
23.12.2009, 14:03:51
Dziękuję za pomoc , a tak przy okazji , to fajna strona.
Mam jeszcze takie jedno pytanko:
Wystarczy użyć funkcji strip_tags i wszystko będzie ok , czy coś jeszcze trzeba zrobić w celu zabezpieczenia strony ?
darko
23.12.2009, 14:49:09
htmlspecialchars
htmlentities
albo
mysql_real_escape_string
kamil1114
23.12.2009, 14:50:26
A ta funkcja która ja napisałem nie wystarczy ? Zabezpieczyć dodatkowo stronę tymi funkcjami , które Ty podałeś ?
darko
23.12.2009, 14:51:59
dobrze by było
kamil1114
23.12.2009, 16:30:44
Ok , dzięki za pomoc. Czyli mam rozumieć że te moje zabezpieczenie jest niewystarczające ?
bełdzio
23.12.2009, 19:28:25
zależy co chcesz zrobić, jak wyświetlić txt bez tagów to strip_tags, jak chcesz zmienić tagi na encje to htmlspecialchars, htmlentities, jak zapisać w bazie to mysql_real_escape_string
kamil1114
23.12.2009, 20:17:54
Ja chcę wstawić do bazy komentarz. Może pokażę kawałek kodu PHP :
echo "<b>Dodawanie komentarzy:</b></br>";
echo "<form method='post'>";
echo "<input type='text' name='nick'> </br>";
echo "Tresć komentarza: </br>";
echo "<textarea name='komentarz' cols='40' rows='15'></textarea> </br>";
echo "<input type='submit' value='Dopisz'>";
$ip=$_SERVER['REMOTE_ADDR'];
$id_newsa=$_GET['id'];
mysql_query("insert into komentarze (id,nick,tresc,ip,id_newsa) values (0,'$nick','$text','$ip','$id_newsa')");
Czy takie zabezpieczenie jest dobre ? Myślałem czy nie lepiej użyć funkcji: mysql_real_escape_string ? Proszę o pomoc , bo chciałbym dobrze zabezpieczyć stronę.
Blame
23.12.2009, 20:49:54
Przy każdym wysyłaniu do bazy treści, którą może wpisać użytkownik powinno się ten ciąg przepuszczać przez mysql_real_escape_string. Aktualnie twoje zabezpieczenie jest żadne. Wpisz sobie w komentarzu ' i " a potem oglądaj błędy
kamil1114
23.12.2009, 21:49:16
Czyli prawidłowo zabezpieczony skrypt powinien wyglądać tak:
echo "<b>Dodawanie komentarzy:</b></br>";
echo "<form method='post'>";
echo "<input type='text' name='nick'> </br>";
echo "Tresć komentarza: </br>";
echo "<textarea name='komentarz' cols='40' rows='15'></textarea> </br>";
echo "<input type='submit' value='Dopisz'>";
$ip=$_SERVER['REMOTE_ADDR'];
$id_newsa=$_GET['id'];
mysql_query("insert into komentarze (id,nick,tresc,ip,id_newsa) values (0,'$nick','$text','$ip','$id_newsa')");
Tak jest dobrze ?
Blame
23.12.2009, 22:07:43
Jeszcze tylko zabezpiecz $id_newsa.
kamil1114
23.12.2009, 22:27:43
Dziękuję za pomoc.
Ale id_newsa nie jest podawane przez użytkownika , tylko strona automatycznie pobiera , więc po co ? Proszę o wyjaśnienie , bo tego nie rozumiem ?
Blame
23.12.2009, 23:21:05
Ponieważ jest pobierane przez $_GET, czyli widnieje w adresie, a co za tym idzie można to do woli modyfikować. Daj sobie np. twojadres?id=1' (z apostrofem) to zobaczysz o co mi chodzi.
kamil1114
23.12.2009, 23:47:01
Ok , już rozumiem o co chodzi.
Spróbowałem tak zrobić , jak mówiłeś tzn. wpisałem mojastrona?id=1' i wszystko było ok , poprawnie się zapisało do bazy i wyświetliło , ale nie ważne , wiem o co chodzi.
Jeszcze raz dziękuję za pomoc
Pozdrawiam i życzę Wesołych Świąt
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.