Ne pas accéder à superglobale $_GET tableau directement

Je suis nouveau en PHP, donc pardonnez-moi si c'est une question stupide, mais pourquoi devrais-je pas accéder aux éléments dans les tableaux superglobaux directement? NetBeans me prévient de ne pas (voir le titre), et j'ai lu la même chose ailleurs, je n'ai cependant pas une bonne explication encore.

Ce qui peut aller mal? Est-ce un problème de sécurité, comme l'injection SQL? Ou quelque chose d'autre?

Il y a plusieurs questions similaires sur StackOverflow, mais aucune des réponses réellement expliquer ce qu'est le problème: ils ont juste vous suggérons d'utiliser filter_input(). Cela ne me satisfont pas, car j'aime savoir comment les choses fonctionnent. Toute explication sera appréciée.

vos données peuvent être détournés par des pirates ....
Parce que les données que vous recevez à partir d'un client inconnu est peut-être endommagé. La perte de votre base de données est le plus petit problème ici. XSS ou de l'utilisation de votre serveur pour spamattacks sur les autres peut créer beaucoup de problèmes, seulement parce que tu na pas valider le userinput.
Vous pouvez trouver des conseils utiles sur le phptherightway.com/#data_filtering
$_GET et $_POST pose exactement les mêmes menaces à la sécurité de votre script PHP. Quand quelque chose dit de ne pas accéder directement ce que cela signifie "Ne pas faire confiance à la source qui a fourni les données, assurez-vous de désinfecter et de vérifier avant de l'utiliser dans votre script". Une bonne raison de ne pas utiliser $_GET plus précisément, c'est lors de la soumission de formulaires, car elle peut conduire à un navigateur trace de l'histoire donc, si c'est un écran de connexion, puis vous pouvez voir someScript.php?user=something&password=plainText mais avec un message, vous ne serez pas en mesure de voir les valeurs transmises.
Merci @une.yastreb , la lecture que maintenant.

OriginalL'auteur Obversity | 2014-01-22