Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP] Zabezpieczenie strony
Forum PHP.pl > Forum > Przedszkole
kamil1114
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
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
tog
$code = htmlspecialchars($code); i po htmlu

natomiast sa jeszcze inne sposoby na przeoranie Twojej strony
poszukaj na forum i w googlu
kamil1114
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
http://www.beldzio.com/obsluga-html
kamil1114
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
htmlspecialchars
htmlentities
albo
mysql_real_escape_string
kamil1114
A ta funkcja która ja napisałem nie wystarczy ? Zabezpieczyć dodatkowo stronę tymi funkcjami , które Ty podałeś ?
darko
dobrze by było winksmiley.jpg
kamil1114
Ok , dzięki za pomoc. Czyli mam rozumieć że te moje zabezpieczenie jest niewystarczające ?
bełdzio
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
Ja chcę wstawić do bazy komentarz. Może pokażę kawałek kodu PHP :

  1. echo "<b>Dodawanie komentarzy:</b></br>";
  2.  
  3. echo "<form method='post'>";
  4.  
  5. echo "Twój nick: </br>";
  6.  
  7. echo "<input type='text' name='nick'> </br>";
  8.  
  9. echo "Tresć komentarza: </br>";
  10.  
  11. echo "<textarea name='komentarz' cols='40' rows='15'></textarea> </br>";
  12.  
  13. echo "<input type='submit' value='Dopisz'>";
  14.  
  15. echo "</form>";
  16. echo "</center>";
  17.  
  18. $nick=strip_tags($_POST['nick']);
  19. $text=nl2br(strip_tags($_POST['komentarz']));
  20. $ip=$_SERVER['REMOTE_ADDR'];
  21.  
  22.  
  23.  
  24.  
  25. if(!empty($nick) && !empty($tresc)){
  26. $id_newsa=$_GET['id'];
  27. mysql_query("insert into komentarze (id,nick,tresc,ip,id_newsa) values (0,'$nick','$text','$ip','$id_newsa')");
  28.  


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
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 winksmiley.jpg
kamil1114
Czyli prawidłowo zabezpieczony skrypt powinien wyglądać tak:

  1. echo "<b>Dodawanie komentarzy:</b></br>";
  2.  
  3. echo "<form method='post'>";
  4.  
  5. echo "Twój nick: </br>";
  6.  
  7. echo "<input type='text' name='nick'> </br>";
  8.  
  9. echo "Tresć komentarza: </br>";
  10.  
  11. echo "<textarea name='komentarz' cols='40' rows='15'></textarea> </br>";
  12.  
  13. echo "<input type='submit' value='Dopisz'>";
  14.  
  15. echo "</form>";
  16. echo "</center>";
  17.  
  18. $nick=mysql_real_escape_string($_POST['nick']);
  19. $text=nl2br(mysql_real_escape_string($_POST['komentarz']));
  20. $ip=$_SERVER['REMOTE_ADDR'];
  21.  
  22.  
  23. if(!empty($nick) && !empty($tresc)){
  24. $id_newsa=$_GET['id'];
  25. mysql_query("insert into komentarze (id,nick,tresc,ip,id_newsa) values (0,'$nick','$text','$ip','$id_newsa')");


Tak jest dobrze ?
Blame
Jeszcze tylko zabezpiecz $id_newsa.
kamil1114
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
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
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.