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:
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