Avatar billede dm-bm Nybegynder
28. april 2004 - 21:47 Der er 32 kommentarer og
1 løsning

Undgå spam af tagwall

Jeg har prøvet at læse lidt rundt omkring på E omkring dette. Jeg fandt også noget, men det virkede ikke helt efter hensigten. Det var noget med setcookie.
http://www.eksperten.dk/spm/420386
Nemt nok at lægge ind, men det eneste der så sker er at der øverst på siden står "du skal vente 30 min. siden sidste nyhed".
Jeg kan stadig tilføje flere og overspamme tagwall'en. Er det den bedste løsning til den slags eller hvordan vil i foreslå mig at lave det?
Godt med point og en stor tak til en god løsning der dur. :)
Avatar billede jakobdo Ekspert
28. april 2004 - 21:49 #1
Du kan jo evt logge brugerens IP?
Har den lagt et indlæg, kan den først ligge igen om 30 min -> ?.
Den kan omgåes ved at bruge forskellige PROXY.
Setcookie kan omgåes ved at fjerne cookie...
Men jeg kan give den en mulig løsning via IP!
Avatar billede Syska Mester
28. april 2004 - 21:49 #2
er det så ikke som du vil have det, at de skal vente 30 mins før de kan poste på din tagwall igen....

eller hvad er det du er ude efter..??
Avatar billede dm-bm Nybegynder
28. april 2004 - 21:53 #3
Jo det er noget i den stil.. måske ikke lige 30 minutter, men anyway... den blokerer ikke noget. Der står bare den tekst øverst når jeg har postet og så kan jeg poste løs igen... Den med IP'en ville også være fin. Jeg er bare ude efter en god løsning der virker og garanterer at de ikke kan spamme løs. Det er et clan-site jeg er ved at lave for en, så der kommer mange tilfældige "møgunger" forbi :D

Jeg er lidt på vildspor med hvordan jeg laver det.
Avatar billede dm-bm Nybegynder
28. april 2004 - 21:56 #4
PS. Hvis i vil have kode så har jeg masser :D
Avatar billede Syska Mester
28. april 2004 - 21:57 #5
Så er det fordi resten af koden ikke er lavet ordenligt, en cookie kan godt stoppe for at folk kan post

bare lave en if
if($cookieset != "yes"){
print "her er post form'"; // så kommer den kun hvis folk ikke har postet
}
Avatar billede dm-bm Nybegynder
28. april 2004 - 22:00 #6
Hvis jeg så sætter det her ind øverst i mon kode:

<?php
if (isset($_COOKIE['cookie'])){
  echo 'du skal vente 30 min. siden sidste nyhed';
}

setcookie('cookie','1',time()+1800);
?>

Hvor skal jeg så smide det ind henne?
Avatar billede jakobdo Ekspert
28. april 2004 - 22:00 #7
På din tagwall har du i toppen:

$ip = $_SERVER["REMOTE_ADDR"];
$q = mysql_query("SELECT id FROM iper WHERE ip = $ip AND date > UNIX_STAMP(NOW())+1800");
if(mysql_num_rows() > 0)
{
echo "IP er fundet, vent 30 min";
}
else
{
echo "SKRIV LØS...";
$q = mysql_query("INSERT INTO iper VALUES('',$IP,NOW()");
}
Avatar billede jakobdo Ekspert
28. april 2004 - 22:01 #8
En cookie kan ikke stoppe en spammer...
Disable cookies, så skriver du løs...
En ip kan ikke, bruge anonyme PROXIES.
Avatar billede dm-bm Nybegynder
28. april 2004 - 22:02 #9
jakobdo > hvordan vil du så foreslå  mig at stoppe for spam eller i det mindste gøre det besværligt at spamme?
Avatar billede dm-bm Nybegynder
28. april 2004 - 22:03 #10
Kan i prøve at hjælpe mig med at smide det ind i min kode.. hvis begge dele virker er det fint med mig og i kan dele point og dele en dobbelt tak :D
Avatar billede jakobdo Ekspert
28. april 2004 - 22:05 #11
Bloker IP, som jeg har vist et lille stykke kode på!
Avatar billede jakobdo Ekspert
28. april 2004 - 22:07 #12
$ip = $_SERVER["REMOTE_ADDR"];
$q = mysql_query("SELECT id FROM iper WHERE ip = $ip AND date > UNIX_STAMP(NOW())+1800");
if(mysql_num_rows() > 0)
{
echo "IP er fundet, vent 30 min"; //Brugeren har skrevet, så fjern POST formen...
}
else
{
echo "SKRIV LØS..."; // Brugeren må gerne POST, så vis POST FORMEN...
$q = mysql_query("INSERT INTO iper VALUES('',$IP,NOW()");
}
Avatar billede dm-bm Nybegynder
28. april 2004 - 22:13 #13
Hvilke områder skal så tilpasses hvad? Den kommer med en fejl på linien med
if(mysql_num_rows() > 0)

