Module Anti-Hack !

Fermé
xxkirastarothxx Messages postés 378 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 22 mars 2013 - 4 août 2008 à 16:58
 Le site du Débutants - 26 oct. 2010 à 14:38
Bonjour à tous,

je suis en train de développer un petit module "anti-hack",
je m'explique,

pour la plupart des variables du site que l'utilisateur est susceptible de rentrer/changer (login/ mot de passe/ profile/ $_GET etc...) la variable est passée au peigne fin afin de vérifier la contenance de caractères suspicieux à savoir:

< > & ' " / | : \ OR AND = http php

lorsque 1 caractère est détécté, rien de spéciale, lorsqu'il y en a deux, l'action est stoppée, lorsqu'il y en a trois ou plus, l'action est stoppé, la chaine stocké dans un fichier insensible, et un message du type
"Votre requête à été considéré comme une tentative d'attaque, l'action est stoppée, et un rapport à été envoyé à l'administrateur contenant votre requete, votre adresse ip ...."

tout ceci afin d'essayer de décourager les petit rigolos ^^

Ma Question: comment faire pour repérer le nombre de tout ces caractères interdits dans une chaine ?

Si vous avez des conseils / avis / question n'hesitez pas :)
Merci

9 réponses

Yoan Messages postés 11795 Date d'inscription mardi 1 février 2005 Statut Modérateur Dernière intervention 10 décembre 2023 2 327
4 août 2008 à 19:22
Voilà une idée :
<?php
$var='Ce test doit échouer à cause des caractères ">" et "<", le troisième "&" provoque l\'envoi du mail';	//Variable à tester
$nb=0;	//Compteur de caractères interdits
$interdits=array('>','<','&');
foreach($interdits as $caract)
	{
	$ajout=mb_substr_count($var,$caract);
	$nb=$nb+$ajout;
	}
if($nb>2)
	{
	//mail();
	exit('Tentative de piratage détectée. Action avortée. Un e-mail a été envoyé à l\'administrateur');
	}
elseif($nb>1)
	exit('Tentative de piratage détectée. Action avortée.');

//Poursuite du script ....
echo "Action autorisée et terminée.";
?>
4
Yoan Messages postés 11795 Date d'inscription mardi 1 février 2005 Statut Modérateur Dernière intervention 10 décembre 2023 2 327
4 août 2008 à 19:31
J'y ai pas réfléchi plus tôt, mais tu sais qu'avec htmlentities() ou htmlspecialchars() ça fonctionne encore mieux. Pour PHP ça ne gène pas puisque le texte ainsi récupéré est une chaîne de caractères.
Il y a aussi une fonction pour notamment éviter les injections SQL mais je ne m'en souviens plus.
2
BlackDrag00n Messages postés 34 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 5 août 2011 8
22 août 2008 à 13:02
je suis d'accord avec Yoan avec htmlentities() ou htmlspecialchars() ça fonctionne encore mieux.
0
xxkirastarothxx Messages postés 378 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 22 mars 2013 40
5 août 2008 à 09:16
mysql_real_escape_string
je connais, mais l'idée c'est surtout:
1] prévenir le hacker que son attaque à été repéré, déjà ça dissuade,
2] faire un rapport complet à l'administrateur avec le plus de détails possible ( IP, os, navigateur etc etc, enfin tout ce qu'on peut récupérer avec les $_SERVER & Cie

je vais voir ce que je peux faire avec ce code, merci ;)
2
xxkirastarothxx Messages postés 378 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 22 mars 2013 40
5 août 2008 à 12:59
Merci ça a l'air de faire ce que je recherchais :)
jvais allé m'amuser avec :)

Quelqu'un sais comment récupérer plus d'info du client ?
pasque les $_SERVER['remote_addr'] etc... ça reste limité.
qu'est-ce qui pourrait être pratique de recupérer ?
1
Yoan Messages postés 11795 Date d'inscription mardi 1 février 2005 Statut Modérateur Dernière intervention 10 décembre 2023 2 327
10 août 2008 à 23:28
Ben pour rester dans l'utile, tu n'as besoin que de l'adresse IP. Quoique sauf si tu veux porter plainte je sais pas trop ce que tu vas en faire, mais sinon tu peux récupérer le user-agent aussi. Dans ce cas présent il te sera pas très utile non plus mais enfin \o/
$_SERVER['HTTP_USER_AGENT']
0
Le site du Débutants
26 oct. 2010 à 14:38
Tu peux récupérer :
Le navigateur
L'adresse ip

Pour le naviguateur , une petite astuce :
<?php
if(preg_match("/Firefox/",$_SERVER['HTTP_USER_AGENT'])){
$navigateur = "Firefox";
}
if(preg_match("/Safari/",$_SERVER['HTTP_USER_AGENT'])){
$navigateur = "Safari";
}
if(preg_match("/MSIE/",$_SERVER['HTTP_USER_AGENT'])){
$navigateur = "Internet Explorer";
}
?>
Ahah , tu crois que tu me fais peur avec ton petit hack !<br />
Ton adresse ip est <?php echo $_SERVER['REMOTE_ADDR']; ?> , et ton navigateur est <?php echo $navigateur; ?><br />
Et après tu continue de lui faire peur blablabla


