Tests & Concours


Réponses du test de la semaine 26

Question 1
Laquelle de ces fonctions permet de classer un tableau par les clefs en ordre décroissant ?
Réponses Solution Tendance
sort    
rsort    
ksort    
krsort X 100%
reverse_sort    

Question 2
Le vol de session peut être limité par l'utilisation :
Réponses Solution Tendance
de la fonction session_regenerate_id() X 100%
de la fonction session_name()    
de la fonction session_destroy()    
du safe_mode    
Réponse détailée
Il existe plusieurs types d'attaques de sessions. La plupart d'entre elle nécessite à l'attaquant d'accéder à un identifiant de session valide. On parle de vol ou de détournement de session : session hijacking.

Afin de détourner et d'utiliser la session d'un autre utilisateur un attaquant peut essayer de :

  • Deviner
  • Enregistrer
  • Choisir
  • l'identifiant de session de sa victime.

    Le mécanisme par défaut de gestion de session en PHP fait qu'un attaquant aura beaucoup de mal à prédire l'identifiant de session d'un utilisateur.

    Comment un attaquant pourrait il enregistrer un identifiant ?
    En PHP un identifiant de session peut être propagé automatiquement soit en paramètre GET dans les URL appelées, soit dans un cookie.

    Par défaut on préfère utiliser un cookie, en effet des paramètre GET pourrait par exemple être découvert dans un referrer http.

    Même si les cookies sont un mécanisme plus sûr qu'un paramètre GET, ils ne mettent pas l'utilisateur à l'abri.
    En effet, une faille XSS dans un site peut permettre de facilement récupérer un cookie.

    Il existe enfin une autre méthode pour un attaquant. Plutôt que de chercher une faille pour récupérer l'identifiant en cours, il est plus simple de choisir soi même l'identifiant de session de sa future victime. On parle de session fixation.

    Si une victime clique sur un lien ou poste un formulaire qui contient un identifiant de session controllé par l'attaquant, alors ce dernier connaitra l'identifiant de session en avance. En effet en PHP, si un identifiant qui ne correspond à aucune session démarrée par le système est envoyé, alors PHP a créer une nouvelle session avec cet identifiant. Dans d'autre langage ce n'est pas le cas, il est donc important de connaître ce fonctionnement de PHP.

    Pour toutes ces raisons, la fonction session_regenerate_id permet de limiter les conséquences.

    Tout d'abord, si une session n'a pas été démarrée par le système alor son utilisera session_regenerate_id afin de renouveler l'identifiant.Par exemple :

    Code :
    session_start();
    if(!isset($_SESSION['fixation'])) {
      session_regenerate_id();
      $_SESSION['fixation']=time();
    }

    On protège efficacement l'utilisateur contre les fixations de session. Attention cependant, suivant votre système d'authentification et d'authorisation, un attaquant pourrait venir générer un identifiant en avance sur votre site avant de l'envoyer à une future victime.

    C'est pourquoi dans tous les cas il est conseillé dans votre système d'authorisation de revalider les informations d'authentification de l'utilisateur, et à cette occasion de renouveler son identifiant de session. Par exemple, avant de permettre à un utilisateur, même l'administrateur du site d'effacer la totalité de la base de données, on revalidera ses informations et on lui génèrera un nouvel identifiant grâce à la fonction session_regenerate_id.

    D'une manière générale, on conseille de renouveler l'identifiant de session à tout changement de privilège de l'utilisateur authentifiée.

Question 3
Quelle sera la sortie de ce script ?
<?php
class Cert
{
	private $valeur = 10;

	function __construct($var=30)
	{
		$this->valeur = $var;
	}
}
$obj = new Cert(20);
echo $obj->valeur;
?>
Réponses Solution Tendance
10    
20    
30    
Aucune des réponses ci-dessus X 100%

Question 4
Si on fait count($a) à la fin du script, que va t'on obtenir ?
<?php
for ($i = 0; $i < 1.02; $i += 0.17) {
	$a[$i] = $i;
}
?>
Réponses Solution Tendance
0    
1 X 100%
2    
4    
6    

Question 5
Quelles chaînes seront matchées par l'expression régulière ci-dessous (2 réponses) ?
/.*\*123\d/
Réponses Solution Tendance
******123    
*****_1234    
******1234 X 100%
_*123*    
_*123    

Question 6
Quelle sera la sortie de ce script ?
<?php
$a = "b";
$b = "c";
$c = "a";
echo $$$$a;
?>
Réponses Solution Tendance
a   50%
bcab    
b X 50%
c    
Une erreur fatale    

Question 7
Quelle sera la sortie de ce script ?
<?php
$a = 1;
$a = $a-- + 1;
echo $a;
?>
Réponses Solution Tendance
2 X 100%
1    
3    
0    
NULL    

Question 8
Quelle fonction permet de compléter le script suivant afin d'afficher la première ligne du fichier fichier.txt ?
<?php
$contents = __________('fichier.txt');
echo $contents[0];
?>
Réponses Solution Tendance
file X 50%
line    
fopen    
file_get_contents    
Aucune des réponses ci-dessus   50%

Question 9
9. Que va renvoyer cette ligne ?
strpos('Certification PHP', 'i', 2);
Réponses Solution Tendance
4 X 50%
5    
6    
7   50%
10    

Question 10
Quelle sera la sortie de ce script ?
<?php
$tab = array(1, 2, 3, 4);
foreach ($tab as $elem) {
	$tab[4] = 5;
	echo $elem;
}
?>
Réponses Solution Tendance
12345    
55555    
1234 X 100%
112123123412345    
Aucune des réponses ci-dessus    


 

[ archives ]