par
Ripat » 30 août 2006, 09:27
Ryle +1
On se satisfait souvent de la sécurité illusoire de la méthode POST car on pense que comme on ne voit pas les variables dans l'url, celles-si sont sécurisées. Loin s'en faut. Elle sont, tout comme par GET, transmises en clair. De plus, on peut facilement simuler l'envoi d'un formulaire en transmettant le header approprié par sockets ou, plus facilement encore, avec CURL.
POST est, il est vrai, un peu plus confidentiel dans le sens où par GET, il suffirait de se pencher au dessus de l'épaule d'un utilisateur pour lui piquer son mot de passe.
Juste pour illustrer le problème de transmettre des données sensibles par GET ou POST, voici un petit exemple:
Voici un bête formulaire de deux champs:
Code : Tout sélectionner
<form method="POST" action="aaa.php">
<input type="text" name="nom" /><br />
<input type="password" name="pass" /><br />
<input type="submit" value="Envoyer" />
</form>
Voici les trames (facilement) capturées (ici par tcpdump):
POST /test/aaa.php HTTP/1.1
User-Agent: Opera/9.01
Host: debian
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*1
Accept-Language: fr,fr-BE;q=0.9,en;q=0.8
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Referer: http://debian/test/test.php
Connection: Keep-Alive, TE
TE: deflate, gzip, chunked, identity, trailers
Content-Length: 215
Content-Type: multipart/form-data; boundary=----------I1w1EgLcZsSZT5bxg4igvI
------------I1w1EgLcZsSZT5bxg4igvI
Content-Disposition: form-data; name="nom"
moi
------------I1w1EgLcZsSZT5bxg4igvI
Content-Disposition: form-data; name="pass"
hello
-----------I1w1EgLcZsSZT5bxg4igvI--
Si, vraiment, c'est la sécurité qui compte --> SSL
Ryle +1
On se satisfait souvent de la sécurité illusoire de la méthode POST car on pense que comme on ne voit pas les variables dans l'url, celles-si sont sécurisées. Loin s'en faut. Elle sont, tout comme par GET, transmises en clair. De plus, on peut facilement simuler l'envoi d'un formulaire en transmettant le header approprié par sockets ou, plus facilement encore, avec CURL.
POST est, il est vrai, un peu plus confidentiel dans le sens où par GET, il suffirait de se pencher au dessus de l'épaule d'un utilisateur pour lui piquer son mot de passe.
Juste pour illustrer le problème de transmettre des données sensibles par GET ou POST, voici un petit exemple:
Voici un bête formulaire de deux champs:
[code]<form method="POST" action="aaa.php">
<input type="text" name="nom" /><br />
<input type="password" name="pass" /><br />
<input type="submit" value="Envoyer" />
</form>[/code]
Voici les trames (facilement) capturées (ici par tcpdump):
[size=75] POST /test/aaa.php HTTP/1.1
User-Agent: Opera/9.01
Host: debian
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*1
Accept-Language: fr,fr-BE;q=0.9,en;q=0.8
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Referer: [url]http://debian/test/test.php[/url]
Connection: Keep-Alive, TE
TE: deflate, gzip, chunked, identity, trailers
Content-Length: 215
Content-Type: multipart/form-data; boundary=----------I1w1EgLcZsSZT5bxg4igvI
------------I1w1EgLcZsSZT5bxg4igvI
Content-Disposition: form-data; name="[color=Blue]nom[/color]"
[color=red]moi[/color]
------------I1w1EgLcZsSZT5bxg4igvI
Content-Disposition: form-data; name="[color=Blue]pass[/color]"
[color=red]hello[/color]
-----------I1w1EgLcZsSZT5bxg4igvI--[/size]
Si, vraiment, c'est la sécurité qui compte --> SSL