Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zebezpieczenie przed floodowaniem z wykorzystaniem sesji
Forum PHP.pl > Forum > PHP
bleze
Nie znam się za bardzo na sesjach dlatego proszę Was o pomoc.
Jak za pomocą sesji, time() oraz IP zablokować wysyłanie formularzy przez jednego użytkownika w krótszym czasie niż 30 sekund?
bim2
Hmm, ale chyba zamierzasz pokazać obiekt sesji? Albo obiekt formluarzy? Zobacz na dział forum.
bleze
a.php:
  1. <FORM id="form" method="post" action="comments.php?id=139">
  2. <b>Imię/nick:</b><BR><INPUT name="name" type="text" size="25" maxlength="15"><BR>
  3. <DIV id="iloscZnakow"><b>Twój komentarz:</b> (wpisanych znaków 0<script>document.write(parseInt(document.forms[0].opis.value.length))</SCRIPT>/500)</DIV>
  4.  
  5. <TEXTAREA onFocus="iloscZnakow(this)" onBlur="skoncz(this)" style="overflow:auto" name="message" rows="5" cols="45"></TEXTAREA>
  6. </FORM><button onclick="SendRequestForm()">Dodaj komentarz</button>


comment.php:
  1. <?
  2. $id = $_GET[id];
  3. $message=$_POST['message'];
  4. $name=$_POST['name'];
  5. $message = htmlspecialchars($message, ENT_QUOTES);
  6. $name = htmlspecialchars($name, ENT_QUOTES);
  7. $message = str_replace("r\n", " ", $message);
  8. $name = str_replace("r\n", " ", $name);
  9. $message = str_replace("
  10. ", " ", $message);
  11. $name = str_replace("
  12. ", " ", $name);
  13. if ($name == FALSE) {$name="Anonim";}
  14.  
  15. $message = iconv("utf-8","ISO-8859-2",$message);
  16. $name = iconv("utf-8","ISO-8859-2",$name);
  17.  
  18. $znaki = strlen($message);
  19. if ($znaki<=500 && $znaki !== 0) {
  20.  
  21. if ($message)  
  22.    {
  23.    $date = date("Y-m-d H:i");  
  24.    $message = "$name|$date|$message\n";  
  25.    #$fp = fopen ("comment/$id.comment", "a");  
  26.    $fp = fopen ("comment/" . $id . ".comment", "a");
  27.    fwrite ($fp, $message);  
  28.    fclose ($fp);
  29. echo "<div style='color:green'>Komentarz dodano!</div>";
  30.    }
  31. }
  32. else {
  33.  
  34.    if ($znaki>=500) {echo "<div style='color:red'>Twój komentarz musi mieć mniej niż 500 znaków!</div>";}
  35.  
  36.    else { echo "<div style='color:red'>Musisz wpisać jakiś tekst!</div>";}
  37.  
  38.    echo "<FORM id=\"form\" method=\"post\" action=\"comments.php?id=".$id."\">  
  39. <b>Imię/nick:</b><BR><INPUT name=\"name\" type=\"text\" size=\"25\" maxlength=\"15\"><BR>  
  40. <DIV id=\"iloscZnakow\"><b>Twój komentarz:</b> (wpisanych znaków 0<script>document.write(parseInt(document.forms[0].opis.value.length))</SCRIPT>/500)</DIV>
  41. <TEXTAREA onFocus=\"iloscZnakow(this)\" onBlur=\"skoncz(this)\" style=\"overflow:auto\" name=\"message\" rows=\"5\" cols=\"45\"></TEXTAREA>
  42. </FORM><button onclick=\"SendRequestForm()\">Dodaj komentarz</button>";
  43. }
  44. ?>
Cypherq
Nie wystarczy 30 sekundowe ciasteczko utworzyć i sprawdzać czy istnieje przy dodawaniu komentarzy? :|
bim2
Nigdzie nie widzę obiektów, a co dopiero wyrazu class... Po kiego grzyba wrzucałeś to do tego działu? Proszę wyjaśnij mi motywy bo nie rozumiem. Wierze, że ktoś się może machnąć Przedszkole Php, albo Giełda ofert Przedszkole, ale Programowanie obiektowe które jest poddziałem i widać, że to już coś trudniejszego? Wytłumaczysz mi bo nie zasnę. Proszę.
bleze
w takim razie proszę o przeniesienie tego tematu do odpowiedniego działu.
sorry, niedokładnie przeczytałem nazwę tego działu i dlatego go tu umieściłem, śpij spokojnie bim2.
memory
Prosze o przeniesienie do odp dzialu

rozwiazanie

  1. <?php
  2. function  flood() {
  3. if($_SESSION['last_session_request'] > time() - 30){
  4.  
  5.   echo "<br />Flood,Pomysl zanim napiszesz!";  //tutaj co chcesz
  6.   exit;
  7. }
  8. $_SESSION['last_session_request'] = time();
  9.  
  10.  
  11.  
  12. }
  13. ?>
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.