Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

22 Stron V  « < 3 4 5 6 7 > »   
Reply to this topicStart new topic
> SQL Injection/Insertion, Jak zapobiec włamaniu na stronę.
the_foe
post 23.02.2006, 02:40:09
Post #81





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 26.08.2003

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


  1. <?php
  2. $win="\xA5\xC6\xCA\xA3\xD1\xD3\x8C\x8F\xAF\xB9\xE6\xEA\xB3\xF1\xF3\x9C\x9F\xBF";
  3. $iso="\xA1\xA6\xAC\xB1\xB6\xBC";
  4. $preg="/[^".$win.$iso."A-Za-z0-9_ -!@#\$%\^*\(\)\+=\{\}:;,.\\|\/\?]/s";
  5.  
  6. foreach ($_GET as $k=>$v){
  7. $_GET[$k]=preg_replace($preg,"\\1",$v);
  8. }
  9. foreach ($_POST as $k=>$v){
  10. $_POST[$k]=preg_replace($preg,"\\1",$v);
  11. }
  12. foreach ($_COOKIE as $k=>$v){
  13. $_COOKIE[$k]=preg_replace($preg,"\\1",$v);
  14. }
  15.  
  16. ?>


i po sprawie, nikt nie podskoczy
(mozna jeszcze trimowac, ale preg_replace nie przpusci chyba zero byte?)


--------------------
..::tHe FoE::..
Go to the top of the page
+Quote Post
kofaniutki_misio
post 26.02.2006, 19:46:34
Post #82





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 9.11.2005

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


Witam,

Czytałem posty na temat zabezpieczeń na stronie i zebrałem wszystko do kupy i wyszło mi coś takiego:

  1. <?
  2.  
  3. Function logs($msg) 
  4. { 
  5. global $HTTP_USER_AGENT, $_SERVER; 
  6. $url = sprintf("%s%s%s","http://",$_SERVER['HTTP_HOST'],$_SERVER['REQUEST_URI']); 
  7. $plik='http'; 
  8. if($_SERVER['HTTPS']=='on') 
  9.  { 
  10. $plik.='s'; 
  11. } 
  12. $plik.='://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']; 
  13. if($_SERVER['QUERY_STRING']>' ') 
  14. { 
  15. $plik.='?'.$_SERVER['QUERY_STRING']; 
  16. } 
  17. if ($_SERVER["HTTP_X_FORWARDED_FOR"]) 
  18. { 
  19. if ($_SERVER["HTTP_CLIENT_IP"]) 
  20. { 
  21. $mz_user['proxy']=$_SERVER["HTTP_CLIENT_IP"]; 
  22. }else 
  23. { 
  24. $mz_user['proxy']=$_SERVER["REMOTE_ADDR"]; 
  25. } 
  26. $mz_user['ip']=$_SERVER["HTTP_X_FORWARDED_FOR"]; 
  27. }else 
  28. { 
  29. if ($_SERVER["HTTP_CLIENT_IP"]) 
  30. { 
  31. $mz_user['ip']=$_SERVER["HTTP_CLIENT_IP"]; 
  32. }else 
  33. { 
  34. $mz_user['ip']=$_SERVER["REMOTE_ADDR"]; 
  35. } 
  36. } 
  37. $h=@fopen('logs/logs.txt','a'); // pamietaj aby ustawic chmod na 622 
  38. @fwrite($h,date('H:i:s d-m-Y').'  ip: '.$mz_user['ip'].' proxy: '.$mz_user['proxy'].' plik: '.$plik.' url: '.$url.' atak na zmienną: $'.$msg.' '); 
  39. @fclose($h); 
  40. return $msg; 
  41. } 
  42.  
  43. //zabezpieczenia zmiennych
  44.  
  45. $akcja = $_GET['akcja'];
  46. $id = (int)$_GET['id'];
  47.  
  48. preg_replace( '%<script>%', '', $akcja);
  49. preg_replace( '%UNION%', '', $akcja);
  50.  
  51. $akcja = mysql_escape_string($akcja); 
  52.  
  53. if(!ereg ("[a-z_]", $akcja)) {
  54.  logs('akcja');
  55.  die('Naruszenie zasad bezpiczeństwa! Twoj adres IP został pobrany.');}
  56.  
  57. if(!ereg ("[0-9]", $id)) {
  58.  logs('id');
  59.  die('Naruszenie zasad bezpiczeństwa! Twoj adres IP został pobrany.');}
  60.  
  61.  
  62. //koniec zabezpiczeń zmiennych
  63.  
  64. ?>


