JeuWeb - Crée ton jeu par navigateur
injections SQL : caractères utilisés, ôter moi un doute - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : injections SQL : caractères utilisés, ôter moi un doute (/showthread.php?tid=204)

Pages : 1 2 3


injections SQL : caractères utilisés, ôter moi un doute - php_addict - 06-01-2011

salut à tous

j'ai soudainement un gros doute sur le fonctionnement des injections SQL, notament sur la panoplie de caractères utilisés pour ce faire:

pour réaliser un injection il n'y a que les caractères ' et " qui sont potentiellement utilisables non ? c'est à dire les caractères de fin de chaines...

ou y a t il d'autre caractères pouvait servir à une injection ?

je dis ca car j'ai un doute en lisant ceci:

http://fr2.php.net/mysql_real_escape_string a écrit :mysql_real_escape_string() appelle la fonction mysql_escape_string() de la bibliothèque MySQL qui ajoute un slash aux caractères suivants : NULL, \x00, \n, \r, \, ', " et \x1a.

échapper les guillemets simples et double, ok je comprends mais pourquoi échapper NULL ou \x00 par exemple ?

bonne journée à tous.


RE: injections SQL : caractères utilisés, ôter moi un doute - NicoMSEvent - 06-01-2011

(06-01-2011, 12:22 PM)php_addict a écrit : échapper les guillemets simples et double, ok je comprends mais pourquoi échapper NULL ou \x00 par exemple ?

ce sont typiquement des caractères de fin de chaîne, ça permettrait de faire quelque chose du genre

SELECT * FROM joueurs where id=\00 (fin de chaine)
injection ici (nouvelle ligne qui pourrait être exécutée)\00
AND actif=true (reste de la commande sql précédente)

en gros, la premiere et 3eme ligne pourrait tomber en erreur, tandis que la 2eme ligne serait exécutée. (j'ai pas vérifié, je peux me tromper)

il en va e même avec les retour a la ligne et quelques caractères spéciaux


RE: injections SQL : caractères utilisés, ôter moi un doute - php_addict - 06-01-2011

ah oui ok...

merci pour ta réponse

donc (pour moi qui n'utilise pas de framework):

- un mysql_real_escape_string()
- ou htmlentities(addslashes($chaine), ENT_QUOTES, 'UTF-8');

font l'affaire dans tout les cas de figure ?

étrange que j'ai encore un doute là dessus...


RE: injections SQL : caractères utilisés, ôter moi un doute - Sephi-Chan - 06-01-2011

Pourquoi htmlentities ?


RE: injections SQL : caractères utilisés, ôter moi un doute - Ter Rowan - 06-01-2011

sans parler de framework, PDO ne sécurise pas ces éléments ?


RE: injections SQL : caractères utilisés, ôter moi un doute - Holy - 06-01-2011

(06-01-2011, 05:28 PM)Ter Rowan a écrit : sans parler de framework, PDO ne sécurise pas ces éléments ?
Dans les requêtes préparées, les requêtes sont protégées des injections.


RE: injections SQL : caractères utilisés, ôter moi un doute - php_addict - 06-01-2011

(06-01-2011, 04:55 PM)Sephi-Chan a écrit : Pourquoi htmlentities ?

ah oui tiens pourquoi? c'est redondant...


RE: injections SQL : caractères utilisés, ôter moi un doute - NicoMSEvent - 07-01-2011

<script>alert("coucou");</script>
Parce que sans les htmlentities, tu aurais un joli popup avec "coucou" dedans.

On pourrait envoyer des données sensibles vers d'autres sites (identifiant de session)
ou carrément envoyer ton visiteur sur un autre site (location="http://spam.autresite.com") et donc rendre ton site indisponible (surtout si c'est fait sur ta page d'accueil)


RE: injections SQL : caractères utilisés, ôter moi un doute - Sephi-Chan - 07-01-2011

Il faut utiliser htmlentities à l'affichage, pas à l'insertion.

Pourquoi ? Parce que toutes vos données n'ont pas à être corrompues pour la seule raison qu'une de vos projections de ces données est faite en HTML.
Si vous rendiez ces données en JSON, vous aimeriez voir Tom & Jerry converti en Tom &amp; Jerry ? Je ne crois pas, ça n'a aucun sens.

Notez qu'avec Ruby on Rails, les chaînes ont un attribut booléen html_safe qui indique si elles ont été échappée pour HTML. A l'affichage, c'est fait automatiquement si ce n'est pas déjà fait, du coup on est protégé par le XSS.


Sephi-Chan


RE: injections SQL : caractères utilisés, ôter moi un doute - Anthor - 07-01-2011

htmlentities != htmlspecialchars Smile