Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]usuwanie konta poprzez GET
Krismen
post 16.03.2012, 10:30:24
Post #1





Grupa: Zarejestrowani
Postów: 86
Pomógł: 0
Dołączył: 5.02.2009

Ostrzeżenie: (0%)
-----


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 ?

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
by_ikar
post 16.03.2012, 10:32:57
Post #2





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
pedro84
post 16.03.2012, 10:37:36
Post #3





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

Ostrzeżenie: (0%)
-----


Absolutnie nie, mod_rewrite nie zabezpieczy Cię przed niczym.

Przed usunięciem czegokolwiek przecież jakieś uprawnienia sprawdzasz, prawda?


--------------------
Google knows the answer...
Go to the top of the page
+Quote Post
Krismen
post 16.03.2012, 10:40:33
Post #4





Grupa: Zarejestrowani
Postów: 86
Pomógł: 0
Dołączył: 5.02.2009

Ostrzeżenie: (0%)
-----


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ć ?
Go to the top of the page
+Quote Post
Rysh
post 16.03.2012, 11:19:00
Post #5





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

Ostrzeżenie: (0%)
-----


  1. if($_GET['usun_konto'] == $_SESSION['id_zalogowanego']) {
  2. // kod usuwania.
  3. }


--------------------
Go to the top of the page
+Quote Post
by_ikar
post 16.03.2012, 11:25:17
Post #6





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
grrizli
post 16.03.2012, 11:56:57
Post #7





Grupa: Zarejestrowani
Postów: 29
Pomógł: 6
Dołączył: 29.08.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
by_ikar
post 16.03.2012, 13:52:00
Post #8





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


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..
Go to the top of the page
+Quote Post
Rysh
post 16.03.2012, 14:03:11
Post #9





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

Ostrzeżenie: (0%)
-----


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>


Ten post edytował Rysh 16.03.2012, 17:44:13


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.07.2025 - 10:02