Oldal: 1 / 2 12 UtolsóUtolsó
Eredmény: 1 - 10 (17) összesen

Téma: Shoutbox flood védelem.

  1. #1
    Új tag
    Csatlakozott
    13-10-22
    Hozzászólás
    10
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Villanykörte Shoutbox flood védelem.

    Sziasztok. Olyan gondom lenne,hogy szeretnék flood védelmet berakni.
    De mivel az általam használt shoutbox egy módosított fajta ezért sajnos a megírt flood védelem nem hat rá sőt csak a moderátorokat szabálozza mikor üzenet törlést hajt végre és amikor gépelés van akkor pedig semmit se csinál.:

    PHP kód:
    <?php
    define
    ('BNBTPHP',1);
    include(
    "include/config.inc.php");
    include(
    "include/functions.inc.php");
    loginolva();


    if (isset(
    $_GET['del']))
    {
    if (
    is_numeric($_GET['del']))
    {
    $query "SELECT * FROM shoutbox WHERE id=".$_GET['del'];
    $result mysql_query($query);
    }
    else {
    echo 
    "<center>Hibás üzenet</center>";
    exit;}

    $row mysql_fetch_row($result);


    $query "DELETE FROM shoutbox WHERE id=".$_GET['del'];
    mysql_query($query);


    ///flood védelem

    if($_SESSION['uzifal'] > TIME() - 5){
    print(
    "<center><h2><font color='red'>Ne floodolj!!!!! Legalább 5 mp kell, hogy elteljen az üzeneteid között!<br />Pár másodpercen belül automatikusan visszajutsz az üzenőfalra!</font></h2></center>");

    header("Location: csevego.php");
      die();
    }
    $_SESSION['uzifal'] = TIME();
    /// flood védelem vége

    }

     
    ?>
    <META HTTP-EQUIV=REFRESH CONTENT="20; URL=shoutbox.php"> 
    <title>ShoutBox</title>

    <style type="text/css">
    body {background-color: #F5F4EA; }
    A {color: #000000; font-weight: bold; }
    A:hover {color: #FF0000;}
    .small {font-size: 9pt; font-family: arial; }
    .date {font-size: 9pt;}
    </style>

    <body>
    <?


    $secs 
    60 400;


    if (
    $_GET["sent"]=="yes")
    {
        
         
    $res mysql_query("SELECT * FROM xbt_users WHERE uid=$uid") or die(mysql_error());
        
     if(
    $res1 mysql_fetch_array($res)){
     
    $userid $res1['uid'];
     
    $username $res1['name'];
     
    $date=time();
     
    $text=trim($_GET["shbox_text"]);


     
    mysql_query("INSERT INTO shoutbox (userid, username, date, text) VALUES ('$uid', '$username', '$date','$text')") or die(mysql_error());
    }
     }


    $act $_GET["act"];
    if (
    $act=="del")
    {
    mysql_query("DELETE FROM shoutbox WHERE id='$id' LIMIT 1") or die(mysql_error());
    }

    $res2 mysql_query("SELECT * FROM shoutbox ORDER BY date DESC LIMIT 50") or die(mysql_error());
     if (
    mysql_num_rows($res2) == 0){
       print(
    "<b>Az üzenőfal üres kezd betölteni :)</b>\n");
     }else
     {
       print(
    "<table border=0 cellspacing=0 cellpadding=2 width='100%' align='left' class='small'>\n");
        while (
    $arr mysql_fetch_array($res2))
       {
        
        

         
    $del="";
         
    //if ($user["id"]==1 || $user["id"]==$arr["uid"]) //$del="<a href=/shoutbox.php?del=".$arr[id]."><img src=/pic/warned2.gif border= 0 />";
        
    if($szint >= 8) {
         
    $del="<a href=/shoutbox.php?del=".$arr[id]."> [x] ";
         }
         print(
    "<tr><td><span class='date'><i>".strftime("%d.%m %H:%M",$arr["date"]).":</i></font>");
    if(
    $szint >= 8) {
         print 
    "$del";
         }
    print 
    "</span><a href='userdetails.php?uid=".$arr["userid"]."' target='_top'>".$arr["username"]."<img height=10px style=border:none alt=válasz title=válasz src=jobbra.gif></a> <span class='date'></span>  "bb2html($arr["text"], 1)."</td></tr>\n";
       }
       print(
    "</table>");
     }


     
    ?>

    </body>
    Köszönöm a segítséget előre.



  2. #2
    'Say Hello To My Little Friend'
    Csatlakozott
    10-04-13
    Hely
    Budapest
    Hozzászólás
    2.784
    Begyűjtött 863 köszönetet
    659 hozzászólásával

    Alapbeállítás re: Shoutbox flood védelem.

    Idézet geeb eredeti hozzászólása Hozzászólás megtekintése
    Sziasztok. Olyan gondom lenne,hogy szeretnék flood védelmet berakni.
    Azaz? Ha nem írod le, hogy mit akarsz, akkor nehéz segíteni. Mit szeretnél pontosan? Hogy x másodpercenként csak egy üzenetet küldhessen? Vagy mit?

    Egyébként az egész "flood védelmed" az if(isset($_GET['del'])) -en belül van, így csak akkor fog futni, hogyha a $_GET['del']-nek van értéke. Pluz igencsak törhető a dolog egy mysql injecttel. Szerintem valami ilyesmit akarsz:

    [QUOTE=geeb;315944]
    PHP kód:
    if (isset($_GET['del']))
    {
    if (
    is_numeric($_GET['del']))
    {
    $query "SELECT * FROM shoutbox WHERE id=".$_GET['del'];
    $result mysql_query($query);
    }
    else 
    {
    echo 
    "<center>Hibás üzenet</center>";
    exit;
    }

    $row mysql_fetch_row($result);


    $query "DELETE FROM shoutbox WHERE id=".$_GET['del'];
    mysql_query($query);
    }


    //flood védelem

    if($_SESSION['uzifal'] > time() - 5
    {
    print(
    "<center><h2><font color='red'>Ne floodolj!!!!! Legalább 5 mp kell, hogy elteljen az üzeneteid között!<br />Pár másodpercen belül automatikusan visszajutsz az üzenőfalra!</font></h2></center> Ide valami javascriptes átirányítás jön, ami x mp után a csevego.php-ra irányít");
    die();
    }
    $_SESSION['uzifal'] = time();
    // flood védelem vége 



    Utoljára módosítva: Emphus által : 2013-10-24 20:24

  3. #3
    Új tag
    Csatlakozott
    13-10-22
    Hozzászólás
    10
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: Shoutbox flood védelem.

    szia.
    Igen azt szeretném,hogy ne tudjon egy user tele nyomni az üzenőfalat millió hurkasággal.:

    PHP kód:
    if ($_GET["sent"]=="yes" && $_SESSION['uzifal'] > (time() - 5)) 
    {
        
         
    $res mysql_query("SELECT * FROM xbt_users WHERE uid=$uid") or die(mysql_error());
        
     if(
    $res1 mysql_fetch_array($res)){
     
    $userid $res1['uid'];
     
    $username $res1['name'];
     
    $date=time();
     
    $text=trim($_GET["shbox_text"]);


     
    mysql_query("INSERT INTO shoutbox (userid, username, date, text) VALUES ('$uid', '$username', '$date','$text')") or die(mysql_error());
    }
     else {
       print(
    "<center><h2><font color='red'>Ne floodolj!!!!! Legalább 2 mp kell, hogy elteljen az üzeneteid között!<br />Pár másodpercen belül automatikusan visszajutsz az üzenőfalra!</font></h2></center>");

     
    header("Location: csevego.php");
      die();
    }
    $_SESSION['uzifal'] = TIME();
    /// flood védelem vége
     

    Valami ilyesmire gondoltam,hogy a sent (amikor küldeni akar) részbe.
    Igazából akkor már jó is lenne a chat.

    Köszi előre.



  4. #4
    Új tag
    Csatlakozott
    13-10-22
    Hozzászólás
    10
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: Shoutbox flood védelem.

    Amúgy mikor a del részbe raktam akkor szépen működött tehát meg volt a az üzenet illetve 5 másodperc után vissza is engedte az oldalra csak az volt a baj mineden egyes üzenet törlésnél csinálta ezt és akkor jöttem rá rossz helyre írtam be. De most mikor a küldés részbe menne nem akar működni.



  5. #5
    'Say Hello To My Little Friend'
    Csatlakozott
    10-04-13
    Hely
    Budapest
    Hozzászólás
    2.784
    Begyűjtött 863 köszönetet
    659 hozzászólásával

    Alapbeállítás re: Shoutbox flood védelem.

    Ez így kicsit káosz.

    Először is: sessionje minden usernek van? Mert ha nem, akkor ne is akarj nálunk sessionben bármit is tárolni, mert az úgy tuti ne fog menni.
    Másodszor: a header("Location: akármi"); azonnali átirányítás, nem pár másodperc múlva. Ez így másodperceken keresztül folyamatosan átirányítja a uert, és nagyon csúnya. Inkább JS-el irányítsd, mint ahogy ár leírtam korábban is.
    Harmadszor: használj inkább POSt-ot, ne GEt-et.

    Negyedszer: gondolkodj. Most azt csinálod, hogyha a $_GET["sent"] az == "yes" ÉS $_SESSION['uzifal'] > (time() - 5) (azaz az elmúlt 5 mp-ben letöltötte az adott oldalt kb), akkor beírod az üzenetet, egyéb esetben pedig a floodolást írod ki. Ezt pont fordítva kéne. Mert így csak akkor megy el az üzenet, hogyha az elmúlt 5 mp-ben frissült az oldal, és minden más esetben kimegy a flood üzenet (akkor is, ha a $_GET["sent"] nem "yes", és akkor is, ha nem az elmúlt 5 mp-ben töltött ele az odlalt).

    Ez így totális káosz. Én írtam neked egy működő kódot, amibe csak egy javascript átirányítás kell, és már megy is.

    Ötödször: olvass utána a mysql_real_escape_string() függvénynek is, mert jelenleg sokszorosan törhető az adatbázis, nagyon egyszerű trükkökkel.



  6. #6
    Új tag
    Csatlakozott
    13-10-22
    Hozzászólás
    10
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: Shoutbox flood védelem.

    Így gondoltad? GET parancsot nem cseréltem még le. Ez most teszt mert nekem nem megy most sem...
    PHP kód:
    //flood védelem

    if($_SESSION['uzifal'] > time() - 10
    {
    print (
    "<center><h2><font color='red'>Ne floodolj!!!!! Legalább 5 mp kell, hogy elteljen az üzeneteid között!<br />Pár másodpercen belül automatikusan visszajutsz az üzenőfalra!</font></h2></center>");

    print (
    "<script type='text/javascript'>document.location.href='csevego.php'</script>\n");

    die();
    }
    $_SESSION['uzifal'] = time();
    // flood védelem vége 




  7. #7
    Rubyist Geri logója
    Csatlakozott
    07-12-15
    Hely
    \x90
    Hozzászólás
    5.608
    Begyűjtött 1.334 köszönetet
    829 hozzászólásával

    Alapbeállítás re: Shoutbox flood védelem.

    A session el is kell inditani mielott irni/olvasni szeretned. Ez a kod annyi sebbol verzik sajnos, hogy nem is tudok ra mit irni.



  8. #8
    'Say Hello To My Little Friend'
    Csatlakozott
    10-04-13
    Hely
    Budapest
    Hozzászólás
    2.784
    Begyűjtött 863 köszönetet
    659 hozzászólásával

    Alapbeállítás re: Shoutbox flood védelem.

    Idézet geeb eredeti hozzászólása Hozzászólás megtekintése
    Így gondoltad? GET parancsot nem cseréltem még le. Ez most teszt mert nekem nem megy most sem...
    Így, de ugye azt írod ki, hogy 2 mp-t várjon (miért nem 5-öt? így megint spamnek fog menni), akkor várjon is ennyit, ne legyen azonnali átirányítás.

    Egyébként meg amit én is írtam az 1. pontban meg Geri is írt az elég fontos. Elég semmit és használhatatlan a jelenegi kód.



  9. #9
    Új tag
    Csatlakozott
    13-10-22
    Hozzászólás
    10
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: Shoutbox flood védelem.

    Most erre jutottam.:

    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /home/valami.hu/public_html/shoutbox.php on line 385
    Ne floodolj!!!!! Legalább 10 mp kell, hogy elteljen az üzeneteid között!
    Pár másodpercen belül automatikusan visszajutsz az üzenőfalra!

    Warning: Cannot modify header information - headers already sent by (output started at /home/domains/valami.hu/public_html/shoutbox.php:374) in /home/domains/valami.hu/public_html/shoutbox.php on line 397



    A Hibaüzenetet így orvosoltam:

    PHP kód:
    ini_set('display_errors'0); 
    Most nincs hibaüzenet.

    De annyi lenne még a gondom,hogy mikor írok üzenetet mindig beadja a flood szöveget és nem küldi be az üzenetet.

    PHP kód:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
        
    if ($_GET["sent"]=="yes")
    {
            
             
    $res mysql_query("SELECT * FROM xbt_users WHERE uid=$uid");
            
     if(
    $res1 mysql_fetch_array($res) && $_SESSION['uzifal'] > (time() - 10)){
     
    $userid $res1['uid'];
     
    $username $res1['name'];
     
    $date=time();
     
    $text=trim($_GET["shbox_text"]);
     
     
    mysql_query("INSERT INTO shoutbox (userid, username, date, text) VALUES ('$uid', '$username', '$date','$text')") or die(mysql_error());
    }
     else {
       print(
    "<center><h2><font color='red'>Nyugi! Legalább 10 mp kell, hogy elteljen az üzeneteid között!<br />Pár másodpercen belül automatikusan visszajutsz az üzenőfalra!</font><br><img src='136.gif' height='200' width='150'></h2></center> ");
      
     
    header("Location: csevego.php");
      die();





  10. #10
    Rubyist Geri logója
    Csatlakozott
    07-12-15
    Hely
    \x90
    Hozzászólás
    5.608
    Begyűjtött 1.334 köszönetet
    829 hozzászólásával

    Alapbeállítás re: Shoutbox flood védelem.

    Idézet geeb eredeti hozzászólása Hozzászólás megtekintése
    A Hibaüzenetet így orvosoltam:

    PHP kód:
    ini_set('display_errors'0); 
    Ez nem a legjobb, mert igy csak elnyomod a hibat de a problema gyokeret nem javitod. A hiba ott lesz, hogy ez a lekerdezes:
    PHP kód:
    $res mysql_query("SELECT * FROM xbt_users WHERE uid=$uid"); 
    hibat dob. Innentol mindig az else ag hajtodik vegre. Igy tudod megnezni mi a gond a lekerdezessel:
    PHP kód:
    $res mysql_query("SELECT * FROM xbt_users WHERE uid=$uid") or die(mysql_error()); 
    Viszont ezt a kodot elnezve jobban jarsz ha ezt nem rakod fel egy szerverre, mert faek egyszeruen fel lehet torni.


    If debugging is the process of removing software bugs, then programming must be the process of putting them in.
    Github Rake tutorial
    Give a man a fish and you feed him for a day. Teach a man to fish and you feed him for a lifetime.
    Respect all, fear none

Oldal: 1 / 2 12 UtolsóUtolsó

Könyvjelzők

Hozzászólás szabályai

  • Új témákat nem hozhatsz létre
  • Válaszokat nem küldhetsz
  • Fájlokat nem csatolhatsz
  • A hozzászólásaidat nem módosíthatod
  •