funkcja logs wyrzuca do pliku bardzo przydatne informacje o gościu który próbuje cos namieszać. W postaci np:

"18:21:38 26-02-2006
ip: 127.0.0.1
proxy:
plik: http://localhost/~www/zabezpieczenia.php
url: http://localhost/~www/zabezpieczenia.php
atak na zmienną: $akcja"


Co tu jest niepotrzebne? a co źle!!

Dodam ze metoda ma pobierac z linku dwie zmienne $akcja i $id dla późniejszego użycia zapytania SQL. $akcja ma zawierać tylko ciąg małych literek a $id tylko liczbe.

Pozdrawiam.
Go to the top of the page
+Quote Post
vedeney
post 28.02.2006, 14:33:07
Post #83





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 28.02.2006
Skąd: 127.0.0.1 :) => Ukraine

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


Sorry that not Polish,
but your functions are so funny smile.gif

e.g.
Why do you make global $_SERVER?questionmark.gif?
  1. <?php
  2. global $HTTP_USER_AGENT, $_SERVER;
  3. ?>

I can`t explane it.

  1. <?php
  2. preg_replace( '%UNION%', '', $akcja)
  3. ?>

AND
Kod
UNI/**/ON

OOPS tongue.gif

  1. <?php
  2.  
  3. foreach ($_GET as $k=>$v){
  4. $_GET[$k]=preg_replace($preg,"\\1",$v);
  5. }
  6. foreach ($_POST as $k=>$v){
  7. $_POST[$k]=preg_replace($preg,"\\1",$v);
  8. }
  9. foreach ($_COOKIE as $k=>$v){
  10. $_COOKIE[$k]=preg_replace($preg,"\\1",$v);
  11. }
  12. ?>

Have you ever here about $_REQUEST?questionmark.gif No?

Ten post edytował vedeney 28.02.2006, 14:34:10


--------------------
My blog: vedeney.org.ua
Go to the top of the page
+Quote Post
kofaniutki_misio
post 28.02.2006, 22:08:23
Post #84





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 9.11.2005

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


hej vedeney. funkcja logs, jest przepisana. Global mozna wyrzucic. Ale czemu nie rozumiesz zastosowania tego kodu:

  1. <?php
  2. preg_replace( '%UNION%', '', $akcja);
  3. ?>


chcialem żeby nie mozna bylo użyć polecenia UNION.

  1. <?php
  2. http://mojastron.php?id=10 UNION SELECT TOP 1 TABLE_NAME FROM
  3. INFORMATION_SCHEMA.TABLES--
  4. ?>


wyciągania wszystkich tabel.
Go to the top of the page
+Quote Post
dr_bonzo
post 28.02.2006, 23:28:36
Post #85





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


  1. <?php
  2. $age = $_GET[ 'age' ]; // pomiijam sprawdzanie czy to w ogole istnieje
  3. $name = $_GET['name' ];
  4.  
  5. $intAge = intval( $age )
  6. $strName = mysql_real_escape( $name ); // moglem pomylic nazwe funkcji
  7. $sql = "SELECT some_column FROM users WHERE age = " . $intAge . " AND name = '" . $strName . "'";
  8. ?>

i to tyle, zadne pregi, bo po co

gdy pod $age wstawisz "UNION .....blalba.... --"
$intAge == 0

gdy pod $name wstawisz "UNION .....blalba.... --"
sql wyglada tak
  1. SELECT some_column
  2. FROM users
  3. WHERE age = 0 AND name = 'UNION.... blalbba..--'


bylo to juz wspominane na poczatku (lub dalej tongue.gif) tego watka ale zginelo w masie postow probujacych to uzyskac.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
vedeney
post 1.03.2006, 08:53:31
Post #86





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 28.02.2006
Skąd: 127.0.0.1 :) => Ukraine

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


Ok! I`ve understand you, But your code didn`t prevent such hack as
Kod
http://mojastron.php?id=10 UN/**/ION SEL/**/ECT bla bla bla....

Which will be executed without any problems;
or
Kod
http://mojastron.php?id=BENCHMARK(1000000,MD5(NOW()))

or
Kod
http://mojastron.php?id=BENCHMARK(1000000,BENCHMARK(1000000,BENCHMARK(1000000,MD5(NOW()))))

It`s DOS through MySql-injection aaevil.gif


