PHP

Identifier les entrées utilisateur

Variables
Description

$_GET

$HTTP_GET_VARS

Contient les paramĂštres envoyĂ©s dans une requĂȘte GET.

$_POST

$HTTP_POST_VARS

Contient les paramĂštres envoyĂ©s dans une requĂȘte POST.

$_COOKIE

$HTTP_COOKIE_VARS

Contient les cookies envoyĂ©s dans la requĂȘte.

$_REQUEST

Contient le contenu des variables précédentes.

$_FILES

$HTTP_POST_FILES

Contient les fichiers tĂ©lĂ©chargĂ©s dans la requĂȘte.

$_SERVER[‘REQUEST_METHOD’]

Contient les mĂ©thodes utilisĂ©es dans la requĂȘte.

$_SERVER[‘QUERY_STRING’]

Contient la chaĂźne de caractĂšres complĂ©te envoyĂ© dans la requĂȘte.

$_SERVER[‘REQUEST_URI’]

Contient l'url complĂ©te contenu dans la requĂȘte.

$_SERVER[‘HTTP_ACCEPT’]

Contenu du header Accept: de la raquĂȘte

$_SERVER[‘HTTP_ACCEPT_CHARSET’]

Contenu du header Accept-Charset: de la raquĂȘte

$SERVER[‘HTTP_ACCEPT_ENCODING’]

"" "" Accept-Encoding: "" ""

$SERVER[‘HTTP_ACCEPT_LANGUAGE’]

"" "" Accept-Language: "" ""

$_SERVER[‘HTTP_CONNECTION’]

"" "" Connection: "" ""

$_SERVER[‘HTTP_HOST’]

"" "" Host: "" ""

$_SERVER[‘HTTP_REFERER’]

"" "" Referer: "" ""

$_SERVER[‘HTTP_USER_AGENT’]

"" "" User-Agent: "" ""

$SERVER[‘HTTP_FOO’]

Contenu d'une en-tĂȘte HTTP custom (foo peut ĂȘtre remplacĂ© par n'importe quel nom d'en-tĂȘte.

$_SERVER[‘PHP_SELF’]

Contient le nom du script en cours d'execution. Bien que le nom du script en lui mĂȘme soit hors de portĂ© de l'attaquant, il existe des cas dans lesquels cette variable peut ĂȘtre exploitable. Exemple de XSS: <form action=”<?= $_SERVER[‘PHP_SELF’] ?>”> Exploitation: /search.php/”><script>

Session

Variable
Description

$_SESSION

Contient les informations de session de l'utilisateur.

$HTTP_SESSION_VARS

"" "" si register_global est actif.

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

Option
Bonne pratique

allow_url_fopen

Doit ĂȘtre dĂ©sactivĂ©

allow_url_include

Doit ĂȘtre dĂ©sactivĂ©

display_errors

Doit ĂȘtre dĂ©sactivĂ©

file_uploads

Doit ĂȘtre dĂ©sactivĂ©

upload_tmp_dir

Si utilisé, doit pointer vers un répertoire qui n'est pas accessible aux utilisateurs

DerniĂšre mise Ă  jour

Cet article vous a-t-il été utile ?