Avatar billede jih Nybegynder
01. april 2005 - 02:52 Der er 28 kommentarer og
1 løsning

anti-bot billede (javascript eller php?)

Hey,

#1 jeg tænkte på at få sådan et billede som fx på http://www.kingsofchaos.com/register.php hvor du skal indtaste de samme tal/bogstaver som der står på billedet... er der nogen her der ved en måde at gøre det på?

Eller:

#2 det er fordi jeg har en gæstebog på http://webpsycho.users.whitehat.dk/guestbook/ men der bliver ved med at komme bot-indlæg derpå.. Så jeg må ind og rette i filen selv for at fjerne disse... Det er ekstremt meget spam i min gæstebog... selv om jeg har http://webpsycho.users.whitehat.dk/robots.txt (den må også gerne tjekkes og se om der er noget galt med den)... Men hvis der ikke er noget galt med robots.txt, er der så en nemmere løsning på at fjerne disse "bot-indlæg" ?

Tak... smider en masse points ind, siden det her generer mig rimelig meget og ved ikke hvor svært dette er..

// WebPsycho
Avatar billede alister_crowley Nybegynder
01. april 2005 - 04:48 #1
#1

www.php.net/image <- GDLIB :)

#2

Har du også prøvet med no-href ?

Btw. dit guest-book link virker ikke, men jeg tror at du har konstrukret din gæstebog forkert kodemæssigt, da jeg aldrig har oplevet sådan noget selv.
Avatar billede alister_crowley Nybegynder
01. april 2005 - 04:50 #2
jep, fejlen er at jeg bare kan klikke F5, så laver det et indlæg mere.
Dette er en kodemæssig fejl, så hvis du gad poste din souce kode, så kan der sikkert ændres noget.

Ellers kan en cookie eller session anbefales, til at begrænse antallet.
Avatar billede jih Nybegynder
01. april 2005 - 05:32 #3
ok... jeg kan så slet ikk finde rundt i det link du gav mig, så jeg vælger vel at lave gæstebogen om :P

koden er her:
addbook.php:
---
<?php
if ($message != '')
{
  $message = str_replace ("\n","<br>",$message);
  $message = strip_tags ($message, '<br>');

  if($url != '')
  {
  $newRow = '<table border="1" width="100%"><tr align="center" width="100%"><td align="center" width="100%"><div><hr width="50%"><font size="2">' . date('d.m.Y H:i') . ' - <a href="mailto:' . ($email) . '">' . ($name) . '</a> (<a href="http://' . ($url) . '" target="_blank">website</a>) writes:' .
          '<br><hr width="50%">' . strip_tags ($message) .
          '</div></font></td></tr></table>';
  } else {
  $newRow = '<table border="1" width="100%"><tr align="center" width="100%"><td align="center" width="100%"><div><hr width="50%"><font size="2">' . date('d.m.Y H:i') . ' - <a href="mailto:' . ($email) . '">' . ($name) . '</a> writes:' .
          '<br><hr width="50%">' . strip_tags ($message) .
          '</div></font></td></tr></table>';
  }
           
  $oldRows = join ('', file ('../guestbook/files/guestbook.txt') );
  $fileName = fopen ('../guestbook/files/guestbook.txt', 'w');
  fputs ($fileName, $newRow . chr(13) . chr(10) . $oldRows);
  fclose ($fileName);
}

include ("../guestbook/read.php");
?>
---

Er der ikke en måde at fikse det problem med "website" linket? hvis du kigger i gæstebogen ( http://webpsycho.users.whitehat.dk/guestbook/read.php ), ser du at dit website bliver skrevet forkert.. jeg har gjort det sådan at man ikke skal skrive http:// foran, fordi så hvis man skriver www.side.dk bliver linket til http://webpsycho.users.whitehat.dk/www.side.dk.. hvad kan man gøre her? jeg vil gerne have det sådan at hvis en skriver en ugyldig hjemmeside (fx "ingen") så bliver det ikke til et link, men gerne til en "alert" boks som siger at fieldet enten skal være tomt eller der skal stå en URL i (med eller uden http://)

Behøver ikke hjælpe med alt dette hvis du ikke kan... :-)
Avatar billede alister_crowley Nybegynder
01. april 2005 - 05:40 #4
kigger lige på det, skal nok lægge en url fixer ind :)
Avatar billede alister_crowley Nybegynder
01. april 2005 - 05:47 #5
Teste denne her:

--------------------------------------------

<?php
session_start(); // vigtig !

function sjov_url($url)
{
  $newurl = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","<a href=\"\\0\">\\0</a>",
          ereg_replace("www[^<>[:space:]]+[[:alnum:]/]", "http://\\0",
          str_replace("http://www", "www", $url)));
  return $newurl;
}

// POST skal være sat, og message må ikke være tom
if(isset($_POST['message']) && !empty($_POST['message']))
{
  // du havde vist ikke lært om register_globals
  $message = nl2br($_POST['message']);
  $message = strip_tags($message, '<br>');
  $email  = $_POST['email'];
  $url    = $_POST['url'];
  $name    = $_POST['name'];
  $url = sjov_url($url);

  echo '<table border="1" width="100%"><tr align="center" width="100%">';
  echo '<td align="center" width="100%"><div><hr width="50%"><font size="2">';
  echo date("d.m.Y H:i").' - <a href="mailto:'.$email.'">'.$name.'</a>';
  echo '('.$url.') writes:';
  echo '<br><hr width="50%">'.$message;
  echo '</div></font></td></tr></table>';

  // kun 1 indlæg pr. bruger, ellers skal de lukke browseren, og åbne siden igen.
  // så burde man slippe for spam.
  if(!$_SESSION['indlaag'])
  {
    $oldRows = join ('', file ('../guestbook/files/guestbook.txt') );
    $fileName = fopen ('../guestbook/files/guestbook.txt', 'w');
    fputs ($fileName, $newRow . chr(13) . chr(10) . $oldRows);
    fclose ($fileName);
    $_SESSION['indlaag'] = 1;
  }
}

include ("../guestbook/read.php");
?>
Avatar billede alister_crowley Nybegynder
01. april 2005 - 05:48 #6
vender først tilbage senere på dagen, men jeg håber det virker for dig :)
Avatar billede jih Nybegynder
01. april 2005 - 14:41 #7
virker ikke helt efter hvordan jeg ville... hvis du kigger i http://webpsycho.users.whitehat.dk/guestbook/read.php
Avatar billede jih Nybegynder
01. april 2005 - 14:44 #8
hmmm.... indlægget forsvandt også... der står der er 8 posts, men der er kun 7... (plus det jeg skrev, men det forsvandt jo?)

fejl:
indlægget fylder hele siden og kommer over alle de andre links.. (på toppen af siden).. det skal jo ligge det samme sted som de andre (mellem alle de andre links i siden) og under "¤ GUESTBOOK ¤", "-->Sign the guestbook.<--" og "There are x posts in the guestbook."
Avatar billede jih Nybegynder
01. april 2005 - 14:49 #9
har kigget i guestbook.txt, og den skriver kun en tom linie i filen? jeg kan ikke se hvad det kan skyldes fordi jeg forstår ikke helt den kode du skrev her... jeg er ikke den store php programmer ;)
Avatar billede alister_crowley Nybegynder
01. april 2005 - 17:13 #10
ah, ja.

Det var fordi du puttede hele layoutet i din .txt fil :) det havde jeg overset.

Ændre:

  echo '<table border="1" width="100%"><tr align="center" width="100%">';
  echo '<td align="center" width="100%"><div><hr width="50%"><font size="2">';
  echo date("d.m.Y H:i").' - <a href="mailto:'.$email.'">'.$name.'</a>';
  echo '('.$url.') writes:';
  echo '<br><hr width="50%">'.$message;
  echo '</div></font></td></tr></table>';

til

  $newRow = '<table border="1" width="100%"><tr align="center" width="100%">';
  $newRow .= '<td align="center" width="100%"><div><hr width="50%"><font size="2">';
  $newRow .= date("d.m.Y H:i").' - <a href="mailto:'.$email.'">'.$name.'</a>';
  $newRow .= '('.$url.') writes:';
  $newRow .= '<br><hr width="50%">'.$message;
  $newRow .= '</div></font></td></tr></table>';

Og prøv så igen :)
Avatar billede jih Nybegynder
01. april 2005 - 21:21 #11
hmm... har prøvet... nú står der bare ikke (website) som link, men (linket)... idé ?
Avatar billede alister_crowley Nybegynder
02. april 2005 - 00:13 #12
øhh, er du kommet til at slette denne linje ?

$url = sjov_url($url);

Den aktivere den funktion som laver det til en klikbar url.
Avatar billede alister_crowley Nybegynder
02. april 2005 - 00:14 #13
Det virker da fint ?
Avatar billede alister_crowley Nybegynder
02. april 2005 - 00:15 #14
Hvis du vil skrive website istedet for linket (hvilket er lidt underligt, og fjerne hele ideen i at have links) så ændre lidt på funktionen...

function sjov_url($url)
{
  $newurl = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","<a href=\"\\0\">(website)</a>",
          ereg_replace("www[^<>[:space:]]+[[:alnum:]/]", "http://\\0",
          str_replace("http://www", "www", $url)));
  return $newurl;
}
Avatar billede jih Nybegynder
02. april 2005 - 05:54 #15
ja ok, men så kan man så lave det så der står "(website: (link))" ?
Avatar billede alister_crowley Nybegynder
02. april 2005 - 19:18 #16
prøv sådan her så :)

function sjov_url($url)
{
  $newurl = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","<a href=\"\\0\">(website: (\\0)</a>",
          ereg_replace("www[^<>[:space:]]+[[:alnum:]/]", "http://\\0",
          str_replace("http://www", "www", $url)));
  return $newurl;
}
Avatar billede jih Nybegynder
03. april 2005 - 14:24 #17
ok.. jeg prøver lige at fikse lidt på dit script... se om jeg kan få det ud af det som jeg vil have... :)
Avatar billede jih Nybegynder
03. april 2005 - 14:35 #18
nu har jeg lavet den til følgende:

<?php
session_start(); // vigtig !

function sjov_url($url)
{
  $newurl = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","(<a href=\"\\0\" target=\"_blank\">website</a>)",
          ereg_replace("www[^<>[:space:]]+[[:alnum:]/]", "http://\\0",
          str_replace("http://www", "www", $url)));
  return $newurl;
}

// POST skal være sat, og message må ikke være tom
if(isset($_POST['message']) && !empty($_POST['message']))
{
  // du havde vist ikke lært om register_globals
  $message = nl2br($_POST['message']);
  $message = strip_tags($message, '<br>');
  $email  = $_POST['email'];
  $url    = $_POST['url'];
  $name    = $_POST['name'];
  $url = sjov_url($url);

  $newRow = '<table border="1" width="100%"><tr align="center" width="100%">';
  $newRow .= '<td align="center" width="100%"><div><hr width="50%"><font size="2">';
  $newRow .= date("d.m.Y H:i").' - <a href="mailto:'.$email.'">'.$name.'</a>';
  if(isset($_POST['url']) && !empty($_POST['url']))
  {
    $newRow .= ' ' . $url;
  }
  $newRow .= ' writes:<br><hr width="50%">'.$message;
  $newRow .= '</div></font></td></tr></table>';


  // kun 1 indlæg pr. bruger, ellers skal de lukke browseren, og åbne siden igen.
  // så burde man slippe for spam.
  if(!$_SESSION['indlaag'])
  {
    $oldRows = join ('', file ('../guestbook/files/guestbook.txt') );
    $fileName = fopen ('../guestbook/files/guestbook.txt', 'w');
    fputs ($fileName, $newRow . chr(13) . chr(10) . $oldRows);
    fclose ($fileName);
    $_SESSION['indlaag'] = 1;
  }
}

include ("../guestbook/read.php");
?>

hvor ligger fejlen nu? hvis du kigger i read.php, ser du at det bliver ikke til link, når jeg skriver webpsycho.users.whitehat.dk...? :S
Avatar billede alister_crowley Nybegynder
03. april 2005 - 14:36 #19
self ikke :)

webpsycho.users.whitehat.dk er ikke et link

www.webpsycho.users.whitehat.dk
og http://webpsycho.users.whitehat.dk er et link.

Det er da meget åbenlyst.
Avatar billede jih Nybegynder
03. april 2005 - 16:13 #20
ja da... men det jeg tænkte på var at hvis det ikke er et link, skal der ikke stå noget... kan man gøre det? eller er det for besværligt? =S Vil helst ikke have at der bare står webpsycho.users.whitehat.dk bagefter... :P
Avatar billede jih Nybegynder
03. april 2005 - 16:15 #21
nå ja... og en sidste ting... kan man gøre det sådan at istedet for at man kommer på addbook.php, så kommer man på read.php? (når man har skrevet et indlæg)
Avatar billede alister_crowley Nybegynder
03. april 2005 - 16:17 #22
så skal du først lave et check om url'en er god nok, og derefter sætte <a href=... på den.

Prøv sådan her så:

function sjov_url($url)
{
  if(ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]",$url))
{
  $newurl = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","(<a href=\"\\0\" target=\"_blank\">website</a>)",
          ereg_replace("www[^<>[:space:]]+[[:alnum:]/]", "http://\\0",
          str_replace("http://www", "www", $url)));
  return $newurl;
}
else
{
  $blank = "";
  return $blank;
}
}
Avatar billede alister_crowley Nybegynder
03. april 2005 - 16:18 #23
.....
  // kun 1 indlæg pr. bruger, ellers skal de lukke browseren, og åbne siden igen.
  // så burde man slippe for spam.
  if(!$_SESSION['indlaag'])
  {
    $oldRows = join ('', file ('../guestbook/files/guestbook.txt') );
    $fileName = fopen ('../guestbook/files/guestbook.txt', 'w');
    fputs ($fileName, $newRow . chr(13) . chr(10) . $oldRows);
    fclose ($fileName);
    $_SESSION['indlaag'] = 1;
  }
  header("Location: read.php"); // redirecter
}

include ("../guestbook/read.php");
?>
Avatar billede jih Nybegynder
03. april 2005 - 17:16 #24
haha... så virker den lige som jeg vil have den til at virke :D

Tusind tak for hjælpen :) smid lige et svar så får du dine velfortjente points ;)
Avatar billede jih Nybegynder
04. april 2005 - 13:34 #25
der er kun lige et problem, men det er der vist ikk noget at gøre ved... de "auto-indlæg" (hvis det er det), bliver stadigvæk ved med at komme... =/

Men du har alligevel fortjent de points, så læg nu et svar... jeg insisterer! :D
Avatar billede alister_crowley Nybegynder
04. april 2005 - 13:36 #26
nej tak, jeg samler ikke på points.

Træls med spam-indlægene, men med alt som er gjort nu, tror jeg at det er mennekser, og ikke robotter som skriver det.
Avatar billede jih Nybegynder
04. april 2005 - 14:03 #27
aah... jeg føler mig helt dårligt her... det er jo meningen at du skal få dine points... :P vil du hellere ikke bare acceptere en del af dem? du kan selv bestemme beløbet...?
Avatar billede alister_crowley Nybegynder
04. april 2005 - 14:25 #28
well, så pyt da for en enkelt gangs skyld.

Har gang i noget XUL/JAVA/SOAP så får brug få lidt points ekstra det næste par dage, kan jeg se.
Avatar billede jih Nybegynder
04. april 2005 - 14:33 #29
yes! tusind tak for hjælpen :) men hvis du har brug for pointsene, kan du jo bare få alle 200 :) held og lykke med det XUL/JAVA/SOAP du snakker om ;)
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
Kurser inden for grundlæggende programmering

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