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