@@ -31,13 +31,13 @@ Ce mécanisme n'est pas efficace : il suffit de changer la ligne ```<form method
...
@@ -31,13 +31,13 @@ Ce mécanisme n'est pas efficace : il suffit de changer la ligne ```<form method
* Expliquez comment obtenir des informations sur une autre table
* Expliquez comment obtenir des informations sur une autre table
**ATTENTION TODO : ne pas utiliser SELECT mais une autre commande (laquelle?) pour obtenir UNIQUEMENT les NOMS DES COLONNES de la table et pas les INFORMATIONS**
Le début de la requête SQL est ```INSERT INTO chaines (who, txt) VALUES ('```. Il est difficile de modifier le début de cette requête. Pour obtenir des informations sur une autre table, par exemple ```table```, il est possible combiner cette requête ```INSERT``` avec une requête ```SELECT```, ce qui permets d'insérer dans la table ```table``` des données obtenues dans la table ```table```.
Le début de la requête SQL est ```INSERT INTO chaines (who, txt) VALUES ('```. Il est difficile de modifier le début de cette requête. Pour obtenir des informations sur une autre table, par exemple ```table```, il est possible combiner cette requête ```INSERT``` avec une requête ```SELECT```, ce qui permets d'insérer dans la table ```table``` des données obtenues dans la table ```table```.
*Exemple :* supposons que la table ```table``` ait deux colonnes : ```c1``` et ```c2```. On peut obtenir le contenu de ```c1```avec la requête ```',SELECT c1 FROM table) --```. Il suffit maintenant de combiner cette requête avec la requête ```INSERT``` afin d'insérer le contenu récupéré par ```SELECT``` dans ```chaines```. On a alors la requête suivante : ```INSERT INTO chaines (who,txt) VALUES ('',SELECT c1 FROM table) -- ```.
*Exemple :* supposons que la table ```table``` ait deux colonnes : ```c1``` et ```c2```. On peut obtenir le contenu de ```c1```avec la requête ```',SELECT c1 FROM table) --```. Il suffit maintenant de combiner cette requête avec la requête ```INSERT``` afin d'insérer le contenu récupéré par ```SELECT``` dans ```chaines```. On a alors la requête suivante : ```INSERT INTO chaines (who,txt) VALUES ('',SELECT c1 FROM table) -- ```.
On peut répéter cette opération autant de fois que nécessaire pour afficher les informations contenues dans les différentes colonnes de ```table```.
On peut répéter cette opération autant de fois que nécessaire pour afficher les informations contenues dans les différentes colonnes de ```table```.
Si l'on veut récupérer uniquement les noms des commandes de la table, on peut utiliser ````DESCRIBE table```. La requête serait alors ```INSERT INTO chaines (who,txt) VALUES ('',DESCRIBE table) --```.
## Question 4
## Question 4
Pour corriger cette vulnérabilité, il faut utiliser des prepared statements et des query paramétrées.
Pour corriger cette vulnérabilité, il faut utiliser des prepared statements et des query paramétrées.
...
@@ -61,7 +61,6 @@ La requête et ce tuple sont donnés à la commande execute, qui va se charger d
...
@@ -61,7 +61,6 @@ La requête et ce tuple sont donnés à la commande execute, qui va se charger d
## Question 6
## Question 6
Rendre un fichier server_xss.py avec la correction de la
La faille XSS à été corrigée en utilisant la fonction ```escape()``` du module ```html```. Cette fonction permet de transformer les caractères en ```<```, ```>``` et ```&```, notamment utilisés dans les balises HTML en chaînes n'étant pas interprétées par HTML. Il est préférable de réaliser le traitement à l'affichage des données plutot qu'a l'insertion. En effet, si les chaines insérées sont traitées par escape à l'insertion, celles-ci ne seront pas correctement affichées sur la page.
faille. Expliquez la demarche que vous avez suivi. (indice : 1 mot a ajouter)