web-dev-qa-db-fra.com

Passer IMG SRC via GET et l’échanger? Est-ce vraiment sécurisé?

Je me demandais comment rendre une demande GET et écho plus simple et plus sécurisée

Le code:

$src = $_GET['src']; 
echo "<img src='$src' />";

Fondamentalement, j'ai une URL comme exemple.com/link.php?src=imgname.jpg

Théoriquement, je pense qu'il est possible de l'exploiter en insérant des URL externes et en essayant de les analyser sur le site. Recommanderiez-vous un preg_match pour autoriser uniquement les images et supprimer les URL?

3
mashup

Vous avez implémenté une vulnérabilité de type Cross Site Scripting (XSS). Ce type de vulnérabilité d'injection peut être utilisé par un attaquant pour voler les informations d'identification de vos utilisateurs ou lui demander d'effectuer des actions sur votre site ou contre d'autres sites à son insu. Pour plus d'informations sur XSS, voir wikipedia: http://en.wikipedia.org/wiki/Cross-site_scripting

Une personne utilisant un paramètre src fermant la balise img puis insérant javascript dans la page pourrait exposer votre vulnérabilité. Quelque chose comme:

'/><script>alert('hello world')</script>

Donc, oui, vous devez valider votre saisie. Associez-le à une expression régulière en utilisant preg_match, tel que

^[a-zA-Z0-9\-\_]+\.(jpg|gif)$

Vous devriez également échapper les chaînes qui sont générées en HTML avec la fonction htmlspecialchars dans php.

$src = htmlspecialchars($src, ENT_QUOTES);
echo "<img src='$src' />";
8
Stephen Ostermiller