--------------------
My blog: vedeney.org.ua
Go to the top of the page
+Quote Post
the_foe
post 2.03.2006, 19:35:09
Post #87





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 26.08.2003

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


Cytat(vedeney @ 2006-02-28 14:33:07)
  1. <?php
  2. foreach ($_GET as $k=>$v){
  3. $_GET[$k]=preg_replace($preg,"\\1",$v);
  4. }
  5. foreach ($_POST as $k=>$v){
  6. $_POST[$k]=preg_replace($preg,"\\1",$v);
  7. }
  8. foreach ($_COOKIE as $k=>$v){
  9. $_COOKIE[$k]=preg_replace($preg,"\\1",$v);
  10. }
  11. ?>

Have you ever here about  $_REQUEST?questionmark.gif No?

Yes, I've heard about $_REQUEST. But it's another stupid thing like register_globals on is. Let the manual speak:

Cytat
$_REQUEST
    Variables provided to the script via the GET, POST, and COOKIE input mechanisms, and which therefore cannot be trusted. The presence and order of variable inclusion in this array is defined according to the php variables_order configuration directive. This array has no direct analogue in versions of php prior to 4.1.0. See also import_request_variables().


Ain't simple?
if you use _REQUEST, as foreach source, you won't be able to set cookie, set GET, set POST with the same string name! You will be forced to remember about it all time.

Additionaly, here's no problem with my code, you can use _REQUEST in spite of. If you realy like it.


--------------------
..::tHe FoE::..
Go to the top of the page
+Quote Post
LamaMASTER
post 5.04.2006, 17:53:33
Post #88





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

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


Cytat
zabezpieczenie w stylu:
  1. <?php
  2. $query = 'update `uzytkownicy` set `pole`="'.$dane.'" where `id`="'.$id.'";';
  3. ?>
to jak juz powiedziano zadne zabezpieczenie a pozatym zmnijsza wydajnosc zapytania, umieszczanie wartosci liczbowych w momiedzy " " powiduje iz MySQL mysli ze ma do czynienia ze znakami (stringami) i niepotzrebnie musi konwertowac typy.

Bzdura. Zapisz taki jest jak najbardziej szybszy, bo kod nie jest parsowany (bo jest w ' '), a zapisując zmienną w cudzysłowiach w kodzie ("coś tam $zmienna") powoduje parsowanie kodu i dłuższe sprawdzanie zmiennych. Nie wprowadzajcie ludzi w błąd.
Cytat
przyklad:
  1. <?php
  2.  
  3. $sql = mysql_query("SELECT * FROM news WHERE id=".$_GET['id']);
  4.  
  5. ?>


wywołanie normalne:
Kod
news.php?id=1
news.php?id=25
itd


wywołanie zmodyfikowane przez kogostam
np.
Kod
news.php?id=1;DROP%20TABLE%20news;

Ee tam, zonwu zonk, przecież mysql_query pozwala na wysłanie tylko jednego zapytania, więc to co pokazałeś nic nie da.

