PHP

Identifier les entrées utilisateur

Session

Path traversal / LFI

  • fopen

  • readfile

  • file

  • fpassthru

  • gzopen

  • gzfile

  • gzpassthru

  • readgzfile

  • copy

  • rename

  • rmdir

  • mkdir

  • unlink

  • file_get_contents

  • file_put_contents

  • parse_ini_file

  • dir

  • symlink

Inclusion et evaluation de scripts PHP:

  • include

  • include_once

  • require

  • require_once

  • virtual

SQLi

  • mysql_query()

  • mysql_db_query()

  • mysql_unbuffered_query()

  • pg_execute()

  • pg_query()

  • pg_query_params()

  • pg_prepare()

  • pg_send_execute()

  • pg_send_query()

  • pg_send_query_params()

  • pg_send_prepare()

  • mssql_execute()

  • mssql_query()

  • odbc_exec()

  • odbc_execute()

  • odbc_do()

  • odbc_prepare()

Préparation de requêtes:

  • mysqli->prepare

  • stmt->prepare

  • stmt->bind_param

  • stmt->execute

  • odbc_prepare

Execution de code dynamique

  • eval

  • call_user_func

  • call_user_func_array

  • call_user_method

  • call_user_method_array

  • create_function

OS injection

  • exec

  • execve

  • passthru

  • popen

  • proc_open

  • shell_exec

  • pcntl_exec

  • system

  • operateur (`)

Open redirect

  • http_redirect

  • header

  • HttpMessage::setResponseCode

  • HttpMessage::setHeaders

Sockets

  • socket_create

  • socket_connect

  • socket_write

  • socket_send

  • socket_recv

  • fsockopen

  • pfsockopen

XSS

Absence des fonctions:

  • htmlspecialchars()

  • htmlentities()

  • urlencode()

Chercher des entrées avec les commandes suivantes:

  • print

  • echo

  • <?= <expression> ?>

Misc

Variable non initialisée

En PHP, il est possible d'utiliser des variables sans les avoir initialisées préalablement ce qui peut parfois entrainer des business logic flaw.

Exemple:

<?php
if (authenticated_user())
{
$authorized = true;
}
if ($authorized)
{
include "/highly/sensitive/data.php";
}
?>

Ce code contient ainsi une vulnérabilité permettant de contourner le contrôle d'accès au fichier data.php. Les attaquants peuvent simplement ajouter le paramètre "authorized=" à la requête ou dans un cookie. PHP crée une variable globale nommée $authorized et la définit à la valeur 1. Ensuite, le code échoue la première instruction if, mais la deuxième instruction réussit et les données secrètes sont affichées.

magic_quotes

Un mécanisme de sécurité global appelé magic_quotes tente de freiner les attaques par injection de métacaractères. L'option de configuration magic_quotes_gpc (gpc signifie "get, post et cookie") active le échape les métacaractères dans toutes les données GET, POST et cookie. Cela signifie que chaque guillemet, guillemet double, barre oblique inverse et caractère NULL est automatiquement échappé avec un caractère barre oblique inverse. Cette option est activée par défaut à l'inverse de l'option magic_quotes_runtime désactivée par défaut. magic_quotes_runtime fait de même en échappant les données générées à l'exécution à partir de sources externes, y compris les bases de données et le système d'exploitation.

Il arrive que des développeurs désactives volontairement magic_quotes pour certaines raisons pouvant ainsi rendre l'application vulnérables aux injections de code.

Option de fichier .inc

Placer les fichiers d'en-tête et de structure dans les fichiers .inc est pratique courante. Une mauvaise configuration courante est que le serveur Web n'a pas le bon gestionnaire de fichiers mappé pour l'extension .inc. Demander le fichier d'inclusion vide ainsi directement son code source car il est traité comme un fichier texte ou HTML.

Autres Mauvaises pratiques

Dernière mise à jour