Captcha simple

Captcha simple

Messagepar Rwan » Ven 03 Déc 2010, 20:26

Petit captcha très simple à mettre en place sur votre page contact en 4... ou 5 étapes.

Sur la racine de votre catalogue, faites une sauvegarde (dupliquez) de votre fichier contact_us.php en copie_contact_us.php
Editez-le et remplacez son contenu par :

Code: Tout sélectionner
<?php
/*
  $Id: contact_us.php,v 1.2 2005/05/21 08:31:38 manmachine Exp $
+-----------------------------------------------------------------------+
|                  osCSS Open Source E-commerce                         |
+-----------------------------------------------------------------------+
| Copyright (c) 2005 The osCSS developers                               |
|                                                                       |
| http://www.oscss.org                                       |
|                                                                       |
| Portions Copyright (c) 2003 osCommerce                                |
+-----------------------------------------------------------------------+
| This source file is subject to version 2.0 of the GPL license,        |
| available at the following url:                                       |
| http://www.oscss.org/license/2_0.txt.                      |
+-----------------------------------------------------------------------+
*/

  require('includes/application_top.php');

  require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_CONTACT_US);

// added for captcha
  // BEGIN - CAPTCHA Encryption Functionality
  $captcha_encryption_key = 'Y0uR StR0ng Pa33w0r4 KEyPHrAs3'; /* ICI VOTRE CLE A CHANGER !!! */

  function CAP_RC4($key, $data) {
    // To Encrypt - Call CAP_RC4 with key and plain text.
    // To Decrypt - Call CAP_RC4 with key and encrypted text.
    $key_length = strlen($key);
    for ($i = 0; $i < 255; $i++) {
      $key[$i] = ord(substr($key, ($i % $key_length)+1, 1));
      $counter[$i] = $i;
    }
    for ($i = 0; $i < 255; $i++) {
      $x = ($x + $counter[$i] + $key[$i]) % 256;
      $temp_swap = $counter[$i];
      $counter[$i] = $counter[$x];
      $counter[$x] = $temp_swap;
    }
    for ($i = 0; $i < strlen($data); $i++) {
      $a = ($a + 1) % 256;
      $j = ($j + $counter[$a]) % 256;
      $temp = $counter[$a];
      $counter[$a] = $counter[$j];
      $counter[$j] = $temp;
      $k = $counter[(($counter[$a] + $counter[$j]) % 256)];
      $Xcipher = ord(substr($data, $i, 1)) ^ $k;
      $Xcrypt .= chr($Xcipher);
    }
    return $Xcrypt;
  }

  function urlsafe_b64encode($string) {
    $data = base64_encode($string);
    $data = str_replace(array('+','/','='),array('-','_',''),$data);
    return $data;
  }

  function urlsafe_b64decode($string) {
    $data = str_replace(array('-','_'),array('+','/'),$string);
    $mod4 = strlen($data) % 4;
    if ($mod4) {
        $data .= substr('====', $mod4);
    }
    return base64_decode($data);
  }

  // END - CAPTCHA Encryption Functionality

  // remember set captcha
  // updated to work with register_globals on or off
  // updated to work with encryption
  if (isset($HTTP_POST_VARS['set_captcha'])) {
    $set_captcha = $HTTP_POST_VARS['set_captcha'];
    $decrypted_set_captcha = CAP_RC4($captcha_encryption_key, urlsafe_b64decode($set_captcha));
  } // end if
 
  // make the character array for captcha
  $chars = array();
  for ($i = 65; $i <= 90; $i++) $chars[] = chr($i);

  // generate values
  for ($i = 1; $i <= 6; $i++) { $key = rand(0, count($chars)-1); $text[$i] =  $chars[$key]; }
  $captcha = urlsafe_b64encode(CAP_RC4($captcha_encryption_key, ($text[1] . $text[2] . $text[3] . $text[4] . $text[5] . $text[6])));
 
  $error = false;
  $securitycode_error = false;

  //$error = false;
  //if (isset($_GET['action']) && ($_GET['action'] == 'send')) {<br />
  if (isset($HTTP_GET_VARS['action']) && ($HTTP_GET_VARS['action'] == 'send')) {
     
// Added for captcha

    $_POST['email'] = preg_replace( "/\n/", " ", $_POST['email'] );
    $_POST['phone'] = preg_replace( "/\n/", " ", $_POST['phone'] );
    $_POST['name'] = preg_replace( "/\n/", " ", $_POST['name'] );
    $_POST['email'] = preg_replace( "/\r/", " ", $_POST['email'] );
    $_POST['phone'] = preg_replace( "/\r/", " ", $_POST['phone'] );
    $_POST['name'] = preg_replace( "/\r/", " ", $_POST['name'] );
    $_POST['email'] = str_replace("Content-Type:","",$_POST['email']);
    $_POST['phone'] = str_replace("Content-Type:","",$_POST['phone']);
    $_POST['name'] = str_replace("Content-Type:","",$_POST['name']);

// End added

    $name = tep_db_prepare_input($_POST['name']);
    $email_address = tep_db_prepare_input($_POST['email']);
    $phone = tep_db_prepare_input($_POST['phone']);
    $enquiry = tep_db_prepare_input($_POST['enquiry']);
    $security = urlsafe_b64encode(CAP_RC4($captcha_encryption_key, (strtoupper(tep_db_prepare_input($_POST['security'])))));

// End changed

    if (strlen($name) < 7) {
      $error = true;

      $messageStack->add('contact', ERROR_NAME);
    }

// modif

    if (!tep_validate_email($email_address)) {
      $error = true;

      $messageStack->add('contact', ERROR_EMAIL);
    }
 
    if (strlen($phone) < 7) {
      $error = true;

      $messageStack->add('contact', ERROR_PHONE);
    }

    if (($set_captcha != $security) || (empty($security))) {
    $error = true;
    $securitycode_error = true;

      $messageStack->add('contact', ERROR_SECURITY);
    }
   
    // maintain the same security code
    // updated to work with encryption
    // note: this feature could be further secured because when
    //  a correct code is entered, further form errors will have
    //  both the encrypted code and the user entered plain text
    //  visual code in the hidden form data.  for this security
    //  application, user friendliness (this feature) and system
    //  compatibility (not using sessions) are more important
    //  than the questionable additional security/obscurity.
    if ($set_captcha == $security) {
      if (!empty($decrypted_set_captcha)) {
   $captcha = $set_captcha;
   $security = $decrypted_set_captcha;
      }
    }
   
    if ($error == false) {
      $email_subject = sprintf(EMAIL_SUBJECT, $name);
      $email_body = sprintf(EMAIL_INTRO, $name, $phone, $email_address) . "\n\n";

      if (tep_not_null($enquiry)) {
        $email_body .= $enquiry . "\n\n";
      }

      tep_mail(STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS, $email_subject, $email_body, $name, $email_address);

      tep_redirect(tep_href_link(FILENAME_CONTACT_US, 'action=success'));
    }
  }

// end added

  $breadcrumb->add(NAVBAR_TITLE, tep_href_link(FILENAME_CONTACT_US));

  $page_content = 'contact_us.php'; 
  require(DIR_WS_TEMPLATES . $template .'/'. TEMPLATE_FILE );
 
  require(DIR_WS_INCLUDES . 'application_bottom.php');
?>


Dans (catalogue)/includes/languages/french/contact_us.php

ajouter à la fin du fichier (avant ?>) :

Code: Tout sélectionner
// added by Rwan for captcha
define('EMAIL_INTRO','RECEPTION EMAIL PAGE CONTACT '. STORE_NAME);
define('ENTRY_PHONE','Votre n° de téléphone');
define('ENTRY_SECURITY', 'Code de sécurité :');
define('ERROR_SECURITY', 'Merci d\'entrer le code de sécurité valide comme indiqué');
define('ERROR_NAME','Vous devez entrer votre NOM et votre prénom');
define('ERROR_EMAIL','Vous devez entrer un email valide (ex. : mon.nom@fai.fr)');
define('ERROR_PHONE','Vous devez entrer un numéro de téléphone');


Créez le fichier captcha.php,
mettez-y le code suivant :

Code: Tout sélectionner
<?php

  // BEGIN - CAPTCHA Encryption Functionality
  $captcha_encryption_key = 'Y0uR StR0ng Pa33w0r4 KEyPHrAs3'; /* METTRE ICI LA MEME CLE QUE DANS CONTACT_US.PHP */

  function CAP_RC4($key, $data) {
    // To Encrypt - Call CAP_RC4 with key and plain text.
    // To Decrypt - Call CAP_RC4 with key and encrypted text.
    $key_length = strlen($key);
    for ($i = 0; $i < 255; $i++) {
      $key[$i] = ord(substr($key, ($i % $key_length)+1, 1));
      $counter[$i] = $i;
    }
    for ($i = 0; $i < 255; $i++) {
      $x = ($x + $counter[$i] + $key[$i]) % 256;
      $temp_swap = $counter[$i];
      $counter[$i] = $counter[$x];
      $counter[$x] = $temp_swap;
    }
    for ($i = 0; $i < strlen($data); $i++) {
      $a = ($a + 1) % 256;
      $j = ($j + $counter[$a]) % 256;
      $temp = $counter[$a];
      $counter[$a] = $counter[$j];
      $counter[$j] = $temp;
      $k = $counter[(($counter[$a] + $counter[$j]) % 256)];
      $Xcipher = ord(substr($data, $i, 1)) ^ $k;
      $Xcrypt .= chr($Xcipher);
    }
    return $Xcrypt;
  }

  function urlsafe_b64encode($string) {
    $data = base64_encode($string);
    $data = str_replace(array('+','/','='),array('-','_',''),$data);
    return $data;
  }

  function urlsafe_b64decode($string) {
    $data = str_replace(array('-','_'),array('+','/'),$string);
    $mod4 = strlen($data) % 4;
    if ($mod4) {
        $data .= substr('====', $mod4);
    }
    return base64_decode($data);
  }

  // END - CAPTCHA Encryption Functionality

  $code = CAP_RC4($captcha_encryption_key, urlsafe_b64decode($HTTP_GET_VARS['code']));
 
  for ($i = 1; $i <= 6; $i++) {
     $count = $i - 1;
     $text[$i] = $code{$count};
  }

  // create image
  $im = @imagecreate(70,25);
  $backgroundColor = imagecolorallocate($im,150,150,150);
  $textColor = imagecolorallocate($im,0,0,0);
  $lineColor = imagecolorallocate($im,100,100,100);
  imageline($im,0,0,23,25,$lineColor);
  imageline($im,23,0,46,25,$lineColor);
  imageline($im,46,0,69,25,$lineColor);
  imageline($im,0,25,70,0,$lineColor);
  imagestring($im, rand(4,5), 4, 2, $text[1], $textColor);
  imagestring($im, rand(4,5), 15, 8, $text[2], $textColor);
  imagestring($im, rand(4,5), 26, 5, $text[3], $textColor);
  imagestring($im, rand(4,5), 37, 8, $text[4], $textColor);
  imagestring($im, rand(4,5), 47, 1, $text[5], $textColor);
  imagestring($im, rand(4,5), 58, 6, $text[6], $textColor);
  imagepng($im);
  imagedestroy($im);
?> 


puis mettez le dans (catalogue)/images/ et appliquez un CHMOD755 sur ce fichier (important !)

Et hop ! un captcha tout beau tout simple !
OSCSS 1.2.1 - PHP Version 5.2.5-pl1-gentoo - MySQL 5.0.44-log
contribs :
captcha for contact_us.php, visitors v2.3a, featured products v1.1, Easypopulate 2.76g-ms2, quick updates v2.4, define mainpage v1.2, paiement Sips ATOS e-transaction Credit Agricole, paiement mandatorder v1.10, down for maintenance...
Rwan
Contributeurs
 
Messages: 29
Inscription: Mar 17 Juin 2008, 21:38

Re: Captcha simple

Messagepar oscim » Sam 04 Déc 2010, 00:09

merci de cette contrib :D
Pour un web au normes du W3C, pour un web plus propre !

- Download osCSS Toutes versions
- stable osCSS 2.1.0 (help|info|new dev) Official help|wiki|Tuto for osCSS 2 | doc doxygen
- Utiliser le tracker pour suivre les évolutions et développements
- Inscrivez vos sites sur oscss pour présenter vos réalisations
Avatar de l’utilisateur
oscim
Site Admin
 
Messages: 1643
Inscription: Mar 25 Sep 2007, 11:33

Captcha simple

Messagepar cynic- » Lun 06 Déc 2010, 19:30

Merci, houlà ça peut bien servir ça (saleté de spammeurs !!!) :P
cynic-
Site Admin
 
Messages: 694
Inscription: Mar 04 Déc 2007, 13:04

Re: Captcha simple

Messagepar barielh » Lun 18 Avr 2011, 18:44

Bonjour à tous.
Merci pour cette contribution, qui je pense intéressera beaucoup de monde.
J'ai juste une petite question, faut-il toucher au fichier contact_us.php dans le dossier content?
Quelles sont les modifications à y apporter pour que ce module fonctionne correctement.
Bonne fin de week
barielh
Membre inactif
 
Messages: 4
Inscription: Lun 21 Mar 2011, 16:36


Retourner vers Plugin

 


  • Articles en relation
    Réponses
    Vus
    Dernier message
  • CAPTCHA
    par pedrope » Sam 22 Aoû 2009, 04:08
    3 Réponses
    7656 Vus
    Dernier message par pedrope Voir le dernier message
    Ven 28 Aoû 2009, 18:27

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron