Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php+mysql] sonda do sprawdzenia
rooki
post
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 6.07.2007

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


Chciałbym prosić o sprawdzenie sondy, którą napisałem pod względem poprawności gdyż jeśli idzie o PHP to jestem początkujący. Moim zamiarem było, żeby przy zmianie opcji / dodaniu lub usunięciu opcji tylko minimalnie zmodyfikować kod - czyli u mnie przy zmianie opcji nalezy zmodyfikować tabelę w bazie danych, kod html odpowiedzialny za wyświetlenie formularza oraz kod PHP ten: "$tekst_odp[0]="tak"; $tekst_odp[1]="nie"; " - to wszystko.

  1. <?php
  2. //MAMY TABELĘ "GLOSOWANIE1" Z POLAMI: ID(KLUCZ PODSTAWOWY, AUTOINKREMENTACJA); TAK; NIE.
  3.  
  4. if(isset($_POST['button'])) //jeśli naciśnięto na "button"
  5. {
  6.  
  7. setcookie("sonda", "2", time()+20); //posyłamy ciastko ważne 20 sekund
  8.  
  9. $opcja=$_POST["opcja"]; 
  10.  
  11.  $uchwyt_polaczenia = mysql_connect("localhost", "xxxx", "xxxxxxx") or die ("Nie można połączyć się z MySQL");
  12.  mysql_select_db ("xxxxxx") or die ("Nie można połączyć się z bazą.");
  13.  $wynik=mysql_query("SELECT * FROM glosowanie1 WHERE id=1;");
  14.  
  15.  
  16. $rekord = mysql_fetch_assoc ($wynik);
  17. $liczba=$rekord["$opcja"];
  18.  
  19. $liczba++;
  20.  
  21.  
  22. mysql_query("UPDATE glosowanie1 SET $opcja=$liczba WHERE id=1;");
  23. mysql_close($uchwyt_polaczenia);
  24.  
  25.  
  26.  
  27. header("Location: sonda.php"); 
  28. exit; 
  29. }
  30.  
  31.  
  32.  
  33. elseif(isset($_POST['button2'])||$_COOKIE['sonda']=="2")
  34. {
  35. $tekst_odp[0]="tak";
  36. $tekst_odp[1]="nie";
  37.  
  38.  
  39.  
  40. $rozmiar=sizeof($tekst_odp); 
  41.  
  42.  
  43.  $uchwyt_polaczenia = mysql_connect("localhost", "xxxx", "xxxxx") or die ("Nie można połączyć się z MySQL");
  44.  mysql_select_db ("xxxxxxx") or die ("Nie można połączyć się z bazą.");
  45.  $wynik=mysql_query("SELECT * FROM glosowanie1 WHERE id=1;");
  46.  $rekord = mysql_fetch_assoc ($wynik);
  47.  
  48.  $suma_glosow=0;
  49.  
  50.  for ($odp=0;$odp<$rozmiar;$odp++)
  51.  {
  52.  $suma_glosow=$suma_glosow+$rekord["$tekst_odp[$odp]"];
  53.  }
  54.  
  55.  if($suma_glosow==0) //aby uniknąć dzielenia przez zero
  56.  {
  57. for ($odp=0;$odp<$rozmiar;$odp++)
  58. {
  59. $procent[$odp]=0; 
  60. }
  61.  }
  62.  
  63. else
  64. {
  65. for ($odp=0;$odp<$rozmiar;$odp++)
  66. {
  67. $procent[$odp]=round(($rekord["$tekst_odp[$odp]"]/$suma_glosow)*100); //"round"-zaokrąglenie
  68. }
  69. }
  70.  
  71.  
  72.  
  73.  
  74.  mysql_close($uchwyt_polaczenia);
  75.  
  76.  for ($odp=0;$odp<$rozmiar;$odp++)
  77. {
  78.  print "<IMG SRC='1.gif' WIDTH=$procent[$odp] HEIGHT=10/>";
  79. print " $tekst_odp[$odp] $procent[$odp] %<br/>";
  80.  }
  81. }
  82.  
  83.  
  84. ?>
  85.  
  86.  
  87.  
  88.  
  89.  
  90. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  91. <html xmlns="http://www.w3.org/1999/xhtml">
  92. <head>
  93. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  94. <title>Untitled Document</title>
  95. </head>
  96.  
  97. <body>
  98.  
  99. <?php
  100.  
  101. if($_COOKIE['sonda']!="2") //jeśli wartość ciastka jest różna od "2" (nie głosowano) to wyświetl formularz
  102. {
  103. ?>
  104. <form name="form1" method="post">
  105. <p>Czy lubisz koty?</p>
  106. <p>
  107. <input type="radio" name="opcja" value="tak" checked/>tak<br />
  108. <input type="radio" name="opcja" value="nie"/>nie<br />
  109. <input type="submit" name="button" value="Wyślij" />
  110. <input type="submit" name="button2" value="Wynik" />
  111. </p>
  112. </form>
  113.  
  114. <?php
  115. }
  116. ?>
  117.  
  118.  
  119.  
  120.  
  121.  
  122. </body>
  123. </html>



