Analyse des Ports d'une Machine
[hr]
Analyse d'une String
Anti registrer globals
[hr]
Create_archive
[hr]
Ralentir le téléchargement d'un fichier
[hr]
Limiter les utilisateurs
[hr]
Parcours file
[hr]
Redimensionnement image
[hr]
search_erase_in_array
[hr]
Strip_accents
[hr]
TRAVAIL D'UNE APREM entière (a cause de utf-8/ISO et mb_...) mais franchement elle valait le coup
Analyse d'une chaîne de caractères (attention le traitement est long, environ 1s pour 3000 caractères, avec une marque, sinon en vrai c'est plutot le double :blush: )
(Cette fonction devrais être native maintenant )
Je vais bientot faire un script de génération de captcha, alors je cherche à faire quelque chose de simple pour un humain, mais difficile pour un robot (utopie? )
Bref, pour le moment, ça serais un captcha avec 3 images, dont une en display:none, gif animé faiblement, avec quelques trais et petits caractères en fond
J'ai trouver quelques liens sympa =D
http://www.tutomania.com/Blog-de-Igixcs.html#b-651
http://theclemsweb.free.fr/index.php...ots-&article=8
Voilà ma fonction php terminée
(si quelqu'un sait pourquoi il faut ABSOLUMENT passer un argument, je suis interessé...)
Autre fonction que je viens de terminer
Un script de bannisement d'ip, qui utilise une base sql pour faciliter les levés de ban automatiques mais qui possede un systeme de blacklist.txt =D Et le mieux, c'est qu'il gere parfaitement les plages d'ip Il suffit simplement de mettre une ligne sans mettre le point à la fin (genre 154.30)
EDIT: J'ai corriger (j'aime toujours chercher plus loin et améliorer ) désormais si vous metter un point et rien derrière, ça marche aussi
[hr]
Anti dos (très simpliste, inutile, mais indispensable )
Je devrais vous faire payer pour de telles fonctions
admirez celle-là (et surtout l'inutilité ^^' )
minifier du code (j'ai testé du css, pas du js encore..)
C'est pas vraiment une fonction car il y a deux bout
Tout en haut du fichier :
Et en bas :
Ok d'accord, c'est tout con mais ça fait gagner un peu peu encore FAITES ATTENTION aux commentaire sur une ligne!!!!! comme le code à la fin n'as qu'une seule ligne, ça fout en l'air votre code... (en css ça existe pas les // ou #, en js je croit me souvenir que c'est pareil, mais bon... je préfère le dire )
Petit code pour faire des logs avec firephp
$_VAR['core']['01']['time_start'] est une variable que je crée au début de ma page
Include sécurisé
Envie de te prendre comme youtube ? Installe ce script (attention il consomme beaucoup de cpu à cause de GD mais j'ai fait ce script pour quelqu'un qui voulait une image, pas du css d'aileurs en css c'est peut-etre plus compliqué qu'il n'y parait ) Je vais essayer de l'améliorer en pouvant changer la taille dynamiquement ou de mettre autant de colonnes, avec des indicateurs de nombre, un copyright nan je rigole pour le dernier : )
Code:
<?php namespace core_01; function analyse_ports($host=null,$min_port=null,$max_port=null,$print=null) { /* Version 1.0 Cette fonction "Analyse des Ports d'une Machine" possede 4 parametres: OGLIGATOIRE : le 1er est l'hote que l'on veut tester. FACULTATIF : le 2eme est le port minimun que l'on veut tester (par default 1) FACULTATIF : le 3eme est le port maximun que l'on veut tester (par default du 2eme parametre) (donc un seul port est tester) FACULTATIF : le 4eme définit l'affichage (par default rien ne seras affichés) (1 correspond aux ports fermes et 2 correspond aux ports ouverts et 3 à tous les ports ;) ) /!\ note : Si ni le 2eme, ni le 3eme paramètre est passer, alors tous les ports seront analysers! (malgrer ce que pourrais faire croire les phrases en haut ;) ) Exemple d'appel : analyse_port('127.0.0.1',80,120,2); afficheras les ports ouverts sur 127.0.0.1 allant de 80 à 120 ;) Elle retourne un array à deux dimensions $result['open_ports'][] et $result['close_ports'][] */ global $_VAR;global $_TEXT; $result=null; if($host!=null) { $host=htmlspecialchars($host); if(filter_var(gethostbyname($host), FILTER_VALIDATE_IP)) { if($min_port==null&&$max_port==null) { $min_port=1; $max_port=65536; } if(is_numeric($min_port)&&$min_port>=1&&$min_port<=65536) { $min_port=intval($min_port); if($max_port==null) { $max_port=$min_port; } if(is_numeric($max_port)&&$max_port>=1&&$max_port<=65536&&$max_port>=$min_port) { $max_port=intval($max_port); if($print==null||$print==1||$print==2||$print==3) { for($min_port=$min_port;$min_port<=$max_port;$min_port++) { if (@fsockopen($host,$min_port)) { $result['open_port'][]=$min_port; } else { $result['close_port'][]=$min_port; } } if($print==1) { foreach($result['close_port'] as $key=>$value) { echo 'port ',$value,' is close at ',$host,'<br />'; } } elseif($print==2) { foreach($result['open_port'] as $key=>$value) { echo 'port ',$value,' is open at ',$host,'<br />'; } } elseif($print==3) { $test_1=array_flip($result['close_port']); foreach($test_1 as $key=>$value) { $test_1[$key]='close'; } $test_2=array_flip($result['open_port']); foreach($test_2 as $key=>$value) { $test_2[$key]='open'; } $test=$test_1+$test_2; ksort($test); foreach($test as $key=>$value) { echo 'port ',$key,' is ',$value,' at ',$host,'<br />'; } } } else { echo 'error in function analyse_port : false parameter print!'; return false; } } else { echo 'error in function analyse_port : false parameter max_port!'; return false; } } else { echo 'error in function analyse_port : false parameter min_port!'; return false; } } else { echo 'error in function analyse_port : false host!'; return false; } } else { echo 'error in function analyse_port : false parameter host!'; return false; } return $result; }
Analyse d'une String
Code:
<?php function analyse_string($text,$strlen=true,$str_word_count=true,$caracteres_str_word_count=true,$analyse=true,$taux_doublons=true,$grey_list=true,$black_list=true) { /* Version 1.0 Cette fonction "Analyse d'une chaine de Caractère" possede 8 parametres: OGLIGATOIRE : le 1er est la string que l'on veut analyser. FACULTATIF : le 2eme indique si on veut calculer la longueur de la string FACULTATIF : le 3eme indique si on veut calculer le nombre de mot de la string FACULTATIF : le 4eme indique si on veut calculer le nombre de caractères par mot de la string FACULTATIF : le 5eme indique si on veut analyser la string ( /!\ Attention le traitement est long!!! /!\ ) FACULTATIF : le 6eme indique si on veut calculer le taux de doublons des caractères de la string (détecter les aa, bb, ccc.... ) FACULTATIF : le 7eme indique si on veut calculer le nombre de mot censuré contenu dans la string FACULTATIF : le 8eme indique si on veut calculer le nombre de mot ressemblant à la liste de censure de la string ( /!\ Attention beaucoup de mot peuvent mettre trouver à tort ;) /!\ ) Par défault, tout les test serons effectués Exemple d'appel : analyse_string('Cec1 esttt un te$t!! SUPER regarde les stats :p'); renveras un array d'informations sur la sting :) Elle retourne un array contenant : [minuscules_sans_accents] [minuscules_avec_accents] [majuscules_sans_accents] [majuscules_avec_accents] [ponctuation] [nombres] [espace] [autre] [taux_doublons] [grey_list] [black_list] [strlen] [str_word_count] [caracteres_str_word_count] */ $minuscules_sans_accents='abcdefghijklmnopqrstuvwxyz'; $minuscules_avec_accents='áàâäãåçéèêëíìîïñóòôöõúùûüýÿ'; $majuscules_sans_accents=strtoupper($minuscules_sans_accents); $majuscules_avec_accents='ÁÀÂÄÃÅÇÉÈÊËÍÏÎÌÑÓÒÔÖÕÚÙÛÜÝ'; $ponctuation=',?;.:!'; $nombres='0123456789'; $list_censured=array(); $file=$_SERVER['DOCUMENT_ROOT'].'/papers/setting/censured.txt'; if($file!=null) { if(is_file($file)) { $file_open = fopen($file, 'r'); while (!feof($file_open)) { $line=trim(fgets($file_open)); if($line!=null) { $list_censured[]=$line; } } fclose($file_open); } else { echo 'error in function analyse_string : ',htmlentities($file).' is not file!'; return false; } } else { echo 'error in function analyse_string : any specified file!'; return false; } $resultats['minuscules_sans_accents']=0; $resultats['minuscules_avec_accents']=0; $resultats['majuscules_sans_accents']=0; $resultats['majuscules_avec_accents']=0; $resultats['ponctuation']=0; $resultats['nombres']=0; $resultats['espace']=0; $resultats['autre']=0; $resultats['taux_doublons']=0; $resultats['grey_list']=0; $resultats['black_list']=0; if($strlen==true) { $resultats['strlen']=mb_strlen($text); } else { $resultats['strlen']='not'; } if($str_word_count==true) { //cette technique marche pas vraiment avec utf-8 :( //$resultats['str_word_count']=str_word_count($text); //voilà la mienne (bourrin... :p) $resultats['str_word_count']=substr_count($text,' ')+1; } else { $resultats['str_word_count']='not'; } if($caracteres_str_word_count==true) { $resultats['caracteres_str_word_count']=(mb_strlen($text)-substr_count($text,' '))/(substr_count($text,' ')+1); } else { $resultats['caracteres_str_word_count']='not'; } if($analyse==true) { $b=mb_strlen($text); for($a=0;$a<$b;$a++) { $carac=mb_substr($text,$a,1); //ceci sont d'autres façon de faire, mais mal adapter ou depreceted //if(substr_count($minuscules_sans_accents,$carac)>=1) //if(ereg($carac,$minuscules_sans_accents)) if (strpos($minuscules_sans_accents,$carac)) { $resultats['minuscules_sans_accents']++; } elseif (strpos($minuscules_avec_accents,$carac)) { $resultats['minuscules_avec_accents']++; } elseif (strpos($majuscules_sans_accents,$carac)) { $resultats['majuscules_sans_accents']++; } elseif (strpos($majuscules_avec_accents,$carac)) { $resultats['majuscules_avec_accents']++; } elseif (strpos($ponctuation,$carac)) { $resultats['ponctuation']++; } elseif (strpos($nombres,$carac)) { $resultats['nombres']++; } elseif($carac==' ') { $resultats['espace']++; } else { $resultats['autre']++; } } } else { $resultats['minuscules_sans_accents']='not'; $resultats['minuscules_avec_accents']='not'; $resultats['majuscules_sans_accents']='not'; $resultats['majuscules_avec_accents']='not'; $resultats['ponctuation']='not'; $resultats['nombres']='not'; $resultats['espace']='not'; $resultats['autre']='not'; } if($taux_doublons==true) { $liste=$minuscules_sans_accents.$minuscules_avec_accents.$majuscules_sans_accents. $majuscules_avec_accents.$ponctuation.$nombres; $b=mb_strlen($liste); $nombre=0; for($a=0;$a<$b;$a++) { $nombre+=substr_count($text,mb_substr($liste,$a,1).mb_substr($liste,$a,1)); } $resultats['taux_doublons']=$nombre/mb_strlen($text); } else { $resultats['taux_doublons']='not'; } if($grey_list==true) { foreach($list_censured as $cle=>$valeur) { $resultats['grey_list']++; } } else { $resultats['nbr_grey_list']='not'; } if($black_list==true) { $mots=explode(' ',$text); foreach($mots as $cle1=>$valeur1) { foreach($list_censured as $cle2=>$valeur2) { if(levenshtein($valeur1,$valeur2)<=2) { $resultats['black_list']++; } } } } else { $resultats['black_list']='not'; } return $resultats; }
Code:
<?php function anti_register_globals() { if (ini_get('register_globals')) { foreach($GLOBALS as $s_variable_name => $m_variable_value) { if (!in_array($s_variable_name, array('GLOBALS', 'argv', 'argc', '_FILES', '_COOKIE', '_POST', '_GET', '_SERVER', '_ENV', '_SESSION', 's_variable_name', 'm_variable_value'))) { unset($GLOBALS[$s_variable_name]); } } unset($GLOBALS['s_variable_name']); unset($GLOBALS['m_variable_value']); } }
Create_archive
Code:
<?php function create_archive($repertory,$archive) { $zip = new ZipArchive(); if(is_dir($repertory)) { if($zip->open($archive, ZipArchive::CREATE) == TRUE) { $files = scandir($repertory); unset($files[0], $files[1]); foreach($files as $file) { if(!$zip->addFile($repertory.$file,$file)) { echo 'Impossible d\'ajouter'.$f.'".<br/>'; } } $zip->close(); } else { echo 'Erreur, impossible de créer l'archive.'; } } else { echo 'Le dossier n'existe pas.'; } }
Ralentir le téléchargement d'un fichier
Code:
<?php function dowload_file($local_file=NULL,$download_rate=NULL,$download_file=NULL) { set_time_limit(180); if($local_file!=NULL) { if(file_exists($local_file) && is_file($local_file)) { if($download_rate==NULL){$download_rate=filesize($local_file);} if($download_file==NULL){$download_file=basename($local_file);} header('Cache-control: private'); header('Content-Type: application/octet-stream'); header('Content-Length: '.filesize($local_file)); header('Content-Disposition: filename='.$download_file); flush(); $file = fopen($local_file, "r"); while(!feof($file)) { print fread($file, round($download_rate * 256)); flush(); usleep(250000); } fclose($file); } else { exit('Error: The file "'.htmlentities($local_file).'" does not exist!'); } } else { exit('Error: The file is not specified !'); } }
Limiter les utilisateurs
Code:
<?php $nb_connectes = exec('ps auxwf | grep httpd | wc -l')/1; echo $nb_connectes; if ($nb_connectes > 5) { header("HTTP/1.1 503 Service Unavailable"); echo "<h1>503 Service Unavailable (too many connections)</h1>"; exit(); }
Parcours file
Code:
<?php function parcours_file($file=NULL) { if($file!=NULL) { if(is_file($file)) { $lines = file($file); foreach ($lines as $line_num => $line) { echo 'Line #{',$line_num,'}</b> : '.htmlentities($line).'<br />'; } } else { exit(htmlentities($file).'is not file!'); } } else { exit('Error parametre'); } }
Redimensionnement image
Code:
<?php function redimensionnement_image($url_image_1=NULL,$largeur_image_2=NULL,$url_image_2=NULL,$qualite=100) { $largeur_image_2=round($largeur_image_2, 0); if(file_exists($url_image_1) && is_file($url_image_1)) { if($largeur_image_2!=NULL) { $ext_image_1=strtolower(strrchr($url_image_1,'.')); if($ext_image_1=='.jpeg' || $ext_image_1=='.jpg') { $type_image_1=mime_content_type($url_image_1); if($type_image_1=='image/jpeg' || $type_image_1=='image/jpg') { $image_1=imagecreatefromjpeg($url_image_1); $taille_image_1=getimagesize($url_image_1); $hauteur_image_2=round($taille_image_1[1]*$largeur_image_2/$taille_image_1[0], 0); echo '<br />Image A : '.$taille_image_1[0],' de largeur et ',$taille_image_1[1],' de hauteur'; echo '<br />Image B : ',$largeur_image_2, ' de largeur et ',$hauteur_image_2,' de hauteur'; $image_2=imagecreatetruecolor($largeur_image_2,$hauteur_image_2); imagecopyresampled($image_2,$image_1,0,0,0,0,$largeur_image_2,$hauteur_image_2, $taille_image_1[0],$taille_image_1[1]); if($url_image_2==NULL){$url_image_2=basename($url_image_1,strtolower(strrchr($url_image_1,'.'))).'-'.$largeur_image_2.'-'.$hauteur_image_2.strtolower(strrchr($url_image_1,'.'));} imagejpeg($image_2,$url_image_2, $qualite); echo '<img src="',$url_image_1,'" alt="image1"/><br />'; echo '<img src="',$url_image_2,'" alt="image2"/><br />'; } else { echo 'Error: the file "',htmlentities($url_image_1),'" have not valid type mime!'; } } else { echo 'Error: the file "',htmlentities($url_image_1),'" is not file jpeg!'; } } else { echo 'Error: parametre not found!'; } } else { echo 'Error: the file "',htmlentities($url_image_1),'" is not existed in the serveur!'; } }
search_erase_in_array
Code:
<?php function search_erase_in_array($array=NULL,$search=NULL,$erase=NULL) { if($array==NULL){return;} if($search==NULL) { //array_flip( $nom_categories=array_unique(array_values($array)); } else { $nom_categories=array($search); } $nb_calcul=0; foreach($nom_categories as $cle_1) { $return=NULL; //echo $cle_1,'<br />'; foreach($array as $cle_2 => $valeur_2) { $nb_calcul++; //echo 'je cherche : ',$cle_1,' dans ',$valeur_2,'<br />'; if ($cle_1==$valeur_2) { //echo "trouver!".$cle_2.' est un '.$cle_1.'<br />'; if($return!=NULL){$return.=', ';} $return.=$cle_2; if($erase==true){unset($array[$cle_2]);} } } echo $cle_1,' : ',$return,'<br />'; } echo 'nb_calcul : ',$nb_calcul; } $fruits=array( 'aromate'=>'oignon', 'morille'=>'champignon', 'citron'=>'fruit', 'pomme'=>'fruit', 'poire'=>'fruit', 'banane'=>'fruit', 'etc'=>'fruit', 'betterave'=>'legume', 'haricots'=>'legume', 'petits pois'=>'legume', 'etc'=>'legume', 'laitue'=>'salade', 'frisee'=>'salade', ); search_erase_in_array($fruits);
Strip_accents
Code:
<?php function strip_accents($string,$level=1,$iconv=NULL) { if($iconv=='true') { if(trim(ICONV_IMPL)=='glibc') { $string=iconv("UTF-8", "ISO-8859-15//TRANSLIT//IGNORE",$string); } else { $string=iconv("UTF-8", "ISO-8859-15//TRANSLIT", $string); } } if($level>=1) { $string=strtr( $string, 'áàâäãåçéèêëíìîïñóòôöõúùûüýÿÁÀÂÄÃÅÇÉÈÊËÍÏÎÌÑÓÒÔÖÕÚÙÛÜÝ', 'aaaaaaceeeeiiiinooooouuuuyyAAAAAACEEEEIIIINOOOOOUUUUY' ); } if($level>=2) { $string=strtr( $string, '¥µÆÐØßæñðø', 'YuADOsanoo' ); } return $string; }
TRAVAIL D'UNE APREM entière (a cause de utf-8/ISO et mb_...) mais franchement elle valait le coup
Analyse d'une chaîne de caractères (attention le traitement est long, environ 1s pour 3000 caractères, avec une marque, sinon en vrai c'est plutot le double :blush: )
(Cette fonction devrais être native maintenant )
Code:
<?php $_VAR['system']['time_start'] = microtime(true); function analyse_text($text,$strlen=true,$str_word_count=true,$caracteres_str_word_count=true,$analyse=true,$taux_doublons=true,$grey_list=true,$black_list=true) { $text = trim(preg_replace ('/\s+/',' ', $text)); $minuscules_sans_accents='abcdefghijklmnopqrstuvwxyz'; $minuscules_avec_accents='áàâäãåçéèêëíìîïñóòôöõúùûüýÿ'; $majuscules_sans_accents=strtoupper($minuscules_sans_accents); $majuscules_avec_accents='ÁÀÂÄÃÅÇÉÈÊËÍÏÎÌÑÓÒÔÖÕÚÙÛÜÝ'; $ponctuation=',?;.:!'; $nombres='0123456789'; $list_censured=array('pour'); $resultats['minuscules_sans_accents']=0; $resultats['minuscules_avec_accents']=0; $resultats['majuscules_sans_accents']=0; $resultats['majuscules_avec_accents']=0; $resultats['ponctuation']=0; $resultats['nombres']=0; $resultats['espace']=0; $resultats['autre']=0; $resultats['taux_doublons']=0; $resultats['grey_list']=0; $resultats['black_list']=0; if($strlen==true) { $resultats['strlen']=mb_strlen($text); } else { $resultats['strlen']='not'; } if($str_word_count==true) { //cette technique marche pas vraiment avec utf-8 :( //$resultats['str_word_count']=str_word_count($text); //voilà la mienne (bourrin... :p) $resultats['str_word_count']=substr_count($text,' ')+1; } else { $resultats['str_word_count']='not'; } if($caracteres_str_word_count==true) { $resultats['caracteres_str_word_count']=(mb_strlen($text)-substr_count($text,' '))/(substr_count($text,' ')+1); } else { $resultats['caracteres_str_word_count']='not'; } if($analyse==true) { $b=mb_strlen($text); for($a=0;$a<$b;$a++) { $carac=mb_substr($text,$a,1); //if(substr_count($minuscules_sans_accents,$carac)>=1) //if(ereg($carac,$minuscules_sans_accents)) if (strpos($minuscules_sans_accents,$carac)) { $resultats['minuscules_sans_accents']++; } elseif (strpos($minuscules_avec_accents,$carac)) { $resultats['minuscules_avec_accents']++; } elseif (strpos($majuscules_sans_accents,$carac)) { $resultats['majuscules_sans_accents']++; } elseif (strpos($majuscules_avec_accents,$carac)) { $resultats['majuscules_avec_accents']++; } elseif (strpos($ponctuation,$carac)) { $resultats['ponctuation']++; } elseif (strpos($nombres,$carac)) { $resultats['nombres']++; } elseif($carac==' ') { $resultats['espace']++; } else { $resultats['autre']++; } } } else { $resultats['minuscules_sans_accents']='not'; $resultats['minuscules_avec_accents']='not'; $resultats['majuscules_sans_accents']='not'; $resultats['majuscules_avec_accents']='not'; $resultats['ponctuation']='not'; $resultats['nombres']='not'; $resultats['espace']='not'; $resultats['autre']='not'; } if($taux_doublons==true) { $liste=$minuscules_sans_accents.$minuscules_avec_accents.$majuscules_sans_accents. $majuscules_avec_accents.$ponctuation.$nombres; $b=mb_strlen($liste); $nombre=0; for($a=0;$a<$b;$a++) { $nombre+=substr_count($text,mb_substr($liste,$a,1).mb_substr($liste,$a,1)); } $resultats['taux_doublons']=$nombre/mb_strlen($text); } else { $resultats['taux_doublons']='not'; } if($grey_list==true) { foreach($list_censured as $cle=>$valeur) { $resultats['grey_list']++; } } else { $resultats['nbr_grey_list']='not'; } if($black_list==true) { $mots=explode(' ',$text); foreach($mots as $cle1=>$valeur1) { foreach($list_censured as $cle2=>$valeur2) { if(levenshtein($valeur1,$valeur2)<=2) { $resultats['black_list']++; } } } } else { $resultats['black_list']='not'; } return $resultats; } $test="En dehors des classes de caractères, un antislash suivi d'un nombre plus grand que 0 (et possiblement plusieurs chiffres) est une référence arrière (c'est à dire vers la gauche) dans le masque, en supposant qu'il y ait suffisamment de sous-masques capturants précédents. Cependant, si le nombre décimal suivant l'antislash est plus petit que 10, il sera toujours considéré comme une référence arrière, et cela générera une erreur si le nombre de captures n'est pas suffisant. En d'autres termes, il faut qu'il existe suffisamment de parenthèses ouvrantes à gauche de la référence, surtout si la référence est inférieure à 10. Une 'référence arrière vers l'avant' peut avoir du sens lorsqu'une répétition est isolée et que le sous masque à droite a participé dans l'itération précédente. Reportez-vous à la section 'antislash' pour avoir de plus amples détails à propos du nombre de chiffres qui suivent l'antislash. La référence arrière remplace ce qui a été capturé par un sous-masque dans le masque courant, plutôt que remplacer le sous-masque lui-même."; echo '<pre>'; print_r(analyse_text($test,true,true,true,true,true,true,true)); echo '</pre>'; echo '<br />Temps d\'exécution : '.round(microtime(true)-$_VAR['system']['time_start'], 3).' secondes.<br />'; exit();
Bref, pour le moment, ça serais un captcha avec 3 images, dont une en display:none, gif animé faiblement, avec quelques trais et petits caractères en fond
J'ai trouver quelques liens sympa =D
http://www.tutomania.com/Blog-de-Igixcs.html#b-651
http://theclemsweb.free.fr/index.php...ots-&article=8
Voilà ma fonction php terminée
Code:
<?php function captcha() { header ("Content-type: image/png"); $captcha_string="abcdefghijklmnopqrstuvwxyz123456789"; $strlen_captcha_string=strlen($captcha_string); $captcha_lenght=10; for($i=0; $i<$captcha_lenght; $i++) { @$captcha.= $captcha_string[rand()%$strlen_captcha_string]; } unset($captcha_string); unset($captcha_lenght); unset($strlen_captcha_string); unset($i); //on ne garde QUE les variables qu'on va utiliser plus tard $captcha=$captcha;//bah quoi ? ^^" $lag_width = 0;//decallage horizontal $lag_height = 0;//decallage vertical $facteur_multi_width_picture=1.5;//pour multiplier la largeur de l'image par rapport à la taille du captcha $facteur_multi_height_picture=1.5;//pour multiplier la hauteur de l'image par rapport à la taille du captcha $facteur_multi_width_lettre=1.5;//pour multiplier la largeur d'un caractère par rapport à la taille du captcha $frequence_hachure=15; $angle_hachure=15; $size = 32;//taille de police $font='./trashco.ttf';//emplacement de la police $box = imagettfbbox($size, 0,$font,$captcha);//information sur le captcha graphique $width_captcha = ($box[2]-$box[0]);//largeur du captcha != largeur de l'image $height_captcha= ($box[1]-$box[7]);//hauteur du captcha != hauteur de l'image $width_picture = $width_captcha*$facteur_multi_width_picture;//calcul de la largeur de l'image $height_picture= $height_captcha*$facteur_multi_height_picture;//calcul de la hauteur de l'image $width_lettre = round($width_captcha/strlen($captcha))*$facteur_multi_width_lettre;//calcul de la largeur d'un caractère //Pour mettre un flou $matrix_blur = array( array(1,2,1), array(2,4,2), array(1,2,1) ); $picture = imagecreate($width_picture,$height_picture);//création de l'image //$picture = imagecreatetruecolor(200, 150) //$picture = imagecreatefrompng("http://www.siteduzero.com/Templates/images/smilies/smile.png"); //$picture = imagecreatefromjpeg("couchersoleil.jpg"); //génération des couleurs $blanc =imagecolorallocate($picture, 255, 255, 255);#/!\ l'image seras sur fond blanc!! $noir = imagecolorallocate($picture, 0, 0, 0); $orange = imagecolorallocate($picture, 255, 128, 0); $bleu = imagecolorallocate($picture, 0, 0, 255); $bleuclair = imagecolorallocate($picture, 156, 227, 254); $noir = imagecolorallocate($picture, 0, 0, 0); $colors=array($noir,$orange,$bleu,$bleuclair,$noir);//l'array qui contient les couleurs que peut prendre le captcha //façon d'écrire le captcha sans ttf //imagestring($picture, $size, strlen($captcha)*5,$width_lettre,$captcha, $colors[mt_rand(0,count($colors)-1)]); //façon d'écrire le captcha avec ttf, mais en une fois //imagettftext($picture, $size,0,(($width_picture-$width_captcha)/2)+$lag_width,(($height_picture-$height_captcha)/2)+$lag_height+$size,$colors[mt_rand(0,count($colors)-1)],$font, $captcha); $width_lettre=$width_lettre/1.25;//on diminue la taille d'un caractère afin d'eviter d'en "perdre un" //je commence à 1, ainsi le premier caractère n'est pas collé au cadre for($i = 1; $i <= strlen($captcha);++$i) { imagettftext($picture, $size,mt_rand(-35,35),($i*$width_lettre)+$lag_width,(($height_picture-$height_captcha)/2)+$lag_height+$size,$colors[mt_rand(0,count($colors)-1)],$font, $captcha[$i-1]); } imagerectangle($picture,0,0,$width_picture-1,$height_picture-1,$noir); // La bordure imageline($picture, 0,mt_rand(1,$height_picture),$width_picture, mt_rand(1,$height_picture),$colors[mt_rand(0,count($colors)-1)]);//un trai aléatoire for($x=5; $x<$width_picture; $x+=$frequence_hachure) { imageline($picture, $x,0,$x-$angle_hachure,$height_picture,$noir);//les hachures } $diviseur= $matrix_blur[0][0]+$matrix_blur[0][1]+$matrix_blur[0][2]+ $matrix_blur[1][0]+$matrix_blur[1][1]+$matrix_blur[1][2]+ $matrix_blur[2][0]+$matrix_blur[2][1]+$matrix_blur[2][2]; imageconvolution($picture, $matrix_blur,$diviseur,0); // On applique la matrice, avec un diviseur 16 //$blanc = imagecolorallocate($picture, 255, 255, 255); //imagestring ($picture,$font,$x,$y,$string,$color); //imagesetpixel ($picture,$x,$y,$color); //imageline ($picture,$x1,$y1,$x2,$y2,$color); //imageellipse ($picture,$x,$y,$width,$height,$color); //imagefilledellipse ($picture,$x,$y,$width,$height,$color); //magerectangle ($picture,$x1,$y1,$x2,$y2,$color); //imagefilledrectangle ($picture,$x1,$y1,$x2,$y2,$color); //imagepolygon ($picture,$array_points,$nomber_of_points,$color); //imagefilledpolygon ($picture,$array_points,$nomber_of_points,$color); //imagesetthickness ($picture,$epaisseur); //imagecolortransparent($picture,$orange); //$largeur_destination = imagesx($destination); //$hauteur_destination = imagesy($destination); //imagecopymerge($destination, $source, $destination_x, $destination_y, 0, 0, $largeur_source, $hauteur_source, 60); //imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source); imagepng($picture); imagedestroy($picture); //imagejpeg($picture); //imagepng($picture, "picture/mypicture.png") }
Autre fonction que je viens de terminer
Un script de bannisement d'ip, qui utilise une base sql pour faciliter les levés de ban automatiques mais qui possede un systeme de blacklist.txt =D Et le mieux, c'est qu'il gere parfaitement les plages d'ip Il suffit simplement de mettre une ligne sans mettre le point à la fin (genre 154.30)
EDIT: J'ai corriger (j'aime toujours chercher plus loin et améliorer ) désormais si vous metter un point et rien derrière, ça marche aussi
Code:
<?php function anti_banned() { global $_VAR;global $_TEXT;global $_BOOT_02;global $_BOOT_03; $file=$_VAR['system']['path'].'/papers/setting/blacklist.txt'; if(is_file($file)) { $lines = file($file); foreach ($lines as $line_num => $line) { $ip_a=explode('.',$_SERVER['REMOTE_ADDR']); $ip_b=explode('.',$line); if(isset($ip_b[0])&&$ip_b[0]==''){unset($ip_b[0]);} if(isset($ip_b[1])&&$ip_b[1]==''){unset($ip_b[1]);} if(isset($ip_b[2])&&$ip_b[2]==''){unset($ip_b[2]);} if(isset($ip_b[3])&&$ip_b[3]==''){unset($ip_b[3]);} $compare=NULL; $nbr_b=count($ip_b); if($nbr_b>=1) { $compare.=$ip_a[0]; } if($nbr_b>=2) { $compare.='.'.$ip_a[1]; } if($nbr_b>=3) { $compare.='.'.$ip_a[2]; } if($nbr_b>=4) { $compare.='.'.$ip_a[3]; } if($compare==trim($line) || $compare.'.'==trim($line)) { echo 'Tu est un banni!'; exit(); } } } else { echo 'Fail Open File Blacklist ip!!'; } try { //premiere requete pour savoir si l'utilisateur est banni $request = $_VAR['system']['data_base']->prepare("SELECT COUNT(*) AS ip FROM ip_banned WHERE ip= ? LIMIT 0, 1"); $request->execute(array( retrieve_ip() )); $data = $request->fetch(); $ip=$data['ip']; $request->closeCursor(); if ($ip>=1)//si l'ip de l'utilisateur se trouve dans la base de données des bannis { $request = $_VAR['system']['data_base']->prepare("SELECT * FROM ip_banned WHERE ip= ? LIMIT 0, 1"); $request->execute(array( retrieve_ip() )); $data=$request->fetch(); $id =$data['id']; $ip =$data['ip']; $time_banned =$data['time_banned']; $number_visit =$data['number_visit']+1; $time_last_visit =$data['time_last_visit']; //on met à jour les informations sur le banni dans la bbd (inutile mais bon... :) ) $request = $_VAR['system']['data_base']->prepare('UPDATE ip_banned SET number_visit = :number_visit, time_last_visit = :time_last_visit WHERE id = :id'); $request->execute(array( 'number_visit' => $number_visit, 'time_last_visit' => time(), 'id' => $id )); //on lui met un petit message et on arrete le script (lui bloquant acces au site) echo "<script>alert(\"t'es déjà banni, petit con ! tu viens de l'ip : ".retrieve_ip().'\n et ça fait '.$number_visit.' que tu viens faire le chieur >_<\"");</script>'; exit(); } } catch(Exception $e) { die('Error : '.$e->getMessage()); } }
Anti dos (très simpliste, inutile, mais indispensable )
Code:
<?php function anti_ddos() { global $_VAR;global $_TEXT;global $_BOOT_02;global $_BOOT_03; try { //on regarde si l'ip est déjà dans la table des connectés $request = $_VAR['system']['data_base']->prepare("SELECT COUNT(*) AS ip FROM current_connection WHERE ip= ? LIMIT 0, 1"); $request->execute(array( retrieve_ip() )); $data = $request->fetch(); $ip=$data['ip']; $request->closeCursor(); if ($ip>=1)//si l'ip de l'utilisateur se trouve déjà dans la table { //on récupere les données déjà stocker $request = $_VAR['system']['data_base']->prepare("SELECT * FROM current_connection WHERE ip= ? LIMIT 0, 1"); $request->execute(array( retrieve_ip() )); $data = $request->fetch(); $quota =$data['quota']; $last_connection =$data['last_connection']; $request->closeCursor(); //maitenant on les modifie ;) $new_quota=$quota+1-floor(((int)time()-(int)$data['last_connection'])/$_VAR['system']['minimum_waiting_time']); if($new_quota<0){$new_quota=0;}//on evite que le nombre soit négatif $request = $_VAR['system']['data_base']->prepare('UPDATE current_connection SET quota = :quota, last_connection = :last_connection WHERE ip = :ip'); $request->execute(array( 'quota' => $new_quota, 'last_connection' => time(), 'ip' => retrieve_ip() )); if($new_quota>$_VAR['system']['maximun_number_connection']) { ip_ban(); echo "<script>alert(\"tu vient d'etre banni pour flood/ddos, petit con ! tu viens de l'ip : ".retrieve_ip().' !");</script>'; exit(); } //on affiche les données (pour mon débeugage surtout et les test de ddos ) /* echo 'ip : '.retrieve_ip().'<br />'. 'ancien quota : '.$quota.'<br />'. 'différence : '.floor(((int)time()-(int)$data['last_connection'])/$_VAR['system']['minimum_waiting_time']).'<br />'. 'new quota : '.$new_quota.'<br />'. 'time :'.time().'<br />'; */ } else { //on le rajoute dans la table :) $request = $_VAR['system']['data_base']->prepare('INSERT INTO current_connection(ip, quota, last_connection) VALUES(:ip, :quota, :last_connection)'); $request->execute(array( 'ip' => retrieve_ip(), 'quota' => 1, 'last_connection' => time(), )); } } catch(Exception $e) { die('Error : '.$e->getMessage()); } }
admirez celle-là (et surtout l'inutilité ^^' )
Code:
<?php function scan_directory($name_directory=null,$display=false,$erase=false) { /* Version 1.0 Cette fonction "Scan Récursif de Répertoire " possède 3 parametres: FACULTATIF : le 1er est le répertoire qu'on veut analyser (par défault la racine du site) FACULTATIF : le 2eme est un booleen qui définie l'affichage ou non de l'arboresance du répertoire (par défault false) FACULTATIF : le 3eme est un booleen qui définie l'effacement des fichiers temporaires dans l'arborescance du ficher Exemple d'appel : scan_directory(null,true,true); Afficheras l'arborescance, supprimeras les fichiers temporaire et retourneras un array d'informations. Elle retourne un array d'informations sur : le nombre total de répertoire, le nombre total de fichiers, le nombre total de lignes, le nombre total de caractères, le nombre de fichiers selon leurs extention, le nombre de lignes selon leurs extention, le nombre de caractères selon leurs extention, */ global $result; if($name_directory==null) { $name_directory=$_SERVER['DOCUMENT_ROOT']; } $directory = opendir($name_directory) or die('Error!'); while($entry = @readdir($directory)) { if($entry != '.' && $entry != '..') { $path=realpath($name_directory.'/'.$entry); if(is_dir($name_directory.'/'.$entry)) { @$result['nbr_repertory']++; if($display==true) { echo '<li><span style="color:red;">',$entry,'</span></li><ul>'; } scan_directory($name_directory.'/'.$entry,$display); if($display==true) { echo '</ul>'; } } elseif(is_file($name_directory.'/'.$entry)) { @$result['nbr_file_total']++; if(substr($entry, -1)=='~') { @$result['nbr_file']['cache']++; if($erase==true) { unlink(realpath($name_directory.'/'.$entry)); } } else { $ext=strrchr($entry,'.'); @$result['nbr_file'][$ext]++; $array=array_flip(array('.php','.html','.css','.js','.txt','.xml')); if(array_key_exists($ext,$array)) { $line=count(file($name_directory.'/'.$entry)); @$result['nbr_line_total']+=$line; @$result['nbr_line'][$ext]+=$line; $nbr_caracter=mb_strlen(file_get_contents($name_directory.'/'.$entry)); @$result['nbr_caracter_total']+=$nbr_caracter; @$result['nbr_caracter'][$ext]+=$nbr_caracter; if($display==true) { echo '<li><span style="color:blue;">',$entry,' ( ',$nbr_caracter,' caractères dans ',$line,' lignes)</span></li>'; } } else { if($display==true) { echo '<li><span style="color:blue;">',$entry,'</span></li>'; } } } } } } closedir($directory); return $result; }
minifier du code (j'ai testé du css, pas du js encore..)
C'est pas vraiment une fonction car il y a deux bout
Tout en haut du fichier :
Code:
<?php header('Content-type: text/css');ob_start('');?>
Code:
echo str_replace(array("\n","\r","\t"," "),'', ob_get_clean());
Petit code pour faire des logs avec firephp
Code:
$_VAR['debug']['object']->log( (string)(number_format(microtime(true),4, '.', '')).' :: '. (string)(number_format(microtime(true)-$_VAR['core']['01']['time_start'],4)).' :: '. (string)(number_format(microtime(true)-$_VAR['debug']['last_time'],4)).' :: end of page' );$_VAR['debug']['last_time']=microtime(true);
Include sécurisé
Code:
if(!empty($_GET['repertory']) && !empty($_GET['file']))//si les parametres ne sont pas vides { //on fait les tests pour éviter les backhat :p $search = array('/', '\\', '.','%'); $replace = 'blackhat'; $repertory = str_replace($search, $replace, $_GET['repertory']); $file = str_replace($search, $replace, $_GET['file']); $file=rtrim(strtolower($file)); //desormais tous les caractères pouvant genées ont étaient remplacés // /!\ J'ai utiliser la methode en haut uniquement pour détecter un VRAI blackhat // Ce qui suit suffit en lui-meme, mais j'aime le fait de laisser un message pour les blackhat :demon: if ($repertory!==$_GET['repertory'] || $file!==$_GET['file'])//si des remplacements ont étaient effectués { //c'est qu'il y a une raison! On le redirige vers l'url nettoyée (pour lui montrer qu'on n'est pas con :D ) header('Location: '.$_VAR['core']['01']['url'].'/index.php?repertory='.$repertory.'&file='.$file); exit(); } elseif (preg_match('/'.$replace.'/', 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']))//si on trouve blackhat dans l'url c'est donc qu'il vient de la redirection (ou qu'il se proclame lui-meme blackhat, C'EST PIRE!! ) { unset($search,$replace);//on n'en n'as plus besoin, on les supprime ;) \core_01\ip_ban();//on le bannis } elseif (isset($_VAR['core']['01']['pages_authorized'][$repertory][$file]))//si le fichier demander est autoriser { unset($search,$replace);//on n'en n'as plus besoin, on les supprime ;) if(!empty($_TEXT[$_VAR['core']['01']['language_by_default']]['core']['01']['message_accept_page']))#si un message existe { #on affiche une pop-up echo '<script>alert("',\core_01\write('core','01','message_accept_page'),'");</script>'; } if($_VAR['core']['01']['pages_authorized'][$repertory][$file]==true)//si le fichier n'est pas bloquer { if(!empty($_TEXT[$_VAR['core']['01']['language_by_default']]['core']['01']['message_accesible_page']))#si un message existe { #on affiche une pop-up echo '<script>alert("',\core_01\write('core','01','message_accesible_page'),'");</script>'; } if (file_exists($_VAR['core']['01']['path'].'/bundles/'.$repertory.'/'.$file))//si le repertoire existe { if(!empty($_TEXT[$_VAR['core']['01']['language_by_default']]['core']['01']['message_find_directory']))#si un message existe { #on affiche une pop-up echo '<script>alert("',\core_01\write('core','01','message_find_directory'),'");</script>'; } if (file_exists($_VAR['core']['01']['path'].'/bundles/'.$repertory.'/core_02/boot_02.php') && file_exists($_VAR['core']['01']['path'].'/bundles/'.$repertory.'/'.$file.'/controller.php') )#si les fichiers qu'on l'on veut inclure existent bien { #on crée ces deux variables qu'on vas réutiliser plus tard (dans les fichiers includes) $_VAR['core']['02']['repertory']=$repertory; $_VAR['core']['02']['file']=$file; unset($repertory,$file);//on n'en n'as plus besoin, on les supprime ;) #include du core_02 qui correspond au bundles demander. include($_VAR['core']['01']['path'].'/bundles/'.$_VAR['core']['02']['repertory'].'/core_02/boot_02.php'); #include le controleur qui correspond à la page include($_VAR['core']['01']['path'].'/bundles/'.$_VAR['core']['02']['repertory'].'/'.$_VAR['core']['02']['file'].'/controller.php'); } else { unset($repertory,$file);//on n'en n'as plus besoin, on les supprime ;) if(!empty($_TEXT[$_VAR['core']['01']['language_by_default']]['core']['01']['message_accesible_page']))#si un message existe { #on affiche une pop-up echo '<script>alert("',\core_01\write('core','01','message_error_inclusion_files_page'),'");</script>'; } else { echo \core_01\write('core','01','message_error_global'); } } } else { unset($repertory,$file);//on n'en n'as plus besoin, on les supprime ;) if(!empty($_TEXT[$_VAR['core']['01']['language_by_default']]['core']['01']['message_error_directory_not_found']))#si un message existe { #on affiche une pop-up echo '<script>alert("',\core_01\write('core','01','message_error_directory_not_found'),'");</script>'; } else { echo \core_01\write('core','01','message_error_global'); } } } else { if(!empty($_TEXT[$_VAR['core']['01']['language_by_default']]['core']['01']['message_page_in_maintenance']))#si un message existe { #on affiche une pop-up echo '<script>alert("',\core_01\write('core','01','message_page_in_maintenance'),'");</script>'; } else { echo \core_01\write('core','01','message_error_global'); } } } else { if(!empty($_TEXT[$_VAR['core']['01']['language_by_default']]['core']['01']['message_refused_page']))#si un message existe { #on affiche une pop-up echo '<script>alert("',\core_01\write('core','01','message_refused_page'),'");</script>'; } else { echo \core_01\write('core','01','message_error_global'); } } } else //si un parametre est manquant { if(!empty($_TEXT[$_VAR['core']['01']['language_by_default']]['core']['01']['message_parameters_empty']))#si un message existe { #on affiche une pop-up echo '<script>alert("',\core_01\write('core','01','message_parameters_empty'),'");</script>'; } echo 'VIDE VIDE VIDE VIDE VIDE!!!'; }
Code:
<?php function image($plus,$moins) { $plus=(int)$plus; $moins=(int)$moins; $pourcentage_plus =$plus/ ($plus+$moins)*100; $pourcentage_moins=$moins/($plus+$moins)*100; $width_picture=120; $height_picture=200; if($plus>=0 && $moins>=0) { header ("Content-type: image/png"); $picture = imagecreate($width_picture,$height_picture); $blanc =imagecolorallocate($picture, 255, 255, 255); $green =imagecolorallocate($picture, 0, 255, 0); $red =imagecolorallocate($picture, 255, 0, 0); imagefilledrectangle($picture,10,199,50,($height_picture/100)*$pourcentage_moins, $green); imagefilledrectangle($picture,100,199,60,($height_picture/100)*$pourcentage_plus, $red); imagepng($picture); } else { echo 'error'; } } image(50,30);
Commentaire