Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]usuwanie konta poprzez GET
Forum PHP.pl > Forum > Przedszkole
Krismen
Witam. Jeśli mam na stronie możliwość usunięcia konta (oczywiście po zalogowaniu) poprzez kliknięcie w button 'usun konto':
  1. www.nazwastrony/usun.php?id=95

Czyli poprzez zmienną GET. Jak wiadomo będzie to widoczne w pasku przeglądarki, więc jeśli ktoś zmieni 95 na np. 26 to usuwa mi z bazy usera o id 26. Zresztą ten sam problem mam podczas edycji konta czy systemu prywatnych wiadomości. Pytanie: czy mod_rewrite będzie dobrym i 100% zabezpieczeniem się przed takim problemem ? Czy są jakiś inne rowiązania ?

by_ikar
Nie, mod_rewrite, nie ma tutaj nic do rzeczy. Brak sprawdzania czy dany użytkownik, który chce zmienić swoje dane, jest danym użytkownikiem. A jest to bardzo proste do wykonania, zwłaszcza jeżeli jakieś dane użytkownika trzymasz w sesji.
pedro84
Absolutnie nie, mod_rewrite nie zabezpieczy Cię przed niczym.

Przed usunięciem czegokolwiek przecież jakieś uprawnienia sprawdzasz, prawda?
Krismen
Tak, dane każdego usera mam w sesji. Czy mógłbym prosić o jakieś wskazówki jak sprawdzić czy dany użytkownik, który chce zmienić swoje dane, jest danym użytkownikiem ? A co do mod_rewrite to myślałem, że poprostu ukryje zmienne GET w pasku i będzie po problemie... Czy mimo ich ukrycia można je jakoś zobaczyć ?
Rysh
  1. if($_GET['usun_konto'] == $_SESSION['id_zalogowanego']) {
  2. // kod usuwania.
  3. }
by_ikar
Cytat
A co do mod_rewrite to myślałem, że poprostu ukryje zmienne GET w pasku i będzie po problemie...

Takich danych nie ukryjesz, każde dane czy to post/get które są przesyłane do serwera sobie można podejrzeć. Pani krysia w księgowości tego nie podejrzy i nie zrozumie, ale pierwszy lepszy webdeveloper podejrzy, zrozumie, i skasuje ci wszystkie konta.
grrizli
Warto dodać, że można zrobić link w stylu
www.nazwastrony/usun_konto.php, który kasuje konto użytkownika w sposób
Kod
    usun_usera($_SESSION['id_zalogowanego']);
// gdzie usun_usera to jakas Twoja funkcja do tego

Warto dodać, że takie coś, jak również w mniejszym stopniu to co zrobiłeś jest podatne na atak CSRF. Przeslanie na gg (np. skroconego w celu ukrycia) linku do tej strony/podstrony umozliwia nieswiadome samoskasowanie sobie konta. W Twoim przypadku trzeba znać id użytkownika, ale można je też zdobyć, dlatego potrzebujesz zabezpieczenia np. w postaci tokena. Poczytaj na ten temat smile.gif
by_ikar
Tokena jak tokena, ogólnie wypadałoby żeby było jakiekolwiek potwierdzenie danej czynności. Żeby nie było tak że ktoś wchodzi pod dany link, i sobie kasuje co chce..
Rysh
Cytat(by_ikar @ 16.03.2012, 13:52:00 ) *
Tokena jak tokena, ogólnie wypadałoby żeby było jakiekolwiek potwierdzenie danej czynności. Żeby nie było tak że ktoś wchodzi pod dany link, i sobie kasuje co chce..

W czym problem wziąć kod ten co podałem i dodać jeszcze tam:
  1. if(isset($_POST['usun']) && $_POST['usun'] = 'tak') {
  2. //zapytanie usuwające użytkownika
  3. } else {
  4. echo 'Czy na pewno chcesz usunąć swoje konto? <br />';
  5. echo '<form method="POST"><input type="submit" value="TAK" name="usun" /></form>';
  6. }



Edit:
Z nudów napisałem i krótki skrypt do tego. Wystarczy zmodyfikować linijkę 17 i 18 oraz usunąć 3-5.
Dodatkowo trzeba podać swoje hasło aby usunąć konto.
Działanie: http://rysh.tk/forum/del_acc.php

  1. <?php
  2. if(!isset($_SESSION['id'])) {
  3. $_SESSION['id'] = rand(1,233);
  4. }
  5. ?>
  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  7. <html>
  8. <head>
  9. <title>Usuwanie swojego konta.</title>
  10. <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  11. </head>
  12. <body>
  13. <?php
  14. if($_GET['usun_konto'] == $_SESSION['id']) {
  15. if(isset($_POST['usun']) && $_POST['usun'] = 'tak') {
  16. // zapytanie: usuń użytkownika where id = $_SESSION['id'] and password = $_POST['haslo']
  17. if(true == true) { //sprawdza wynik zapytania.
  18. echo 'Twoje konto zostało usunięte.<br />';
  19. echo 'Zostałeś wylogowany. <br />';
  20. }
  21. } else {
  22. echo 'Twoje konto <b>NIE zostało usunięte</b>, upewnij się że wpisałeś prawidłowe hasło.<br />';
  23. }
  24. } else {
  25. echo 'Czy na pewno chcesz usunąć swoje konto? <br />';
  26. echo '<form method="POST">';
  27. echo 'Hasło: <br /><input type="password" name="haslo" /><br />';
  28. echo '<input type="submit" value="TAK" name="usun" /></form>';
  29. }
  30. } else {
  31. echo 'Kliknij <a href="?usun_konto='. $_SESSION['id'] .'">tutaj</a> jeśli chcesz usunąć swoje konto.<br />';
  32. }
  33. ?>
  34. </body>
  35. </html>
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.