Powinienem coś w tym kodzie zmienić czy jest ok ? Bo cały wczorajszy dzień nad tym siedziałem, żeby przy dodaniu/usuwaniu/zmienianiu opcji tylko minimalnie wszystko modyfikować (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .

Tu można przetestować: http://misiekmisiek.lua.pl/sonda.php
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
qqrq
post
Post #2





Grupa: Zarejestrowani
Postów: 418
Pomógł: 8
Dołączył: 16.11.2006

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


Powinieneś ten post dać do "Oceny".
Go to the top of the page
+Quote Post
nospor
post
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




ten kod:
  1. <?php
  2. $wynik=mysql_query("SELECT * FROM glosowanie1 WHERE id=1;");
  3.  
  4.  
  5. $rekord = mysql_fetch_assoc ($wynik);
  6. $liczba=$rekord["$opcja"];
  7.  
  8. $liczba++;
  9.  
  10.  
  11. mysql_query("UPDATE glosowanie1 SET $opcja=$liczba WHERE id=1;");
  12. ?>

zastepuje sie tym:
  1. <?php
  2. mysql_query("UPDATE glosowanie1 SET $opcja=$opcja+1 WHERE id=1;");
  3. ?>


Ty to testowales? Bo ta twoja blokada z ciachem cos nie dziala.

pozatym przenosze


edit:
Twoj kod wogole nie jest zabezpieczony przed atakami Sql Injection
http://forum.php.pl/index.php?showtopic=23...t=0&start=0

edit: na dowod ze taki atak moge przeprowadzic, to dla opcji tak wpisalem 20000 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
rooki
post
Post #4





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 6.07.2007

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


Nospor wielkie dzięki, ustawiłem ważność ciastka na 20 sekund dlatego pewnie można oddawać głos po głosowaniu prawie natychmiast.

Ale kurcze jak żeś to zrobił, że mam w bazie w tabeli na tak ponad 20 000 głosów ? (IMG:http://forum.php.pl/style_emoticons/default/party.gif) (IMG:http://forum.php.pl/style_emoticons/default/blinksmiley.gif)
Ja myślałęm, że ataki SQL Injection to można przeprowadzić wtedy gdy jest pole w które coś trzeba coś wpisać, a u mnie przecież tylko się zaznacza opcję (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .
Czytam to z tego linku co podałeś, ale narazie jeszcze nie doszedłęm jak Ty to mogłeś zrobić (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Nospor wielkie dzięki, ustawiłem ważność ciastka na 20 sekund dlatego pewnie można oddawać głos po głosowaniu prawie natychmiast.
Slepy nie jestem i widze ze jest 20 sekund. Glosowalem szybciej niz 20 sekund. Ale pod inna przegladarka dzialalo zabezpieczenie. Dodam ze obydwie przegladarki obsluguja ciacha.

Cytat
Ja myślałęm, że ataki SQL Injection to można przeprowadzić wtedy gdy jest pole w które coś trzeba coś wpisać, a u mnie przecież tylko się zaznacza opcję
No nie dokonca. Ty wysylasz formularzem pole o nazwie "opcja" i wartosci tak lub nie. To, ze ja tam nie moge wstawic value z poziomu ogolnego, to nie znaczy ze ja nie moge grzebac w twoim htmlu (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Pozatym ządania do Twojej strony nie muszą isc z przeglądarki.

Cytat
Czytam to z tego linku co podałeś, ale narazie jeszcze nie doszedłęm jak Ty to mogłeś zrobić
Value zamiast "tak" dalem :
"tak=20000 /*"
Go to the top of the page
+Quote Post
rooki
post
Post #6





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 6.07.2007

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


Coś chyba jest nie tak z tym serwerem, bo u mnie na postawionym serwerze lokalnym zarówno w FF jak i IE7 nie można głosować po oddaniu głosu przez 20 sekund.
A co do tych 20000 Twoich głosów to je usunąłem i wprowadziłęm w kodzie PHP:
  1. <?php
  2. $opcja=addslashes($_POST["opcja"]);
  3. ?>


Teraz już chyba 20000 razy nie zagłosujesz (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Teraz już chyba 20000 razy nie zagłosujesz
ech.... kiepsko czytales tamten topic. A ja ci nawet podalem co wpisalem....
No to sobie teraz zajrzyj do bazy... 20 000 jak marzenie (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
rooki
post
Post #8





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 6.07.2007

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


To ja już nie wiem - mysql_real_escape_string()-nie; addslashes()-nie; to jak można się przed tym atakiem zabezpieczyć jeśli mógłbyś napisać (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
o jak można się przed tym atakiem zabezpieczyć jeśli mógłbyś napisać
Spojrz w moj podpis:
Myśl, myśl..... (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Skoro option ma zawierac "tak" lub "nie" to sprawdzaj czy to zawiera a jak nie to odeslij hakera z kwitkiem
Go to the top of the page
+Quote Post
rooki
post
Post #10





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 6.07.2007

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


ok zrobione (IMG:http://forum.php.pl/style_emoticons/default/wstydnis.gif) (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Dzięki ! (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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 Aktualny czas: 24.08.2025 - 13:39