Więcej tematu czytać mi się nie chciało, ale mam nadzieję, że nie ma tam dalej więcej bzdur winksmiley.jpg
Go to the top of the page
+Quote Post
Pawel86
post 5.04.2006, 22:36:28
Post #89





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 5.04.2006

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


A takie rozwiazanie:
  1. <?php
  2.  
  3.  function ParseText(&$Text)
  4.    {
  5.       $Text=trim($Text);
  6.       if(get_magic_quotes_gpc())
  7.       {
  8.          $Text = stripslashes($Text);
  9.       }
  10.       $Text = htmlspecialchars($Text, ENT_QUOTES);
  11.       $Text = str_replace('\\0','\\\\0',$Text);
  12.       $Text = str_replace('\\t','\\\\t',$Text);
  13.       $Text = str_replace('\\n','\\\\n',$Text);
  14.       $Text = str_replace('\\r','\\\\r',$Text);
  15.       return $Text;
  16.    }
  17.  
  18.    function SecureSuperglobalsTables()
  19.    {
  20.       $this->SecureTable($_POST);
  21.       $this->SecureTable($_GET);
  22.       .....
  23.    }
  24.  
  25.    function SecureTable(&$Table)
  26.    {
  27.       if(!is_array($Table)) return false;
  28.       foreach($Table as $Id=>$Row)
  29.       {
  30.          if(is_array($Row))
  31.          {
  32.             $this->SecureTable($Table[$Id]);
  33.          }
  34.          else $this->ParseText($Table[$Id]);
  35.       }
  36.    }
  37.  
  38. ?>

XSS-y wykluczone, ' i " zamieniane na bezpieczne smile.gif da sie to obejsc?

Ten post edytował Pawel86 6.04.2006, 07:51:35
Go to the top of the page
+Quote Post
Janek111
post 16.04.2006, 17:47:42
Post #90





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 24.04.2005

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


Mam taki problem:
Jesli uzyje mysql_real_escape_string i jesli jest wlaczone magic quotes to otrzymam przykladowo ze stringu jakis'wyraz, string jakis///'wyraz. Moglbym zrobic tak:
  1. <?php
  2.  
  3.    $string = mysql_real_escape_string($string);
  4.  
  5. ?>

tylko, że wtedy, jeśli jest wlaczone magic_quotes to stosowanie tej funkcji jest bezsensu - gdy uzyje addslashes wyjdzie na to samo.
jak mozna rozwiazac ten problem?? Moze poprostu zostac przy addslashes ? smile.gif

Ten post edytował Janek111 17.04.2006, 10:54:39
Go to the top of the page
+Quote Post
Jarod
post 29.05.2006, 22:28:55
Post #91





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Cytat(ktuvok @ 14.05.2005, 19:58 ) *
Dorzucę się do tego wątku i powiem, że moim zdaniem najlepszym zabezpieczeniem jest:

1. ustawienie w php.ini opcji get_magic_quotes_gpc na ON

