[gull] Questions sur requête SQL intégrée dans php

Marc SCHAEFER schaefer at alphanet.ch
Thu Apr 13 09:17:18 CEST 2006


On Wed, Apr 12, 2006 at 10:52:38PM +0200, Rafael Muñoz Moreno-Davila wrote:
> $page = $_SERVER['PHP_SELF'];

je ne connais pas exactement la façon dont PHP gère les problèmes de
data injection / cross-scripting. Il y a des trucs `magiques' qui sont
très déroutants et parfois non corrects.

En supposant que $page vient des données utilisateurs du FORM (POST) ou
d'un GET, et en supposant que PHP n'a pas d'auto-bricolage avec (en
bref: que la donnée est *déjà* décodée), il faudrait, avant de faire ça:

> echo "<input name=\"Page\" value=\"$page\" type=\"hidden\">";

protéger $page.

Si $page est censé être un nombre, en Perl il suffirait de faire
$page = $page + 0.  On pourrait aussi imaginer vérifier avec une regexp
comme  $page =~ /^\d+$/.

Enfin, on peut aussi assurer que $page ne contiendra pas d'entities, ce
qui éviterait p.ex. que $page soit "\"><IMG SRC=\"...\"/>\"; ou quelque
chose de ce genre.

En Perl, le plus simple est d'utiliser URI::Escape ou HTML::Entities,
suivant le contexte.

PS: le même problème se pose dans l'accès à la base de données, la
solution est dans ce cas l'escaping, ou, encore mieux, le `binding', cf 
http://cvs.alphanet.ch/cgi-bin/cvsweb/~checkout~/schaefer/public/cours/ESNIG/securite/cours/echanges/securite-devel/RELEASES/securite-devel.ps.3.pdf?rev=HEAD;content-type=application%2Fpdf



More information about the gull mailing list