anti bot

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 3 volgende »

Marcel Groot

Marcel Groot

06/11/2015 14:35:58
Quote Anchor link
Weet iemand een goede tutorial hoe zo'n anti bot veld kan maken?
 
PHP hulp

PHP hulp

22/12/2024 14:07:49
 
- Ariën  -
Beheerder

- Ariën -

06/11/2015 17:23:21
Quote Anchor link
Je kan een onzichtbare checkbox maken (display:hidden), en als die aangevinkt is wat bots altijd doen, dan stop je direct het script.

Daarnaast kan een captcha vaak helpen.
 
Pg Vincent

Pg Vincent

06/11/2015 17:39:50
Quote Anchor link
Quote:
Je kan een onzichtbare checkbox maken (display:hidden),


Trappen ze daar nog in?
 
- Ariën  -
Beheerder

- Ariën -

06/11/2015 17:49:07
Quote Anchor link
Ik merk van wel, en anders altijd een goede captcha.
 
Marcel Groot

Marcel Groot

08/11/2015 14:11:15
Quote Anchor link
Ik heb denk ik een goede captcha.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php session_start();

if(isset($_POST['Submit'])){
    // code for check server side validation
    if(empty($_SESSION['captcha_code'] ) || strcasecmp($_SESSION['captcha_code'], $_POST['captcha_code']) != 0){  
        $msg="<span style='color:red'>The Validation code does not match!</span>";// Captcha verification is incorrect.        
    }else{// Captcha verification is Correct. Final Code Execute here!        
        $msg="<span style='color:green'>The Validation code has been matched.</span>";        
    }
}
    
?>

  
  <form action="" method="post" name="form1" id="form1" >
  <table width="400" border="0" align="center" cellpadding="5" cellspacing="1" class="table">
    <?php if(isset($msg)){?>
    <tr>
      <td colspan="2" align="center" valign="top"><?php echo $msg;?></td>
    </tr>
    <?php } ?>
    <tr>
      <td align="right" valign="top"> Validation code:</td>
      <td><img src="captcha.php?rand=<?php echo rand();?>" id='captchaimg'><br>
        <label for='message'>Enter the code above here :</label>
        <br>
        <input id="captcha_code" name="captcha_code" type="text">
        <br>
        Can't read the image? click <a href='javascript: refreshCaptcha();'>here</a> to refresh.</td>
    </tr>
    <tr>
      <td> </td>
      <td><input name="Submit" type="submit" onclick="return validate();" value="Submit" class="button1"></td>
    </tr>
  </table>
</form>


Maar hoe zorg ik ervoor dat als de captcha is ingevuld dat daarna de form wordt verzonden>?
Ik dacht er eerst aan om de php hier in te zetten.
}else{// Captcha verification is Correct. Final Code Execute here!
$msg="<span style='color:green'>The Validation code has been matched.</span>";
} (regel 8)
Maar dat werkt niet.

Edit:
Code-tags toegevoegd. Gelieve deze voortaan zelf te plaatsen. Zie ook:
http://www.phphulp.nl/veel-gestelde-vragen/
Gewijzigd op 08/11/2015 15:12:24 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

08/11/2015 15:55:00
Quote Anchor link
Je if-statement leest alles behalve prettig. In plaats van te controleren of het niet zo is dat de captcha check niet goed is (dubbele ontkenning), kun je beter controleren of de captcha check wel goed is. In sommige gevallen levert een dubbele ontkenning ook niet het gewenste resultaat op (in dit geval geloof ik wel, maar het kost gewoon teveel moeite om dat te ontcijferen. Stel dat hier ergens een bug in zit, je wilt dit soort code toch niet gaan ontleden?).

Mits de code in captcha.php klopt zou het bovenstaande moeten werken, je zult wel direct de data in $_POST moeten verwerken, want deze is al verzonden naar de server bij het vorige request.

Ook lijkt het mij onwenselijk om output te produceren (een pagina weer te geven) terwijl je bezig bent met de verwerking van een formulier. Dit zorgt bijna altijd voor spaghetti-code (if-elseif-elseif-else constructies). Verwerk je formulier in een aparte (tussen)stap waarbij je:
- eerst je invoer filtert/valideert (kloppen alle gegevens)
- en (zoja) vervolgens het formulier verwerkt
- en (zonee) je het formulier opnieuw toont met een foutmelding
Indien filtering/validatie + opslag geslaagd is stuur je de gebruiker door naar een succespagina of (terug) naar een overzicht.

Gebruik bij voorkeur deze constructie.

Ariën noemde al een methode (dit wordt geloof ik een "honeypot" genoemd). Je kunt ook het omgekeerde doen: voeg met JavaScript een verplicht (onzichtbaar) veld toe waar je op controleert. Bestaat deze niet dan pech. Je verplicht hiermee de gebruiker wel om JavaScript ingeschakeld te hebben maar dat is tegenwoordig niet zo'n onredelijke eis.

En dan kun je nog een token toevoegen aan je formulier. Dit volgt min of meer hetzelfde principe als een CAPTCHA. Je genereert een random token wat je meestuurt als onzichtbaar formulier element, en tevens sla je deze op in je sessie. Na submitten leg je beide weer naast elkaar om te zien of ze gelijk zijn.

Deze sessie-data zou trouwens direct na gebruik meteen weer gewist moeten worden, anders kun je deze data (eindeloos) hergebruiken, en dat lijkt mij weer niet de bedoeling.
 
Marcel Groot

Marcel Groot

08/11/2015 17:33:02
Quote Anchor link
Ik denk dat ik snap wat je allemaal probeert uit te leggen, maar kun je niet een practice oplossing geven bijv naar een pagina of tut verwijzen?
 
DavY -

DavY -

08/11/2015 18:18:25
 
Marcel Groot

Marcel Groot

08/11/2015 18:59:39
Quote Anchor link
Ik snap hoe dat werkt, maar hoe verwerk ik erin als dat gedaan is dat mijn form dan pas wordt verzonden naar de database.
 
- Ariën  -
Beheerder

- Ariën -

08/11/2015 19:01:37
Quote Anchor link
Met isset() kijken of die checkbox ingevuld is. Zo ja, zet het ip op een blacklist en anders doe je je INSERT INTO.
 
Thomas van den Heuvel

Thomas van den Heuvel

08/11/2015 19:15:58
Quote Anchor link
@Marcel, je doet het tegelijkertijd, maar na elkaar :). In de "actie" waar je je formulier naartoe POST controleer je eerst de invoer, en dan besluit je -direct hierna, in dezelfde actie- wat je doet:
- alles OK, invoegen in database, na afloop doorverwijzen naar succespagina of overzicht
- niet alles OK, terug naar formulier

Waar loop je specifiek tegenaan? Je weet niet precies hoe de code voor deze gevallen er uit dient komen te zien?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

09/11/2015 18:51:03
Quote Anchor link
Thomas van den Heuvel op 08/11/2015 15:55:00:
Ariën noemde al een methode (dit wordt geloof ik een "honeypot" genoemd). Je kunt ook het omgekeerde doen: voeg met JavaScript een verplicht (onzichtbaar) veld toe waar je op controleert. Bestaat deze niet dan pech. Je verplicht hiermee de gebruiker wel om JavaScript ingeschakeld te hebben maar dat is tegenwoordig niet zo'n onredelijke eis.

Als je dan toch Javascript gebruikt kan je ook gewoon het gehele formulier inladen via AJAX, valt er voor een bot helemaal niets versturen ;-)
 

09/11/2015 20:27:29
Quote Anchor link
Uhm...
Ik denk dat het verbergen van velden een beetje achterhaald is.
Persoonlijk zou ik met AngularJS of jQuery een validatie laten lopen die bepaalde velden checkt.

Ook de php code zou ik laten valideren op velden.

Geen captcha gebruiken is velen maten vriendelijker en hoe meer validatie jij loslaat op bepaald velden, hoe minder bots erdoorheen komen.

Google heeft niet voor niets zijn REcaptcha veranderd ;)
 
Marcel Groot

Marcel Groot

10/11/2015 18:52:58
Quote Anchor link
Kun je mis voorbeelden sturen of een link naar een tutorial want ben nog niet zo gevorderd..:/
 
- Ariën  -
Beheerder

- Ariën -

10/11/2015 19:08:10
Quote Anchor link
Ik zou de veiligheid op bots meer via PHP laten gaan. Ik denk dat veel botjes niet browser-gestuurd werken, en daarbij dus controles van jQuery/AngularJS voorbij zullen gaan.

Een 'honeypot' lijkt mij de beste methode. Eventuele kan je Google Re-Captcha gebruiken. Deze gebruikt mooie algoritmes om te kijken of het netwerk van de bezoeker betrouwbaar is. Botnets maken dan grote kans om een lastige captcha voor hun kiezen te krijgen.
 
Marcel Groot

Marcel Groot

10/11/2015 19:13:58
Quote Anchor link
Maar mijn vraag was of er een voorbeeld of tutorial was over hoe je eerst de captcha checkt en dan daarna de form verzend naar de database
 
- Ariën  -
Beheerder

- Ariën -

10/11/2015 19:18:25
Quote Anchor link
Zie je vorige bericht. Daar staat vermeld waar je je code kan uitvoeren, die plaats moet vinden als de captcha gelukt is.

Laat anders eens zien wat je hebt geprobeerd.
 
DavY -

DavY -

10/11/2015 20:01:45
 
Marcel Groot

Marcel Groot

10/11/2015 20:47:26
Quote Anchor link
DavY - op 10/11/2015 20:01:45:


Dat snap ik maar eerst moet gecheckd worden of de captcha goed is ingevuld en dan mag het pas verzonden worden
Gewijzigd op 10/11/2015 20:48:51 door Marcel Groot
 
- Ariën  -
Beheerder

- Ariën -

10/11/2015 20:53:41
Quote Anchor link
Maar heb je al wat geprobeerd?
Er staat duidelijk 'Final Code Execute here!' in jouw geplaatste script. Dus daar kan je je afhandeling plaatsen.
 
Marcel Groot

Marcel Groot

10/11/2015 20:54:50
Quote Anchor link
Ja maar als ik het erin plaats krijg ik errors.
 

Pagina: 1 2 3 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.