Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP+SQL]Usuwanie wiadomosci+bezpieczenstwo
Forum PHP.pl > Forum > Przedszkole
marcio
Witam zrobilem sobie usuwanie wiadomosci w ksiedze gosci(nawet robi rym biggrin.gif) lecz jest ono slabo zabezpieczone tzn,link do usuwania danej wiadomosci widza tylko osoby ktore maja takie same ip jak dany post i jak dodta wszystko dziala.
problem polega na tym ze znajac id posta mozna usunac co sie chce wpisujac go w url(usuwanie przesylam GET'em) tak to wyglada.
  1. <?php
  2. switch ($_GET['action']) {
  3.  
  4. case 'usun':
  5. if($db = mysql_connect($this->pasy['host'], $this->pasy['login'], $this->pasy['haslo'])) { 
  6.  mysql_select_db($this->pasy['baza']);
  7. $ask = ("delete from ksiega_gosci where id=".(int)$_GET['id']);
  8.  mysql_query($ask, $db);
  9.  
  10. break;
  11.  }
  12. }
  13. ?>

a tu pokazaywanie postow z linkiem do usuwania lub bez:
  1. <?php
  2. if($tab['ip'] == $_SERVER['REMOTE_ADDR']) {
  3.  
  4. echo('<table border="1" width="55%" bgcolor="#4E4E68" align="center"><tr><td width="50%">Dodal: '.stripslashes($tab['nick']).'</td><td width="50%">Dnia:'.$tab['data'].'</td></tr>
  5. <tr><td>'.stripslashes($tab['message']).'</td>
  6. <td><a href="?strona='.$strona.'&action=usun&id='.$tab['id'].'">usun</a></td>
  7. </tr>
  8. </table></form>');
  9. }
  10.  
  11. else {
  12. echo('<table border="1" width="55%" bgcolor="#4E4E68" align="center"><tr><td width="50%">Dodal: '.stripslashes($tab['nick']).'</td><td width="50%">Dnia:'.$tab['data'].'</td></tr>
  13. <tr><td>'.stripslashes($tab['message']).'</td></tr></table></form>');
  14.  }
  15. }
  16. ?>

i teraz nie wiem zabardzo jak to zabezpieczyc mysle nad cookie, lecz jeszcze nie wiem co i jak myslalem na takimi dwoma rozwiazaniami:
*Gdy user dodaje posta i dane sie zapisuja do bazy to te same dane zapisac w cookie(jesli jest taka mozliwosc) + do tego wersje przegladarki ze nawet jak ktos sobie zmieni zawartosc cookie zeby edytowac inne wiadomosci to nie bedzie wiedzial wersji przegladarki user'a.
*Zrobic funckje losujaca jakas cyfre np z przedzialu od 1 do 1000 i zahashowac to i dodac do karzdej odpowiedzi zapisac to tez w cookie i sprawdzac czy sie zgadzaja??

Ale nie wiem czy sie one sprawdza czekam na jakies propozycje
phpion
Najlepiej zrób tak, że dodaj nowe pole do tabeli w bazie. Nazwij je np. "kod" i generuj tam jakiś ciąg znaków (np. md5(time().uniqid()) następnie do linków służących do usuwania dodawaj ten kod:
  1. <?php
  2. ...
  3. <td><a href="?strona='.$strona.'&action=usun&id='.$tab['id'].'&kod='.$tab['kod'].'">usun</a></td>
  4. ...
  5. ?>

Następnie w kodzie usuwającym wpis daj:
  1. <?php
  2. $ask = ("delete from ksiega_gosci where id=".(int)$_GET['id']." AND kod=".$_GET['kod']);
  3. ?>

I po sprawie. Znając tylko id można sobie polatać. Aby usunąć posta należy znać jego id oraz kod.
marcio
Kurde nie pomyslalem o tym a to takie banalne mniej kombinowania niz z cookie jesli to zadziala to ci cos wysle pod choinke

Ok cos wykombinowalem ale ani wiadomosc sie nie usuwa ani nie widac kodu w url a kod w bazie sie dodaje.Tak to wyglada:
  1. <?php
  2. $this->hash = substr(md5(rand(1, 1000)), 0,6);
  3. ?>

switch tak:
  1. <?php
  2. switch ($_GET['action']) {
  3.  
  4. case 'usun':
  5. if($db = mysql_connect($this->pasy['host'], $this->pasy['login'], $this->pasy['haslo'])) { 
  6.  mysql_select_db($this->pasy['baza']);
  7. $ask = ("delete from ksiega_gosci where id=".(int)$_GET['id']." AND kod=".$_GET['kod']);
  8.  mysql_query($ask, $db);
  9.  
  10. break;
  11.  }
  12. }
  13. ?>

link tak(pokaze tez zapytanie i petle while):
  1. <?php
  2. $strona = $_GET['strona'];
  3. $id = (int)$_GET['id'];
  4.  $kod = $_GET['kod'];
  5. $zap = ("select * from ksiega_gosci order by id desc limit ".$strona*$liczba.",".$liczba);
  6.  $ris = mysql_query($zap, $db) or die(mysql_error());
  7.  
  8. while($tab = mysql_fetch_assoc($ris)) {
  9. if($tab['ip'] == $_SERVER['REMOTE_ADDR']) {
  10.  
  11. echo('<table border="1" width="55%" bgcolor="#4E4E68" align="center"><tr><td width="50%">Dodal: '.stripslashes($tab['nick']).'</td><td width="50%">Dnia:'.$tab['data'].'</td></tr>
  12. <tr><td>'.stripslashes($tab['message']).'</td>
  13. <td><a href="?strona='.$strona.'&action=usun&id='.$tab['id'].'&kod='.$_tab['kod'].'">usun</a></td>
  14. </tr>
  15. </table></form>');
  16. }
  17. ?>

kolumna gdzie znajduje sie kod nazywa sie kod
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.