Jeg er nok lidt stupid til det, men lærer hele tiden... :o)
Avatar billede dm-bm Nybegynder
28. april 2004 - 22:17 #14
Smider koden.. jeg har før fået at vide at jeg har en indviklet kode.
--------------------------------
<?php require_once('Connections/db.php'); ?>
<?php $currentPage = $_SERVER["PHP_SELF"];
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
  $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;   
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  $insertSQL = sprintf("INSERT INTO tagwall (name, `date`, text, homepage, id, email) VALUES (%s, NOW(), %s, %s, %s, %s)",
                      GetSQLValueString($_POST['name'], "text"),
                      GetSQLValueString($_POST['text'], "text"),
                      GetSQLValueString($_POST['homepage'], "text"),
                      GetSQLValueString($_POST['id'], "int"),
                      GetSQLValueString($_POST['email'], "text"));

  mysql_select_db($database_localhost, $localhost);
  $Result1 = mysql_query($insertSQL, $localhost) or die(mysql_error());

  $insertGoTo = "tagwall.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}

$maxRows_Recordset1 = 10;
$pageNum_Recordset1 = 0;
if (isset($_GET['pageNum_Recordset1'])) {
  $pageNum_Recordset1 = $_GET['pageNum_Recordset1'];
}
$startRow_Recordset1 = $pageNum_Recordset1 * $maxRows_Recordset1;

mysql_select_db($database_localhost, $localhost);
$query_Recordset1 = "SELECT * FROM tagwall ORDER BY `date` DESC";
$query_limit_Recordset1 = sprintf("%s LIMIT %d, %d", $query_Recordset1, $startRow_Recordset1, $maxRows_Recordset1);
$Recordset1 = mysql_query($query_limit_Recordset1, $localhost) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);

if (isset($_GET['totalRows_Recordset1'])) {
  $totalRows_Recordset1 = $_GET['totalRows_Recordset1'];
} else {
  $all_Recordset1 = mysql_query($query_Recordset1);
  $totalRows_Recordset1 = mysql_num_rows($all_Recordset1);
}
$totalPages_Recordset1 = ceil($totalRows_Recordset1/$maxRows_Recordset1)-1;

$queryString_Recordset1 = "";
if (!empty($_SERVER['QUERY_STRING'])) {
  $params = explode("&", $_SERVER['QUERY_STRING']);
  $newParams = array();
  foreach ($params as $param) {
    if (stristr($param, "pageNum_Recordset1") == false &&
        stristr($param, "totalRows_Recordset1") == false) {
      array_push($newParams, $param);
    }
  }
  if (count($newParams) != 0) {
    $queryString_Recordset1 = "&" . htmlentities(implode("&", $newParams));
  }
}
$queryString_Recordset1 = sprintf("&totalRows_Recordset1=%d%s", $totalRows_Recordset1, $queryString_Recordset1);
?>
Avatar billede Syska Mester
28. april 2004 - 22:19 #15
jakobdo -> Det du siger er at IP er det eneste der kan/virker???
hvis, hvad gør en hel skole/forretning, de hopper jo på nettet fra sammme ip, der vil jo komme nogle problemer, så det med ip er også noget sovs.
session id kan være en ide...men igen, luk og åben og de kan igen
Avatar billede dm-bm Nybegynder
28. april 2004 - 22:20 #16
Men hvis det er eneste løsninger må man jo tage sig til takke med dem. Hvis det så bare kan gøres besværligt for dem. Det gør mig ikke så meget om en hel skole har det. Problemet er vel ikke større end at de så bare må vente med at poste i tagwallen til de 30 min. er gået.
Avatar billede dm-bm Nybegynder
28. april 2004 - 22:33 #17
Om så de skulle vente et døgn er det fint. Det skal bare være så folk ikke gider at gøre sig besvær med at spamme. Skulle det ske er det så bare ærgerligt, men så har man da nok sørget for at det ikke er 10 mennesker der gider at gøre det.
Avatar billede Syska Mester
28. april 2004 - 22:36 #18
tror ikke der er mange der gør det, hvis, så bare ban deres ip fra din side, husk at gem ip'en når de smider noget på din tagwall
Avatar billede dm-bm Nybegynder
28. april 2004 - 22:37 #19
Men hvordan skal jeg smide det ind i mit ovenstående script?
Avatar billede Syska Mester
28. april 2004 - 22:42 #20
Når bruger smider noget på din tagwall gemmer du også bare hans IP, laver et felt mere i din mysql database, hvis brugere spammer for vildt fra den IP kan du bare banne den ved at starte alle dine sider eller bare kun tagwall med at teste om han kommer fra den ip, hvis kan du jo lave noget ala det her:
if($_SERVER["REMOTE_ADDR"] == "127.0.0.1") DIE("you have been banned from this page");
Avatar billede dm-bm Nybegynder
29. april 2004 - 12:52 #21
Ja, den er også fin, men jer er mere interesseret i at forbygge spam end at bekæmpe... Det med at banne kan jeg så altid få lavet. Lige nu drejer det sig bare om at jeg vil have gjort så de evt. kun kan smide en besked i tagwallen en gang i døgnet. At de så vil kringle sig udenom for at spamme er så noget andet. Hvis det er muligt direkte at gøre det, vil mange flere nok også gøre det. En tagwall er ikke en chat, så en besked i døgnet må være langt rigeligt. Næsten for meget...
Kan jeg evt. 'banne' ip'erne i et døgn hvorefter de tømmes af databasen?

