Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak Zabezpieczyć Formularz?
Forum PHP.pl > Forum > PHP
korex
Witam,
jestem tu nowym oraz początkującym użytkownikiem.
Przybywam z prośbą o pomoc w zabezpieczeniu formularza przed odświezaniem(Nie udało mi sie nic z tym zrobic chodz widzialem tu pare tematów na forum.)
Otóż mam skrypt(napewno jest bardzo pomieszany oraz mozna by go napisac wydajniej ale to moje poczatki jak juz wspomnialem)

buy.php
  1. <form method="POST" action="">
  2. <input id="1" type="radio" value="1" name="buy">XX<br>
  3. <input id="2" type="radio" value="2" name="buy">XX<br>
  4. <input id="3" type="radio" value="3" name="buy">XX<br>
  5. <input id="4" type="radio" value="4" name="buy">XX<br>
  6. <input id="5" type="radio" value="5" name="buy">XX<br>
  7. <input id="6" type="radio" value="6" name="buy">XX<br>
  8. <input id="7" type="radio" value="7" name="buy">XX<br>
  9. <input id="8" type="radio" value="8" name="buy">XX<br>
  10. <input id="9" type="radio" value="9" name="buy">XX<br>
  11. <p>Nick:
  12. <input type="text" name="nick"><br>
  13. <br>
  14. <input type="submit" value="Zamów " name="go" onclick="return confirm('Jesteś pewien że wpisałeś poprawne dane?Jeśli tak kliknij OK.')"></p>
  15. </form>
  16. <?php
  17. connect_db(); //Łącze sie z bazą(dane w config.php)
  18. $query = mysql_query("SELECT `bonus` FROM `accounts` WHERE (`id` = '".$_SESSION['account']."') ") or die(mysql_error());
  19.  
  20. while($sql = mysql_fetch_array($query)) {
  21.  
  22. $bon = $sql['bonus'];
  23.  
  24. }
  25. $nick=$_POST['nick'];
  26.  
  27.  
  28.  
  29.  
  30.  
  31. if ($_SERVER['REQUEST_METHOD'] == "POST") {
  32.  
  33.  
  34.  
  35. $query=mysql_query("SELECT * FROM `players` WHERE (`name` = '$nick')");
  36. if (mysql_num_rows($query) == 0) { 
  37. echo "<h1>Błąd.</h1><p>Gracz o nicku $nick nie istnieje!.</p>";
  38. $e = 1;
  39. }
  40. if (empty($nick)) 
  41. { echo 'Podaj Nick!'; } 
  42.  
  43.  
  44.  
  45. $buy = $_POST['buy'];
  46. if($buy == 1) {
  47. $item='2494';
  48. $itemname="Demon Armor";
  49. $count='1';
  50. $prize='100';
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57. //Includuje kod który dodaje powyższe zmienne do bazy danych u gracza ze zmienna n
    ick jesli ma wystarczajaco punktów
  58. include('buy1.php');
  59.  
  60.  
  61. }
  62. if($buy == 2 ) {
  63. $item='x';
  64. $itemname='xx';
  65. $count='x';
  66. $prize='xx';
  67.  
  68.  
  69. }
  70. if($buy == 3 ) {
  71. $item='x';
  72. $itemname='xx';
  73. $count='x';
  74. $prize='xx';
  75.  
  76.  
  77. }
  78. if($buy == 4 ) {
  79. $item='x';
  80. $itemname='xx';
  81. $count='x';
  82. $prize='xx';
  83.  
  84. }
  85. if($buy == 5 ) {
  86. $item='x';
  87. $itemname='xx';
  88. $count='x';
  89. $prize='xx';
  90.  
  91. }
  92. if($buy == 6 ) {
  93. $item='x';
  94. $itemname='xx';
  95. $count='x';
  96. $prize='xx';
  97.  
  98. }
  99. if($buy == 7 ) {
  100. $item='x';
  101. $itemname='xx';
  102. $count='x';
  103. $prize='xx';
  104.  
  105. }
  106. if($buy == 8 ) {
  107. $item='x';
  108. $itemname='xx';
  109. $count='x';
  110. $prize='xx';
  111. }
  112. if($buy == 9 ) {
  113. $item='x';
  114. $itemname='xx';
  115. $count='x';
  116. $prize='xx';
  117. }
  118. }
  119.  
  120.  
  121.  
  122. ?>

Skrypt smiga i wszystko gra tylko ze po odswiezeniu strony dodaje ponownie do bazy danych;/ Wiec mozna miec bonusu na minusie a tak byc nie powinno:/ Prosiłbym o pomoc w rozwiązaniu tego problemu. Mam nadzieje ze pisze w dobrym dziale.
Snowak
Tibijczyk piszący skrypt do OTSa tongue.gif
Dodaj sobie do formularza jakieś ukryte pole zawierające przypadkowy ID, np. wynik funkcji time() i jednocześnie zapisz go do sesji, np.
  1. <?php
  2. $_SESSION['unique'] = time();
  3. echo('<input type="hidden" name="unique" value="' . $_SESSION['unique'] . '" />');
  4. ?
  5. ?>


I teraz przy zapisywaniu formularza sprawdzasz czy $_SESSION['unique'] == $_POST['unique'] i tylko wtedy zapisujesz dane i jednocześnie zerujesz zmienną unique sesji, czyli $_SESSION['unique'] = '';

Przy następnym odświeżeniu strony skrypt już nie zaakceptuje formularza bo wartość unique będzie inna.

[btw]
Ten skrypt jest podatny na SQL injection... Lepiej się przed tym zabezpiecz bo można sobie przydzielić uprawnienia GMa na OTSie w parę sekund tongue.gif
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.