A+
http://sitedebutant.u7n.org/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
xxkirastarothxx Messages postés 378 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 22 mars 2013 40
22 août 2008 à 11:12
il doit y avoir d'autre solution, certain comme Mon-ip.com arrive à détéctée une multitude de chose bien pratique pour ce genre de module, comme l'adresse ip interne, l'adresse ip externe, l'adresse ip du proxy(si détecté), le port utilisé.

déjà le $_SERVER['HTTP_USER_AGENT'] est peu fiable, car de mon travail aucune information n'est retrouvée grâce à cette commande, alors que d'autre sites me l'indique sans problème.

quelqu'un connait-il un moyen pour récupérer ce genre d'info ?
1
xxkirastarothxx Messages postés 378 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 22 mars 2013 40
22 août 2008 à 14:10
"je suis d'accord avec Yoan avec htmlentities() ou htmlspecialchars() ça fonctionne encore mieux."

Les gens faut apprendre à comprendre, ou à lire:

"je connais, mais l'idée c'est surtout:
1] prévenir le hacker que son attaque à été repéré, déjà ça dissuade,
2] faire un rapport complet à l'administrateur avec le plus de détails possible ( IP, os, navigateur etc etc, enfin tout ce qu'on peut récupérer avec les $_SERVER & Cie"

un site comporte obligatoirement des failles. Avec des simples htmlentities() ou htmlspecialchars() l'attaque est bloquée, mais à un moment ou à un autre quelqu'un trouvera la faille et se ferra plaisir.

Avec le module que j'essaye de développer, rien n'empêche, lors de la poursuite du script, de rajouter les balises htmlentities(), htmlspecialchars() et/ou mysql_real_escape_string().

exemple à l'arache :
if($erreur ==2)
{ exit('action stopée');}
elseif($erreur >=3)
{ exit('Action concidéré come hack: rapport effectué(ip, agent etc...)');}
else
{
 $var = mysql_real_escape_string(htmlspecialchars($var));
}

Dans mon module je pensais également ajouter une partie d'auto-ban lorsque plus de 3 attaques ont été détectées sur la même IP par exemple, c'est là l'avantage, et c'est loin d'être le seul auquel j'ai pensé.

M'enfin si vous connaissez une fonction php qui fait la même chose que ce que je développe, prévenez moi encore que je rigole ^^

autre Exemple:
un hacker essaye de se logué en admin grace à:
login: admin
pass: ' or ''=''

c'est une faille stupide, mais assez fréquente.
Et bien là, non seulement l'attaque est bloquée par les magicquote (ou addslashes) les htmlspecialchars etc, mais EN PLUS un rapport est fais à l'administrateur, qui pourra vérifier le type d'attaque etc.
Le hacker est prévenu que l'administrateur est au courant, et qu'il peut être banni au bout de la 3ème tentative détéctée.
Comme un rapport est fait à l'administrateur, ce dernier peu également repérer des failles auxquels il n'avait pas pensé, et on peut encore trouver d'autre fonctionalitée a ce type de module.

après il y a surement mieux que le ban par IP, par-ce que l'IP ça se change simplement, mais ça je cherche encore.
le user agent ? l'os + le navigateur + je sais pas quoi d'autre similaire ?

ma question reste dans mon post précédant
1
xxkirastarothxx Messages postés 378 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 22 mars 2013 40
25 août 2008 à 08:33
je n'avais éffectivement pas pensé à ce point de details.

Il est vrai qu'un utilisateur peu avoir http ou php dans son pseudo, par exemple.
Mais est-ce vraiment gênant, dans le sens où je ne les interdits pas, je les repère et je les interdits seulement s'il sont trop nombreux.
Un rapport étant fait à l'administrateur, celui ci pourra choisir ou non de laisser passer la requête à l'avenir.
1
Bonjour

Si ça peut servir, dans l'optique 'Bien connaître pour mieux défendre. (Gérard Haas)' :

Le Site du Zéro : Les expressions régulières (Partie 1/2)
https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql/916990-les-expressions-regulieres-partie-1-2

Le Site du Zéro : Les expressions régulières (Partie 2/2)
https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql/917386-les-expressions-regulieres-partie-2-2

Le Site du Zéro : Mémo pour les Regex
https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql/918834-memento-des-expressions-regulieres

Les caractères spéciaux ou les chaînes particulières de caractères ne sont pas le problème !
Les données sont interprétées comme du code actif au lieu d'être ignorées !
Ce sont les effets qu'ils déclenchent le problème ! Aucun caractère ne doit être interdit.

(Un caractère peut ne pas être utilisable par convention mais pas interdit pas convenance personnelle)

Merci
0
c++
-1