Kan jeg få et script og også få oplysninger om hvad databasen, tabellerne og rækkerne skal hedde og indstilles i databasen ud fra scriptet? Det ville være kanon idét jeg ikke er alt for smart til php koder og mysql. Alle de $'er gør mig forvirret. Jeg er i tvivl om hvor de fører hen og 'spørger' om..
Ja, jeg ved godt at jeg bare kan lære det, men nu beder jeg om hjælp til det da jeg ikke skal bruge det om 1 år. :D
Avatar billede dm-bm Nybegynder
29. april 2004 - 12:55 #22
Kan man tillige med få det til at gemme formen der tilføjer en besked?
Avatar billede jakobdo Ekspert
29. april 2004 - 12:59 #23
Så synes jeg du skal bruge cookie...
Ja, formen bliver bare ikke vist, hvis en cookie eller Ip findes i mysql...
Avatar billede dm-bm Nybegynder
29. april 2004 - 13:01 #24
Men hvordan skal jeg så lave det og hvad skal jeg have i min database?
Avatar billede dm-bm Nybegynder
29. april 2004 - 13:02 #25
Hvad skal jeg have i min database ud fra dette script? Det eneste den gjorde her var at gemme dato og tid.. resten var tomt
Databasen kaldte jeg iper og havde date, ip og id i tabellen...

$ip = $_SERVER["REMOTE_ADDR"];
$q = mysql_query("SELECT id FROM iper WHERE ip = $ip AND date > UNIX_STAMP(NOW())+1800");
if(mysql_num_rows() > 0)
{
echo "IP er fundet, vent 30 min"; //Brugeren har skrevet, så fjern POST formen...
}
else
{
echo "SKRIV LØS..."; // Brugeren må gerne POST, så vis POST FORMEN...
$q = mysql_query("INSERT INTO iper VALUES('',$IP,NOW()");
}
Avatar billede dm-bm Nybegynder
29. april 2004 - 13:04 #26
Min form hedder bare form1
Avatar billede jakobdo Ekspert
29. april 2004 - 13:12 #27
Vil du bruge cookie eller mysql/ip?
Avatar billede dm-bm Nybegynder
29. april 2004 - 13:20 #28
For mig underordnet.. bare jeg kan spærre for adgang til at poste nye beskeder i f.eks. 24 timer. Og somsagt helst så formen er væk så længe.. Den med IP lyder udemærket.
Avatar billede jakobdo Ekspert
29. april 2004 - 13:32 #29
include("mysql.php");

if (isset($_POST['tilfoej']))
{
    $q = mysql_query("INSERT INTO tagwall VALUES('','".$_POST['indhold']."',NOW()");
    if (mysql_affected_rows($q) > 0)
        mysql_query("INSERT INTO iper VALUES('',$IP,NOW()");
}
else
{

    $q = myqsl_query("SELECT * FROM tagwall ORDER BY dato");
    while($r = mysql_fetch_assoc($q))
    {
        echo $indhold, $forfatter;
        //Her skal du så printe hele tagwallen...
    }
   
    $ip = $_SERVER["REMOTE_ADDR"];
    $q = mysql_query("SELECT id FROM iper WHERE ip = $ip AND date > UNIX_STAMP(NOW())+1800");
    if(mysql_num_rows() > 0)
    {
        echo "IP er fundet, vent 30 min"; //Brugeren har skrevet, så fjern POST formen...
    }
    else
    {
        echo "<form method='post'>"; // Brugeren må gerne POST, så vis POST FORMEN...
        echo "<input type='text' name='indhold'>";
        echo "<input type='submit' name='tilfoej'>";
        echo "</form>";
    }
}
Avatar billede dm-bm Nybegynder
29. april 2004 - 13:42 #30
Jeg kan simpelthen ikke få det tilpasset min kode... Jeg synes slet ikke det passer sammen med min kode på nogen måde. Jeg er lost :/
Avatar billede dm-bm Nybegynder
29. april 2004 - 13:44 #31
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  $insertSQL = sprintf("INSERT INTO tagwall (name, `date`, text, homepage, id, email) VALUES (%s, NOW(), %s, %s, %s, %s)",
                      GetSQLValueString($_POST['name'], "text"),
                      GetSQLValueString($_POST['text'], "text"),
                      GetSQLValueString($_POST['homepage'], "text"),
                      GetSQLValueString($_POST['id'], "int"),
                      GetSQLValueString($_POST['email'], "text"));

det er hvad jeg har i forvejen til min form
Avatar billede dm-bm Nybegynder
14. maj 2004 - 12:50 #32
Det var ikke så meget hjælp der var at hente her. Er der en der kan sætte et spamfilter ind i min kode og så fortælle mig hvordan databasen skal indstilles ud fra det stykke kode? (Navn, tabeller, rækker osv)
Avatar billede dm-bm Nybegynder
14. maj 2004 - 23:21 #33
Lukker så..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester