begin process at 2008 07 25 13:11:26
1 216 220 membres
184 nouveaux aujourd'hui
14 180 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

QUESTIONS ANTI FLOOD


Information sur la source



Description

c'est le genre de source qui demande aux utilisateurs combien font 2+2 pour leur permettre de passer, c'est pas parfait comme système, j'aime pas trop mon brouillage de sources html, mais j'ai pas le temps de faire mieux, et ça reste potable comparé à ce qui existe à coté...

Source

  • <?php
  • header('content-type: text/html; charset=utf8');
  • ?>
  • <html>
  • <head>
  • </head>
  • <body>
  • <?php
  • function int2str($a){
  • if ($a<0) return 'moins '.int2str(-$a);
  • if ($a<17){
  • switch ($a){
  • case 0: return 'zero';
  • case 1: return 'un';
  • case 2: return 'deux';
  • case 3: return 'trois';
  • case 4: return 'quatre';
  • case 5: return 'cinq';
  • case 6: return 'six';
  • case 7: return 'sept';
  • case 8: return 'huit';
  • case 9: return 'neuf';
  • case 10: return 'dix';
  • case 11: return 'onze';
  • case 12: return 'douze';
  • case 13: return 'treize';
  • case 14: return 'quatorze';
  • case 15: return 'quinze';
  • case 16: return 'seize';
  • }
  • }else if ($a<20){
  • return 'dix-'.int2str($a-10);
  • }else if ($a<100){
  • if ($a%10==0){
  • switch ($a){
  • case 20: return 'vingt';
  • case 30: return 'trente';
  • case 40: return 'quarente';
  • case 50: return 'cinquante';
  • case 60: return 'soixante';
  • case 70: return 'soixante-dix';
  • case 80: return 'quatrevingt';
  • case 90: return 'quatrexingt-dix';
  • }
  • }else if ($a<70){
  • return int2str($a-$a%10).' '.int2str($a%10);
  • }else if ($a<80){
  • return int2str(60).' '.int2str($a%20);
  • }else{
  • return int2str(80).' '.int2str($a%20);
  • }
  • }else if ($a==100){
  • return 'cent';
  • }else if ($a<200){
  • return int2str(100).' '.int2str($a%100);
  • }else if ($a<1000){
  • return int2str((int)($a/100)).' '.int2str(100).' '.int2str($a%100);
  • }
  • //on pourrait pousser pour aller plus loin, mais c'est sans interret pour ce projet, et pas interessant, c'est pas non plus compliqué...
  • }
  • function egal($a){
  • foreach ($a as $b)
  • return $b;
  • }
  • function fois($a){
  • $s=1;
  • foreach ($a as $b)
  • $s*=$b;
  • return $s;
  • }
  • function plus($a){
  • $s=0;
  • foreach ($a as $b)
  • $s+=$b;
  • return $s;
  • }
  • function randomInt($l){
  • return mt_rand(0, $l);
  • }
  • function randomString($length=5){
  • return substr(str_replace('0', 'o', strtolower(md5(microtime()))), 0, $length);
  • }
  • function randomVarName(){
  • $a=substr(str_replace('0', 'o', strtolower(md5(microtime()))), 0, 10);
  • while (intval($a)){
  • $a=substr($a, 1);
  • }
  • if ($a=='') return randomVarName();
  • return $a;
  • }
  • function randomCouleur(){
  • $r=mt_rand(1, 52);
  • $v=mt_rand(1, 52);
  • $b=mt_rand(1, 52);
  • $v1=mt_rand(0, 2);
  • $v2=mt_rand(0, 2);
  • $v3=mt_rand(0, 2);
  • $v4=mt_rand(0, 2);
  • $v5=mt_rand(0, 2);
  • if ($v1){
  • $r+=200;
  • }
  • if ($v2){
  • $b+=200;
  • }
  • if (!$v1 && !$v2){
  • $v+=200;
  • }
  • if ($v3){
  • $a=$b;
  • $b=$v;
  • $v=$a;
  • }
  • if ($v4){
  • $a=$b;
  • $b=$r;
  • $r=$a;
  • }
  • if ($v5){
  • $a=$r;
  • $r=$v;
  • $v=$a;
  • }
  • return $r.', '.$v.', '.$b;
  • }
  • function couleurproche($r, $v, $b){
  • $r+=mt_rand(-5, 10);
  • $v+=mt_rand(-5, 10);
  • $b+=mt_rand(-5, 10);
  • return $r.', '.$v.', '.$b;
  • }
  • function couleurde($couleur){
  • $couleur=egal($couleur);
  • list($r, $v, $b)=explode(', ', $couleur);
  • if ($r>200 && $v<200 && $b<200) return 'rouge';
  • if ($r<200 && $v>200 && $b<200) return 'vert';
  • if ($r<200 && $v<200 && $b>200) return 'bleu';
  • if ($r>200 && $v>200 && $b<200) return 'jaune';
  • if ($r>200 && $v<200 && $b>200) return 'violet';
  • if ($r<200 && $v>200 && $b>200) return 'bleu ciel';
  • return 'aucune idée';
  • }
  • function genquestion($tab, &$reponse){
  • $str=$tab[0];
  • $fnc=$tab[1];
  • unset($tab[1]);
  • unset($tab[0]);
  • $reponse=$fnc($tab);
  • $str=explode('%', $str);
  • $i=0;
  • $s='';
  • foreach ($tab as $a){
  • if (gettype($a)=='integer') $a=int2str($a);
  • if (!isset($str[$i+1])) return $s;
  • $s.=$str[$i].$a;
  • $i++;
  • }
  • return $s.$str[$i];
  • }
  • function leet5p34k($in){
  • return str_replace(array('o', 'O', 'i', 'I', 'l'), array('0', '0', '1', '1', '1'), $in);
  • }
  • function substringcount($str, $sub){
  • return count(explode($sub, ' '.$str.' '));
  • }
  • function upper_lower_1337_random($in){
  • $out='';
  • $length=strlen($in);
  • $pos=0;
  • $fnc=array(1=>'strtolower', 2=>'strtoupper', 3=>'leet5p34k');
  • $fncpos=1;
  • $inbalise=0;
  • $options=false;
  • while ($pos!==$length){
  • $add=mt_rand(0, 2);
  • $fncpos++;
  • if (!isset($fnc[$fncpos])) $fncpos=1;
  • if ($pos+$add>$length) $add=$length-$pos;
  • $part=substr($in, $pos, $add);
  • $inbalise+=substringcount($part, '<')+substringcount($part, '>');
  • if ($fncpos!=3 || $inbalise%2==0)$out.=$fnc[$fncpos]($part);
  • else $out.=$part;
  • $options=(strpos(substr($in, 0, $pos), '<option')!==false);
  • if ($inbalise%2==0 && mt_rand(0, 2) && !$options){
  • switch (mt_rand(0, 2)){
  • case 0:
  • $out.='<!--'.randomString().'-->';
  • break;
  • case 1:
  • $out.='<span style="color:rgb('.couleurproche(255, 255, 255).');display:none;">'.randomString().'</span>';
  • break;
  • case 2:
  • $out.='<span style="color:rgb('.couleurproche(255, 255, 255).');position:absolute;margin-top:-10em;">'.randomString(2).'</span>';
  • break;
  • }
  • }
  • $pos+=$add;
  • }
  • return $out;
  • }
  • function brouille($in, $brouille=false){
  • if ($brouille)$in=utf8_encode(upper_lower_1337_random(utf8_decode($in)));
  • $nom1=randomVarName();
  • $nom2=randomVarName();
  • $out='<div id="'.$nom2.'"></div><script type="text/javascript">
  • '.$nom1.'=\''.str_replace('\'', '\\\'', $in).'\'; //on pourrait même s\'amuser à crypter cette chaine, mais bon, il sest 02:42 heures du matin, donc, je vous laisses améliorer ce code si vous en avez besoin, mais moi je vais me coucher...
  • document.getElementById(\''.$nom2.'\').innerHTML='.$nom1.';
  • </script>';
  • return $out;
  • }
  • function questionrand(&$questions){
  • $a=$questions[array_rand($questions)];
  • $r=array();
  • foreach($a as $b=>$c){
  • if ($b<2){
  • $r[]=$c;
  • }else{
  • $r[]=$c[0]($c[1]); //Forme de pointeur sur fonction...
  • }
  • }
  • return $r;
  • }
  • function randomASSOC(&$assoc){
  • $keys=array();
  • $vals=array();
  • foreach($assoc as $key=>$val){
  • $keys[]=$key;
  • $vals[]=$val;
  • }
  • $i=count($keys);
  • for ($a=1;$a<$i;$a++){
  • $b=mt_rand(0,$a);
  • $c=$keys[$a];$keys[$a]=$keys[$b];$keys[$b]=$c;
  • $c=$vals[$a];$vals[$a]=$vals[$b];$vals[$b]=$c;
  • }
  • $assoc=array();
  • foreach ($keys as $k=>$key){
  • $assoc[$key]=$vals[$k];
  • }
  • $rand=mt_rand(0,3);
  • $assoc['result']=$vals[$rand];
  • return $keys[$rand];
  • }
  • function Fpos(&$a){
  • foreach($a as $b=>$c){
  • unset($a[$b]);
  • return '<option value="'.$c.'">'.$c.'</option>';
  • }
  • }
  • function associations($tab){
  • foreach ($tab as $v){
  • }
  • return $v['result'];
  • }
  • //DOIT comporter AU MOINS 4 personnes
  • $array_perso=array(
  • 'Claude François'=>'Un chanteur',
  • 'Jaque Chirac'=>'Un président de la république française',
  • 'Georges W. Bush'=>'Un président américain',
  • 'Bill Gates'=>'L\'homme le plus riche au monde',
  • 'Linus Torvald'=>'Le programmeur qui a commencé le kernel linux',
  • 'Larry Wall'=>'Le créateur du langage PERL');
  • $array_marques=array(
  • 'citroen'=>'voitures',
  • 'oncle ben\'s'=>'riz',
  • 'nescafé'=>'café',
  • 'intel'=>'processeurs',
  • 'optic 2000'=>'lunettes',
  • 'SFR'=>'téléphonie',
  • 'wanadoo'=>'internet');
  • $array_utilite=array(
  • 'casserolle'=>'faire cuire des aliments',
  • 'une souris'=>'Ã rien (sauf parfois, quand on invite des amis, faut qu\'ils puisse se servire du pc...)',
  • 'les lunettes'=>'Ã voir devant soi',
  • 'un appareil photo'=>'Ã imprimer sur du papier une trace de chaque moment',
  • 'les chaussures'=>'Ã ne pas avoir mal aux pieds',
  • 'un lit'=>'Ã dormir',
  • 'une écharpe'=>'à ne pas attraper froid');
  • $questions=array( //Pour plus de simplicité, des updates online simplifiées, on peut mettre ceci en sql...
  • array('Tapez en chiffres, le nombre suivant : <u><b>%</b></u> ?<input type="text" name="reponse">',
  • 'egal',array('randomInt', 1000)),
  • array('Combien font <u><b>%</b> plus <b>%</b></u> ?<input type="text" name="reponse">',
  • 'plus',array('randomInt', 200), array('randomInt', 200)),
  • array('Combien font <u><b>%</b> fois <b>%</b></u> ?<input type="text" name="reponse">',
  • 'fois', array('randomInt', 10), array('randomInt',10)),
  • array('retapez la chaine suivante : "%"<input type="text" name="reponse">', 'egal', array('randomString', 5)),
  • array('Quelle est cette <span style="background-color:rgb(%)">couleur</span> ?<select name="reponse"><option value="rouge">rouge</option><option value="vert">vert</option><option value="jaune">jaune</option><option value="bleu">bleu</option><option value="violet">violet (ou rose)</option><option value="bleu ciel">bleu ciel</option></select>',
  • 'couleurde', array('randomCouleur', 0)),
  • array('Qui (est/était) % ?<select name="reponse"> % % % %</select>',
  • 'associations',array('randomASSOC', &$array_perso), array('Fpos', &$array_perso),array('Fpos', &$array_perso), array('Fpos', &$array_perso), array('Fpos', &$array_perso), array('egal', array(&$array_perso))),
  • array('La marque % produit quelle type de chose ?<select name="reponse"> % % % %</select>',
  • 'associations',array('randomASSOC', &$array_marques), array('Fpos', &$array_marques),array('Fpos', &$array_marques), array('Fpos', &$array_marques), array('Fpos', &$array_marques), array('egal', array(&$array_marques))),
  • array('Quelle est l\'utilité d\'un(e) % ?<select name="reponse"> % % % %</select>',
  • 'associations',array('randomASSOC', &$array_utilite), array('Fpos', &$array_utilite),array('Fpos', &$array_utilite), array('Fpos', &$array_utilite), array('Fpos', &$array_utilite), array('egal', array(&$array_utilite)))
  • );
  • echo brouille(genquestion(questionrand($questions), $reponse));
  • echo '<hr />'.$reponse;
  • ?>
  • </body>
  • </html>
<?php
header('content-type: text/html; charset=utf8');
?>
<html>
<head>
</head>
<body>
<?php

function int2str($a){
	if ($a<0) return 'moins '.int2str(-$a);
	if ($a<17){
		switch ($a){
			case 0: return 'zero';
			case 1: return 'un';
			case 2: return 'deux';
			case 3: return 'trois';
			case 4: return 'quatre';
			case 5: return 'cinq';
			case 6: return 'six';
			case 7: return 'sept';
			case 8: return 'huit';
			case 9: return 'neuf';
			case 10: return 'dix';
			case 11: return 'onze';
			case 12: return 'douze';
			case 13: return 'treize';
			case 14: return 'quatorze';
			case 15: return 'quinze';
			case 16: return 'seize';
		}
	}else if ($a<20){
		return 'dix-'.int2str($a-10);
	}else if ($a<100){
		if ($a%10==0){
			switch ($a){
				case 20: return 'vingt';
				case 30: return 'trente';
				case 40: return 'quarente';
				case 50: return 'cinquante';
				case 60: return 'soixante';
				case 70: return 'soixante-dix';
				case 80: return 'quatrevingt';
				case 90: return 'quatrexingt-dix';
			}
		}else if ($a<70){
			return int2str($a-$a%10).' '.int2str($a%10);
		}else if ($a<80){
			return int2str(60).' '.int2str($a%20);
		}else{
			return int2str(80).' '.int2str($a%20);
		}
	}else if ($a==100){
		return 'cent';
	}else if ($a<200){
		return int2str(100).' '.int2str($a%100);
	}else if ($a<1000){
		return int2str((int)($a/100)).' '.int2str(100).' '.int2str($a%100);
	}
	//on pourrait pousser pour aller plus loin, mais c'est sans interret pour ce projet, et pas interessant, c'est pas non plus compliqué...
}

function egal($a){
	foreach ($a as $b)
		return $b;
}

function fois($a){
	$s=1;
	foreach ($a as $b)
		$s*=$b;
	return $s;
}

function plus($a){
	$s=0;
	foreach ($a as $b)
		$s+=$b;
	return $s;
}
function randomInt($l){
	return mt_rand(0, $l);
}

function randomString($length=5){
	return substr(str_replace('0', 'o', strtolower(md5(microtime()))), 0, $length);
}
function randomVarName(){
	$a=substr(str_replace('0', 'o', strtolower(md5(microtime()))), 0, 10);
	while (intval($a)){
		$a=substr($a, 1);
	}
	if ($a=='') return randomVarName();
	return $a;
}
function randomCouleur(){
	$r=mt_rand(1, 52);
	$v=mt_rand(1, 52);
	$b=mt_rand(1, 52);

	$v1=mt_rand(0, 2);
	$v2=mt_rand(0, 2);

	$v3=mt_rand(0, 2);
	$v4=mt_rand(0, 2);
	$v5=mt_rand(0, 2);
	if ($v1){
		$r+=200;
	}
	if ($v2){
		$b+=200;
	}
	if (!$v1 && !$v2){
		$v+=200;
	}
	if ($v3){
		$a=$b;
		$b=$v;
		$v=$a;
	}
	if ($v4){
		$a=$b;
		$b=$r;
		$r=$a;
	}
	if ($v5){
		$a=$r;
		$r=$v;
		$v=$a;
	}
	return $r.', '.$v.', '.$b;
}
function couleurproche($r, $v, $b){
	$r+=mt_rand(-5, 10);
	$v+=mt_rand(-5, 10);
	$b+=mt_rand(-5, 10);
	return $r.', '.$v.', '.$b;
}

function couleurde($couleur){
	$couleur=egal($couleur);
	list($r, $v, $b)=explode(', ', $couleur);
	if ($r>200 && $v<200 && $b<200) return 'rouge';
	if ($r<200 && $v>200 && $b<200) return 'vert';
	if ($r<200 && $v<200 && $b>200) return 'bleu';
	if ($r>200 && $v>200 && $b<200) return 'jaune';
	if ($r>200 && $v<200 && $b>200) return 'violet';
	if ($r<200 && $v>200 && $b>200) return 'bleu ciel';
	return 'aucune idée';
}
function genquestion($tab, &$reponse){
	$str=$tab[0];
	$fnc=$tab[1];
	unset($tab[1]);
	unset($tab[0]);
	$reponse=$fnc($tab);
	$str=explode('%', $str);
	$i=0;
	$s='';
	foreach ($tab as $a){
		if (gettype($a)=='integer') $a=int2str($a);
		if (!isset($str[$i+1])) return $s;
		$s.=$str[$i].$a;
		$i++;
	}
	return $s.$str[$i];
}

function leet5p34k($in){
	return str_replace(array('o', 'O', 'i', 'I', 'l'), array('0', '0', '1', '1', '1'), $in);
}
function substringcount($str, $sub){
	return count(explode($sub, ' '.$str.' '));
}
function upper_lower_1337_random($in){
	$out='';
	$length=strlen($in);
	$pos=0;
	$fnc=array(1=>'strtolower', 2=>'strtoupper', 3=>'leet5p34k');
	$fncpos=1;
	$inbalise=0;
	$options=false;
	while ($pos!==$length){
		$add=mt_rand(0, 2);
		$fncpos++;
		if (!isset($fnc[$fncpos])) $fncpos=1;
		if ($pos+$add>$length) $add=$length-$pos;
		$part=substr($in, $pos, $add);
		$inbalise+=substringcount($part, '<')+substringcount($part, '>');
		if ($fncpos!=3 || $inbalise%2==0)$out.=$fnc[$fncpos]($part);
		else $out.=$part;
		$options=(strpos(substr($in, 0, $pos), '<option')!==false);
		if ($inbalise%2==0 && mt_rand(0, 2) && !$options){
			switch (mt_rand(0, 2)){
				case 0:
					$out.='<!--'.randomString().'-->';
				break;
				case 1:
					$out.='<span style="color:rgb('.couleurproche(255, 255, 255).');display:none;">'.randomString().'</span>';
				break;
				case 2:
					$out.='<span style="color:rgb('.couleurproche(255, 255, 255).');position:absolute;margin-top:-10em;">'.randomString(2).'</span>';
				break;
			}
		}
		$pos+=$add;
	}
	return $out;
}
function brouille($in, $brouille=false){
	if ($brouille)$in=utf8_encode(upper_lower_1337_random(utf8_decode($in)));
	$nom1=randomVarName();
	$nom2=randomVarName();
	$out='<div id="'.$nom2.'"></div><script type="text/javascript">
		'.$nom1.'=\''.str_replace('\'', '\\\'', $in).'\';		//on pourrait même s\'amuser à crypter cette chaine, mais bon, il sest 02:42 heures du matin, donc, je vous laisses améliorer ce code si vous en avez besoin, mais moi je vais me coucher...
		document.getElementById(\''.$nom2.'\').innerHTML='.$nom1.';
	</script>';
	return $out;
}

function questionrand(&$questions){
	$a=$questions[array_rand($questions)];
	$r=array();
	foreach($a as $b=>$c){
		if ($b<2){
			$r[]=$c;
		}else{
			$r[]=$c[0]($c[1]);	//Forme de pointeur sur fonction...
		}
	}
	return $r;
}
function randomASSOC(&$assoc){
	$keys=array();
	$vals=array();
	foreach($assoc as $key=>$val){
		$keys[]=$key;
		$vals[]=$val;
	}
	$i=count($keys);
	for ($a=1;$a<$i;$a++){
		$b=mt_rand(0,$a);
		$c=$keys[$a];$keys[$a]=$keys[$b];$keys[$b]=$c;
		$c=$vals[$a];$vals[$a]=$vals[$b];$vals[$b]=$c;
	}
	$assoc=array();
	foreach ($keys as $k=>$key){
		$assoc[$key]=$vals[$k];
	}
	$rand=mt_rand(0,3);
	$assoc['result']=$vals[$rand];
	return $keys[$rand];
}
function Fpos(&$a){
	foreach($a as $b=>$c){
		unset($a[$b]);
		return '<option value="'.$c.'">'.$c.'</option>';
	}
}
function associations($tab){
	foreach ($tab as $v){
	}
	return $v['result'];
}
//DOIT comporter AU MOINS 4 personnes
$array_perso=array(
	'Claude François'=>'Un chanteur',
	'Jaque Chirac'=>'Un président de la république française',
	'Georges W. Bush'=>'Un président américain',
	'Bill Gates'=>'L\'homme le plus riche au monde',
	'Linus Torvald'=>'Le programmeur qui a commencé le kernel linux',
	'Larry Wall'=>'Le créateur du langage PERL');

$array_marques=array(
	'citroen'=>'voitures',
	'oncle ben\'s'=>'riz',
	'nescafé'=>'café',
	'intel'=>'processeurs',
	'optic 2000'=>'lunettes',
	'SFR'=>'téléphonie',
	'wanadoo'=>'internet');

$array_utilite=array(
	'casserolle'=>'faire cuire des aliments',
	'une souris'=>'Ã  rien (sauf parfois, quand on invite des amis, faut qu\'ils puisse se servire du pc...)',
	'les lunettes'=>'Ã  voir devant soi',
	'un appareil photo'=>'Ã  imprimer sur du papier une trace de chaque moment',
	'les chaussures'=>'Ã  ne pas avoir mal aux pieds',
	'un lit'=>'Ã  dormir',
	'une écharpe'=>'à ne pas attraper froid');

$questions=array(		//Pour plus de simplicité, des updates online simplifiées, on peut mettre ceci en sql...
	array('Tapez en chiffres, le nombre suivant : <u><b>%</b></u> ?<input type="text" name="reponse">',
		'egal',array('randomInt', 1000)),

	array('Combien font <u><b>%</b> plus <b>%</b></u> ?<input type="text" name="reponse">',
		'plus',array('randomInt', 200), array('randomInt', 200)),

	array('Combien font <u><b>%</b> fois <b>%</b></u> ?<input type="text" name="reponse">',
		'fois', array('randomInt', 10), array('randomInt',10)),

	array('retapez la chaine suivante : "%"<input type="text" name="reponse">', 'egal', array('randomString', 5)),

	array('Quelle est cette <span style="background-color:rgb(%)">couleur</span> ?<select name="reponse"><option value="rouge">rouge</option><option value="vert">vert</option><option value="jaune">jaune</option><option value="bleu">bleu</option><option value="violet">violet (ou rose)</option><option value="bleu ciel">bleu ciel</option></select>',
		'couleurde', array('randomCouleur', 0)),

	array('Qui (est/était) % ?<select name="reponse"> % % % %</select>',
		'associations',array('randomASSOC', &$array_perso), array('Fpos', &$array_perso),array('Fpos', &$array_perso), array('Fpos', &$array_perso), array('Fpos', &$array_perso), array('egal', array(&$array_perso))),

	array('La marque % produit quelle type de chose ?<select name="reponse"> % % % %</select>',
		'associations',array('randomASSOC', &$array_marques), array('Fpos', &$array_marques),array('Fpos', &$array_marques), array('Fpos', &$array_marques), array('Fpos', &$array_marques), array('egal', array(&$array_marques))),

	array('Quelle est l\'utilité d\'un(e) % ?<select name="reponse"> % % % %</select>',
		'associations',array('randomASSOC', &$array_utilite), array('Fpos', &$array_utilite),array('Fpos', &$array_utilite), array('Fpos', &$array_utilite), array('Fpos', &$array_utilite), array('egal', array(&$array_utilite)))
);

echo brouille(genquestion(questionrand($questions), $reponse));
echo '<hr />'.$reponse;

?>
</body>
</html>
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

  • signaler à un administrateur
    Commentaire de codefalse le 24/01/2007 22:17:02 administrateur CS

    Bien que ton idée est sympa j'ai pas tout compris et je la trouve très longue pour quelque chose qui pourrait être plus simple... enfin je pense.
    Dans l'idée, tu applique les variable 1 = un, 2 = deux, etc..
    ensuite tu fait le calcul correspondant (en algo : mavar = key(a) + key(b)) que l'on met dans un cookie, ensuite on affiche "mettez le résultat de ".value(a)." plus ".value(b)." : ";

    et dans la réception du formulaire on compare les résultats.
    Ca me semble carrément plus simple à mettre en oeuvre non ?
    Après, cette idée là est pour empecher les moteurs de gerer le formulaire.
    Pour une histoire d'antiflood, tu met une variable en cookie avec une durée de x minutes, et tant qu'elle existe, impossible de re-valider le formulaire.

    Non ?

  • signaler à un administrateur
    Commentaire de wizad le 25/01/2007 10:08:14

    et à ton avis un hacker créant un robot ne pensera-t-il pas à virer les coockies entre chaque tentative (ce qui est assez simple)?

    Par contre j'ai pas bien pigé le coup du javascript étant donné que la question reste en clair dans le fichier (oui je sait que tu avais pas la force de faire le cryptage)...

    Je n'ai pas non plus saisie l'utilité de tes deux fonctions sur les couleurs.

    Sinon sur le système en lui même bien qu'intérréssant par la variété des questions, il est dommage que certaine question soit un peu compliqué (pour les internautes) et voire un peu trop  porté sur une culture nationale ou informatique nécéssaire (Je suis pas sur que tous les internautes connaissent Linus Torvald et Larry Wall.

    Ni que des québecois ne connaissent Optic 2000 (encore que le nom est plutot explicite).

  • signaler à un administrateur
    Commentaire de codefalse le 25/01/2007 12:07:10 administrateur CS

    Wizad, ton post était pour moi ou la source ? (quand tu parle de cookie) ? :)

  • signaler à un administrateur
    Commentaire de wizad le 25/01/2007 18:57:39

    quand je parle du coockie s'était pour toi ;)

  • signaler à un administrateur
    Commentaire de codefalse le 25/01/2007 19:59:39 administrateur CS

    alors justement, si le "hacker" dégage le cookie, le code ne marche plus ! donc il ne pourra pas mettre les données

    .. sauf si j'ai pas compris ton idée

    bon, on contraire, s'il arrive à récuperer le cookie, c'est mort, maintenant faut savoir de 1 que ca passe par cookie, et etre tres motivé pour faire un script qui gere ca ...
    en effet, le but c'est de faire une formulaire externe qui pointe sur la page de post du script en cours (page dans le action du form) hors, si on genere un cookie pour récuperer la valeur, faudra savoir quel calcul faire et quel est le résultat, donc charger la page du formulaire pour avoir ces infos + la page de post pour mettre ces infos : c'est carrément plus chiant

  • signaler à un administrateur
    Commentaire de wizad le 25/01/2007 20:47:28

    Dans ton exemple (1er coms) : une fois le form validé, le site envoi un cockie indiquant que le formulaire à déja été soumis et ne peut donc être resoumis.

    Ainsi si le coockie est supprimé on peut à nouveau soumettre le formulaire.

    Ensuite tu me parle de formulaire externe. Généralement les hackers (floodeur) les plus courants passent par un script type bot configuré en fonction d'un ou plusieur site cible afin d'envoyer un trés grand nombre de requetes HTTP similaire à la requète qu'effectuerais un navigateur lors de l'envoie du formulaire.

    La technique de site externe dont tu fait allusion est justement utilisé pour contourner les méthodes de sécurité (Et le coockie ne l'empêchera pas). Cette technique se base généralement sur une inscription sur un site différent mais recopiant le système de sécurité anti-bots du site à flooder. Lorsque les utilisateurs s'inscrivent en passant le système de sécuriter cela active l'inscription bidon sur le site visé (j'ai pris l'inscription comme cible mais tout formulare peut être visé).

  • signaler à un administrateur
    Commentaire de codefalse le 25/01/2007 21:40:03 administrateur CS

    autant pour moi
    en fait j'ai mélangé deux sources ou je poste des commentaires, donc je me suis un peu emmelé les pinceaux pour les commentaires :)
    tu a tout a fait raison, si le cookie est la pour bloquer, ca ira pas si c'est un bot qui l'utilise

    bon apres il existe diverses autres méthodes plus utiles les unes aux autres (utilisation de bdd par exemple) en sachant que de toute facon, dans l'absolu, il y aura toujours moyen de contourner la protection :)

  • signaler à un administrateur
    Commentaire de coucou747 le 27/01/2007 14:23:43

    les cookies, ça ne peut pas marcher... sinon, je n'utilise pas ce code, donc, les questions, c'est sorti comme ça... c'était ce à quoi je pensais sur le moment, "à quoi sert une casserole ou un aspirateur ?" c'est du au fait que je dois ranger ma chambre, et que je me fais ma bouffe seul maintenant :=)

  • signaler à un administrateur
    Commentaire de Kirua le 27/01/2007 17:56:48

    Hmm, le cookie c'est juste un champ à passer dans l'en-tête de la requête HTTP. Pour quelqu'un qui code son propre flooder en C++ ou en PHP par exemple, en construisant et en émettant la requête HTTP lui-même, c'est facile de mettre tout ce que tu veux dans ce champ, et donc de simuler un cookie ad hoc, sans utiliser les fonctions de l'API Win32 pour la manip des cookies, par exemple (ce qui est over chiant).

    Ce serait pas plus facile d'avoir un tableau $nums = {'zéro', 'un', 'deux' ...}; que ton énorme switch?

    De mon point de vue, écrire un grand nombre de questions ne te protège pas du flood: ces questions, tu les écriras tjs à la main: ton courage à la rédaction sera toujours battable par la patience de celui qui les répertoriera manuellement ;). Il vaut mieux, AMHA, ne considérer que les tests générés de manière automatique. De ce point de vue, les calculs à résoudre sont une bonne idée, mais écrire "plus" plutôt que "+" ne change en rien la difficulté pour le hacker. Ecrire un interpréteur arithmétique est franchement aisé quand on a compris le truc: pas efficace.

    En toutes hypothèses, il faut se poser la question suivante: est-ce qu'on veut se prémunir d'une attaque ciblée, ou des attaques "crawler" ? Pour les crawler, c'est facile: il suffit de penser à un système qui détecte le fait que le formulaire a été rempli dans le navigateur web (par opposition aux requêtes GET et POST émises par un programme sans passer par la page web de soumission). Je dis pas ça juste en l'air: je l'ai fait pour un de mes livres d'or qui avait bouffé 25000 spams: plus rien n'est passé, en 4-5 lignes de JS / HTML. L'idée de base est consternante de simplicité: une action de l'utilisateur sur un des champs déclenche un mini javascript qui rempli un champ "hidden" du formulaire. A la réception, on vérifie la valeur. Un crawler ne va certainement pas exécuter le javascript -> il ne passera pas. Même pas la peine d'implémenter un CAPTCHA.

    Mais les attaques ciblées, c'est franchement plus dur: le pirate comprendra l'astuce tout de suite. Et rendre les choses plus compliquées avec des images etc ne réduira que le nombre de programmeurs capables de passer les tests. C'est une question plus intéressante ^^.

  • signaler à un administrateur
    Commentaire de Kirua le 27/01/2007 18:08:46

    Maintenant que j'y pense, ce qu'on cherche fondamentalement, c'est un problème dont on puisse construire un très grand nombre d'occurrences différentes de manière systématique, donc la réponse soit donnée par le mécanisme de construction (ie: quand on génère le problème, on a ou on définit sa solution dans la foulée) mais dont la résolution systématique "à coup sûr" (une seule chance de répondre) soit impossible (enfin, l'impossibilité, c'est pour le but ultime ^^). Et on a une constrainte de plus ici: on voudrait que toutes les informations ne soient que du texte / des chiffres (par opposition aux captchas "images"). Evidemment, la résolution du problème doit être rapide et aisée pour un humain moyennement débile (c'est la condition de base ^^).

    C'est franchement pas facile ^^. Mais on peut déjà penser que, vu la façon dont le problème est reformulé ici, tout captcha doit (devrait) partir de la réponse attendue. On peut donc se donner un nombre ou un mot, et tenter de construire une question dont ce soit la réponse, tout en rendant difficile le travail inverse pour une machine ...

    Ce sujet est génial :D

  • signaler à un administrateur
    Commentaire de wizad le 27/01/2007 19:33:33

    ce sujet est effectivement des plus intérréssant et mériterais presque un bon débat sur un forum.

    Pour ton idée de javascript Kirua c'est vrai que l'idée est bonne mets néammoins cela poserais un problèmes sérieux pour les navigateur n'implémentant pas le javascript comme cela peut être la cas pour certains navigateurs destinés aux personnes ayant un handicap.

  • signaler à un administrateur
    Commentaire de Kirua le 27/01/2007 23:08:26

    J'ai réfléchi quelques minutes, mais je ne vois pas de façon simple ni efficace de réaliser la chose sans JS ... Quelqu'un a une idée? Je ne fais plus de dev web (ni de dev tt court ^^) depuis trop longtemps ... Perdu la souplesse et l'imaginativité des workaround ;).

  • signaler à un administrateur
    Commentaire de coucou747 le 29/01/2007 10:42:59

    "Et rendre les choses plus compliquées avec des images etc ne réduira que le nombre de programmeurs capables de passer les tests"=> personellement, je penses que la patience peut le réduire suffisement... le but de toute sécurité est de réduire ce nombre...

    on pourrait dire que chaque solution est mauvaise : mettre l'ip en bdd et interdire une ip de poster plus de 3 messages par jours, ça pénalise les entreprises, écoles ou autres groupes de gens derière une seule ip, et tor permet d'avoir plein d'ips...

    le javascript n'est pas supporté partout.

    les images ne sont pas disponibles aux mal voyants.

    les wav ne sont pas disponibles aux gens qui n'ont pas de son, et pour ceux qui écoutent déjà de la musique, c'est chiant (mais moins, je l'accorde).

    et enfin, là, pour une attaque ciblée, ça tient au fait que l'attaquant soit patient (comme toute attaque non ?)

    kirua abandonne le dev... toi qui m'a tant appris sur le C... enfin bon, t'as fait ton choix, personellement, je trouve que c'est un énorme gachis...

  • signaler à un administrateur
    Commentaire de Kirua le 29/01/2007 21:12:48

    Question de temps essentiellement :/. Mais on se verra à prologin :) (enfin, sous réserve de).

    Ceci dit, je reviens quand même sur ta façon d'écrire les nombres entiers en toutes lettres: je suis certain que tu peux échanger avantageusement tes switch pour des tableaux.

  • signaler à un administrateur
    Commentaire de coucou747 le 30/01/2007 16:50:58

    possible pour le switch... faudrait bencher...

  • signaler à un administrateur
    Commentaire de Kirua le 30/01/2007 19:20:27

    c'est tout vu: complexité O(1) contre O(n), et en plus en interprêté, du code court c'est tjs une bonne idée.

  • signaler à un administrateur
    Commentaire de coucou747 le 31/01/2007 13:16:27

    pour n=13, un algo en 100*1 ou en 4*n, c'est pas forcément judicieux...

  • signaler à un administrateur
    Commentaire de Kirua le 31/01/2007 13:21:05

    Non mais je suis assez sur de mon coup ;) Et les constantes seront comparables dans ce cas.

  • signaler à un administrateur
    Commentaire de coucou747 le 31/01/2007 13:23:06

    faudrait voir... un sqort contre un tri à bulles, le qsort ne gagne pas pour les petites listes (si je me souviens bien...)

  • signaler à un administrateur
    Commentaire de Kirua le 31/01/2007 13:28:27

    Je sais bien, mais ce n'est pas la question: dans ce cas particulier, ça paraît franchement raisonnable d'opter pour le cas O(1). Du reste, dans la mesure ou ça changera d'une µs, autant prendre la version la plus courte et la plus claire. La plus simple à maintenir et à lire, etc. ici, tu as plein de cas assez particuliers, que tu peux éviter simplement avec un tableau défini dans les bonnes bornes.

  • signaler à un administrateur
    Commentaire de ekremyilmaz le 13/07/2007 11:47:08

    tu affiche la réponse en bas ?
    est ce grave ou on peut laisser pour donner à l'utilisateur de répondre plus rapidement.

  • signaler à un administrateur
    Commentaire de coucou747 le 13/07/2007 11:53:54

    ... j'ai fait un tas de fonctions, c'est a toi de faire les appels comme bon te semble (en mettant les resultats en session pour verification apres le post...)

  • signaler à un administrateur
    Commentaire de ekremyilmaz le 23/08/2007 00:05:54

    j'ai remarqué un truc bizarre.
    dans les question à chiffre, parfois aucun chiffre n'apparait, exemple taper le chiffre ? et meme dans les opération 1* = ?
    a ton avis ça vient de la fonction randomint ?

Ajouter un commentaire

Pub



Appels d'offres

Animation Flash alimen...
Budget : 6 000€
Creation portail video
Budget : 3 000€
Site de e-commerce
Budget : 5 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Boutique

Boutique de goodies CodeS-SourceS