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