2. stosowana równolegle z powyższym funkcja czyszcząca otrzymane dane - od razu uprzedzam, że wbrew nazwie nie dotyczy ona tylko danych przesyłanych metodą POST:
  1. <?php
  2.  
  3. function OczyscPost($Zmienna, $Rozmiar)
  4. {
  5. {
  6. $Zmienna = stripslashes($Zmienna);
  7. }
  8. $Zmienna = trim(strip_tags(str_replace(""", "", $Zmienna)));
  9. $Zmienna = substr(str_replace("'","", $Zmienna),0,$Rozmiar);
  10. $Zmienna = sprintf("%s",$Zmienna);
  11. return $Zmienna;
  12. }
  13.  
  14. ?>


3. Funkcja zapewniająca dodatkowe filtrowanie dla identyfikatorów, przekazywanych w URL'u:
  1. <?php
  2.  
  3. function DoCyfry($Zmienna)
  4. {
  5. $Zmienna = intval($Zmienna);
  6. if(is_int($Zmienna))
  7. {
  8. return $Zmienna;
  9. }
  10. else
  11. {
  12. return 0;
  13. }
  14. }
  15.  
  16. ?>


Zastosowanie:
  1. <?php
  2.  
  3. $Nazwisko = OczyscPost($_POST['Nazwisko'], 40);
  4. $ID = DoCyfry(OczyscPost($_GET['ID'], 10));
  5.  
  6. ?>


Jakieś uwagi?

Pozdrawiam,
K



Hmm.. Do czego jest właściwie to UNION? Może ktoś poda przykład? Bo ja się nie zetknąłem z takim zapytaniem


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
em1X
post 29.05.2006, 22:36:35
Post #92





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


A szukac to nie potrafisz?

  1. SELECT * FROM text UNION
  2. SELECT * FROM news


czyli sklejanie dwoch zapytan do bazy


--------------------
eh, co polska wódka to polska wódka
Go to the top of the page
+Quote Post
Jarod
post 29.05.2006, 22:52:27
Post #93





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Próbując podsumować dyskusję, możnaby powiedzieć, że aby zabezpieczyć się przed SQL Injection trzeba filtrować każdą zmienną przychodzącą, czyli:

1. Jeśli spodziewamy się liczby to każdą zmienną traktujemy
  1. <?php
  2. intval($zmienna);
  3. ?>


2. Jeśli spodziewamy się ciągu to stosujemy
  1. <?php
  2. addslashes($zmienna);
  3. ?>


Czy to wystarczy?


A co w takim przypadku. Mamy spis użytkowników w systemie, który załóżmy że wygląda tak.



Przy każdym użytkowniku jest link z opcją usunięcia konta. Z tym linkiem, przesyłany jest numer ID danego klienta, żeby wiedzieć, którego klienta usunąć z bazy (ID jest kluczem głównym).

Teraz ktoś może zmodyfikować URL, np zamiast usunąć konto 2 (http://jakasstrona/usun.php&id=2) może wpisać dowolny inny numer, np (http://jakasstrona/usun.php&id=1) i skasuje konto admina.

Jak się przed tym zabezpieczyć?

Stosuję w każdym skrypcie funkcję weryfikującą, któa sprawdza czy użytkownik jest zalogowany i czy ma odpowiednie prawa. Ale wiem, że to nie wystarczy.

Ten post edytował J4r0d 30.05.2006, 07:24:43


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
Termit_
post 3.06.2006, 19:58:56
Post #94





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 11.06.2005
Skąd: Gostyń

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


Wówczas zawsze należy robić dodatkowe confirmy - formularze typu "Czy na pewno chcesz.... [ TAK ] [ NIE ]"


--------------------
@nospor: trzymajcie się. Wszystko będzie dobrze!
Go to the top of the page
+Quote Post
Jarod
post 4.06.2006, 17:53:17
Post #95





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Cytat(Termit_ @ 3.06.2006, 18:58 ) *
Wówczas zawsze należy robić dodatkowe confirmy - formularze typu "Czy na pewno chcesz.... [ TAK ] [ NIE ]"



Stosuję..


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
thornag
post 28.07.2006, 16:32:02
Post #96





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


Wedlug mnie mozesz jedynie sprawdzic czy Id nie jest elementem wyznaczonego przez Ciebie a niedozwolonego zbioru.

Zostaja jedynie confirmy, tutaj wszystko wydaje sie kwestia dostepu. Jesli dasz dostep do tego panelu, to po co meczyc sie ze zmiana URLa skoro wystarczy kliknac smile.gif No chyba ze kazdy uzytkownik ma inne prawa i innych uzytkownikow ktorych moze edytowac (taka relacja su/admin/sub-admin smile.gif wtedy wspommniany przezemnie zbior nalezalo by uzaleznic od uzytkowanika.


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
eai
post 2.08.2006, 00:19:08
Post #97





Grupa: Zarejestrowani
Postów: 367
Pomógł: 10
Dołączył: 20.05.2005

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


@J4r0d Bardzo prosto się można zabezpieczyć

Zastosuj sume kontrolną. jakasstrona/usun.php&id=2&checksum=f3sxSdf32vx3sGx

Napisz własny wzór generowania sumy kontrolnej oraz jej sprawdzania.
Np.

  1. <?php
  2.  
  3. function checksum ($id) {
  4.  
  5. return substr(md5('aXq23' . $id), 1, 3); 
  6.  
  7. }
  8.  
  9. if (checksum ($id) == $_GET['checksum']) {
  10.  // .... Usuwamy itp...
  11.  
  12.  }
  13. ?>


Ten post edytował eai 2.08.2006, 00:20:53
Go to the top of the page
+Quote Post
Turgon
post 2.08.2006, 08:37:09
Post #98





Grupa: Zarejestrowani
Postów: 800
Pomógł: 0
Dołączył: 26.11.2005
Skąd: Nowy Sącz

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


Zgadzam się z Eai. Ja stosuje sumy plus sesje oraz grupy uprawnień. Jeśli użytkownik nie ma odpowiedniego levela odrazu acces denied w głównym pliku administracyjnym. Nie pozwalam nawet dojść do uruchomienia reszty winksmiley.jpg .
Co do tego usuwania adminów to banał jest. Dodajemy do filtrowania requestów :
  1. <?php
  2. if($_GET['id'] == '1')
  3. {
  4. return false;
  5. }
  6. ?>


i gotowe smile.gif . Czyż nie trudne ?
Po za tym thornag używaj głównego pliku administracyjnego przez który jest jedyna możliwość użycia funkcji ACP etc. . To dodatkowe zabezpieczenie i trochę utrudnia życie, ale warto. Dodatkowa bariera dla włamywacza...


--------------------
Jah Music Is On My Mind !
Go to the top of the page
+Quote Post
Jarod
post 2.08.2006, 15:12:09
Post #99





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Cytat(eai @ 1.08.2006, 23:19 ) *
@J4r0d Bardzo prosto się można zabezpieczyć

Zastosuj sume kontrolną. jakasstrona/usun.php&id=2&checksum=f3sxSdf32vx3sGx

Napisz własny wzór generowania sumy kontrolnej oraz jej sprawdzania.
Np.

  1. <?php
  2.  
  3. function checksum ($id) {
  4.  
  5. return substr(md5('aXq23' . $id), 1, 3); 
  6.  
  7. }
  8.  
  9. if (checksum ($id) == $_GET['checksum']) {
  10.  // .... Usuwamy itp...
  11.  
  12.  }
  13. ?>


Generujesz - ok. A w jaki sposób chcesz przetrzymywać tą sume i gdzie?


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
eai
post 2.08.2006, 22:40:56
Post #100





Grupa: Zarejestrowani
Postów: 367
Pomógł: 10
Dołączył: 20.05.2005

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


@J4r0d Przecież to jest jeszcze prostsze smile.gif

Przykład:

checksum.php
  1. <?php
  2.  
  3. function checksum ($id) {
  4. return substr(md5('aXq23' . $id), 1, 3); 
  5. }
  6.  
  7. ?>


admin.php
  1. <?php
  2.  
  3. //...
  4.  
  5. include 'checksum.php';
  6.  
  7.  
  8. function foo () { //Jakas tam funkcja generujaca linki do panelu admina bla bla bla...
  9. $row = ...; //Tablica np. wynik z mysql
  10. echo 'strona.com?usun=' . $row['id'] . '&checksum=' . checksum($row['id'];
  11.  }
  12.  
  13.  
  14. function delete () {
  15. if(checksum ($_GET['id']) == $_GET['checksum']) {
  16.  
  17. // Usuwasz
  18.  
  19. }
  20. }
  21.  ?>


Prościej się wytłumaczyć nie da smile.gif
Go to the top of the page
+Quote Post

22 Stron V  « < 3 4 5 6 7 > » 
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.04.2024 - 20:25