[PHP] Sécurité: Se prémunir contre certaines failles

  • Thread starter Membre supprimé 492129
  • Start date

    Publicités

Users Who Are Viewing This Thread (Total: 1, Members: 0, Guests: 1)

M

Membre supprimé 492129

Hello!

Le but de ce mini-tutoriel est de se prémunir contre certaine failles, dont les utilisateurs non lambda pourraient utiliser à des fins pas très catholique.

I. La faille XSS:

La faille XSS est une des faille les plus présente (avec les injections SQL). La faille Cross Site Scripting consiste à envoyer un script (javascript par exemple) dans un input pour qu'elle soit analysée par le serveur puis ensuite affichée. Ce qui fera que le script sera executé.

Pour se prémunir de cette faille, c'est simple. Il suffit de récupérer la variable et de remplacer tous les caractères spéciaux en leur entité HTML ( ex: < ). Pour celà on utilise donc la variable htmlentities.

Exemple:

Code:
<?php
if(isset($_POST['data'])) {
 $_POST['data'] = htmlentities($_POST['data']);
}
?>

II. Faille include:

Cette faille n'est pas souvent présente puisqu'on s'en prémunit par défaut quand on fait ce genre de chose.

Un petit cas de figure: vous possédez un site avec une index, cette page va ensuite chercher d'autre page en utilisant un include (avec une variable GET ?p=LAPAGE):

Code:
<?php
include $_GET['p'];
?>

Imaginons que quelqu'un change la valeur de p et le renvoie sur un script malveillant, récupérant toutes les variables. Ce serait bête ^^.

Pour se prémunir on va tout simplement vérifier avec un preg_match si p est bien alphanumérique et on va définir la recherche de p dans l'arborescence du serveur.

Code:
<?php
if(preg_match("#^[a-zA-Z0-9]+$#", $_GET['p'])) {
	include "../".$_GET['p'].".php";
} else {
	echo 'Erreur';
}
?>


III. Faille SQL (Injection):

Cette faille est très importante si vous avez un système de connexion par exemple.

Cas de figure: Si vous n'avez pas magic_quote d'activé sur le serveur et que vous n'avez pas sécurisé la variable du login, l'utilisateur peut se connecter en mettant un certain login (' OR 1=1 OR 1=') et un mot de passe bidon, ce qui lui donne accès à tout ce qui est sécurisé.
Donc c'est simple: il suffit d'ajouter la fonction addslashes a la variable login pour qu'il n'y ai plus ce problème:

Code:
<?php
$login = addslashes($_POST['login']);
?>
 
Apr 26, 2011
1,315
2
944
26
In my home
Discord
brokeos
Merci, mais la faille XSS est bien plus compliqué que ça, on pourras toujours la bypass même avec un htmlentities().
La meilleure façon (de mon point de vue) est:
Code:
htmlspecialchars(strip_tags($value));