Avatar billede Slettet bruger
17. juli 2009 - 14:15 Der er 11 kommentarer og
1 løsning

Hvordan undgår jeg spam-indlæg? (part 2)

Jeg har en hjemmeside, hvor brugerne kan komme med indlæg (sparetips) men er begyndt at døje en del med spam-indlæg. Jeg har sikret formularen med javascript og med serverside-validering i php, men alligevel lykkes det at indtaste indlæg som f.eks.

qazlTP  <a href="http://puwzmjmnjlli.com/">puwzmjmnjlli</a>, nwyqotgmbepu, [link=http://zeqkrwwlgvsm.com/]zeqkrwwlgvsm[/link], http://voflhuoocroy.com/

Min kode mod uønskede tegn (>,<,[,],/,@,{,}) ser sådan ud :
if (!$error && ((stristr($_POST['tekst'], ">") == TRUE) || (stristr($_POST['tekst'], "<") == TRUE) || (stristr($_POST['tekst'], "[") == TRUE) || (stristr($_POST['tekst'], "]") == TRUE) || (stristr($_POST['tekst'], "{") == TRUE) || (stristr($_POST['tekst'], "}") == TRUE) || (stristr($_POST['tekst'], "@") == TRUE) || (stristr($_POST['tekst'], "/") == TRUE) || (stristr($_POST['tekst'], "www") == TRUE))) {
$error = 'Der kan ikke anvendes specialtegn, links eller HTML-kode i denne formular';
  }

...og det virker, når jeg selv tester med at indtaste specialtegnene. Hvordan kan det så lade sig gøre?
Avatar billede erikjacobsen Ekspert
17. juli 2009 - 15:07 #1
http://php.net/stristr afleverer aldrig TRUE

Men det kan jo være noget kode et andet sted i dit script.
Avatar billede Slettet bruger
18. juli 2009 - 10:27 #2
Hvad skal jeg så bruge istedet for stristr? Jeg forsøger bare at tjekke feltet "tekst" for nogle specielle karakterer...
Avatar billede erikjacobsen Ekspert
18. juli 2009 - 13:16 #3
Du kunne bruge http://php.net/stripos, men det er næppe problemet.
Avatar billede Slettet bruger
20. juli 2009 - 09:08 #4
Hvad er så problemet?
Avatar billede erikjacobsen Ekspert
20. juli 2009 - 09:59 #5
Jeg mener ikke, at det fremgår af den kode du viser her.
Avatar billede Slettet bruger
20. juli 2009 - 10:22 #6
Hele header-koden er her :
if ( $_POST['submit'] ) {
  $error = '';
  if ( !$error && $_POST['tekst'] == '' ) {
      $error = 'Udfyld venligst alle felter';
  }
    elseif (!$error && ((stristr($_POST['tekst'], ">") == TRUE) || (stristr($_POST['tekst'], "<") == TRUE) || (stristr($_POST['tekst'], "[") == TRUE) || (stristr($_POST['tekst'], "]") == TRUE) || (stristr($_POST['tekst'], "{") == TRUE) || (stristr($_POST['tekst'], "}") == TRUE) || (stristr($_POST['tekst'], "@") == TRUE) || (stristr($_POST['tekst'], "/") == TRUE) || (stristr($_POST['tekst'], "www") == TRUE))) {
$error = 'Der kan ikke anvendes specialtegn, links eller HTML-kode i denne formular';
  }
  if ( !$error ) {
  $tidspunkt=time();
$tekst2 = mysql_real_escape_string($_POST['tekst']);
mysql_query("insert into tips (tip, dato) VALUES ('$tekst2',$tidspunkt)");
header("Location:tak.php");
exit;
  }
}

..og placeret ved formularen i body-delen :
<?php if ( $error ) { ?>
<?=$error;?>
<?php } ?>
Avatar billede erikjacobsen Ekspert
20. juli 2009 - 10:56 #7
Ja, det ser også rigtigt ud - hvis der kommer spam indlæg så må der være et problem et andet sted.
Avatar billede Slettet bruger
20. juli 2009 - 11:09 #8
Det vil med andre ord sige, at det kode, jeg har her, sådan set er ok, men at "hullet" er et andet sted? Kan det tænkes, at "spammeren" bruger html special chars, altså f.eks. &#47 istedet for slash osv.?
Avatar billede erikjacobsen Ekspert
20. juli 2009 - 11:13 #9
Du kan jo se i din database, hvad der slipper igennem.
Avatar billede Slettet bruger
20. juli 2009 - 11:23 #10
Der er sluppet præcis det igennem, som der står i spørgsmålet, altså med slashes, kantede paranteser osv. Nu har jeg prøvet selv at indsætte &#47 i et indlæg, men det skrives i DB præcis sådan og laves altså ikke om til slash? Så jeg er blank...
Avatar billede erikjacobsen Ekspert
20. juli 2009 - 11:37 #11
"....så må der være et problem et andet sted. "
Avatar billede Slettet bruger
19. august 2010 - 17:05 #12
svar
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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