


Déconstruire les dangers: pourquoi les développeurs de PHP modernes évitent $ _request
$ _Request est découragé dans PHP moderne car il fusionne les commentaires de $ _get, $ _post et $ _cookie, créant une ambiguïté source qui sape la sécurité et la prévisibilité. 2. Cette ambiguïté permet des attaques telles que la falsification des cookies, la confusion de la méthode de demande et le contournement du CSRF, comme on le voit lorsqu'un cookie malveillant remplace les données de post attendues comme les jetons CSRF. 3. Le débogage, le test et le maintien du code deviennent plus difficiles car il n'est pas clair si les entrées proviennent d'un formulaire, d'une URL ou d'un cookie. 4. Les meilleures pratiques dictent à l'aide de superglobaux spécifiques - $ _ obtenez pour les paramètres URL, $ _POST pour les données de formulaire et $ _cookie uniquement lorsqu'ils sont explicitement nécessaires - pour garantir un code clair, sécurisé et testable. 5. Des cadres modernes comme Laravel et Symfony fournissent des objets de demande structurés et des outils de validation qui favorisent une manipulation explicite des entrées sûres. 6. Le principe de base est que le code sécurisé nécessite de savoir exactement d'où vient les données, les développeurs doivent donc être spécifiques plutôt que de s'appuyer sur des superglobaux ambigus axés sur la commodité comme $ _request.
L'utilisation de $_REQUEST
dans le développement de PHP moderne est largement découragée - et pour une bonne raison. Bien que cela puisse sembler pratique à première vue, le fait de s'appuyer sur $_REQUEST
présente des risques subtils mais graves qui entrent en conflit avec des pratiques de codage sécurisées, prévisibles et maintenables. Décomposons pourquoi les développeurs expérimentés l'évitent et ce qu'ils utilisent à la place.

Qu'est-ce que $_REQUEST
et comment ça marche?
$_REQUEST
est un tableau de superglobal PHP qui collecte des données à partir de plusieurs sources: $_GET
, $_POST
et $_COOKIE
(et parfois $_FILES
, selon la configuration). Il fusionne les entrées de ces sources dans un seul tableau, vous permettant d'accéder à la saisie des utilisateurs sans spécifier d'où il vient.
Par exemple:

echo $ _request ['nom d'utilisateur'];
Cette ligne pourrait tirer le «nom d'utilisateur» d'un paramètre d'URL, d'un poteau de formulaire ou d'un cookie - sans distinction entre eux.
Au début, cela pourrait ressembler à un raccourci. Mais cette commodité est la racine de ses problèmes.

Risques de sécurité: l'ambiguïté permet les exploits
Le plus gros problème avec $_REQUEST
est l'ambiguïté de la source - vous ne pouvez pas dire d'où les données sont originaires. Cela ouvre la porte à plusieurs vecteurs d'attaque:
- Falsière des cookies : puisque
$_REQUEST
comprend$_COOKIE
, un attaquant peut définir un cookie malveillant qui remplace la forme ou les données d'URL. - Demande Méthode Confusion : Une valeur envoyée via Get peut être involontairement remplacée par un cookie avec le même nom, conduisant à des défauts logiques.
- CSRF et fixation de session : si votre application vérifie un jeton dans le post mais
$_REQUEST
se retourne à une valeur de cookie obsolète ou contrôlée contre l'attaquant, la validation peut être contournée.
Imaginez un formulaire de connexion s'attendant à un jeton CSRF via Post:
if ($ _request ['csrf_token']! == $ _Session ['token']) { Die («CSRF Check a échoué»); }
Un attaquant peut définir un cookie csrf_token
avec la valeur correcte, puis inciter l'utilisateur à soumettre le formulaire via GET (qui n'envoie pas de données de poste), ce qui fait retomber $_REQUEST
au cookie. Le contrôle passe - mais aucune intention utilisateur réelle n'a été vérifiée.
La prévisibilité et le débogage souffrent
Lorsque vous utilisez $_REQUEST
, il devient plus difficile de raisonner sur le flux de votre application. Cette valeur est-elle venue d'un formulaire? Une URL? Un cookie que l'utilisateur ne savait même pas existait?
Cette ambiguïté mène à:
- Débogage plus dur: vous ne pouvez pas rapidement tracer d'où l'entrée est originaire.
- Comportement involontaire: un ensemble de cookies lors d'une session précédente pourrait modifier silencieusement la manipulation des demandes de courant.
- Complexité de test: les tests d'unité et d'intégration doivent tenir compte des sources d'entrée fusionnées, augmentant les frais généraux de configuration.
Explicite est meilleur. Si vous attendez des données d'un formulaire, utilisez $_POST
. Si c'est dans l'URL, utilisez $_GET
. Cela rend l'intention claire et le comportement cohérent.
Alternatives modernes et meilleures pratiques
Au lieu de $_REQUEST
, les applications PHP modernes suivent des modèles plus stricts et plus sûrs:
Utilisez des superglobaux spécifiques :
-
$_GET
pour les paramètres d'URL -
$_POST
pour les soumissions de formulaires -
$_COOKIE
lorsque vous avez explicitement besoin de données de cookie
-
Couches d'abstraction d'entrée : de nombreux frameworks (comme Laravel, Symfony) fournissent des objets de demande qui encapsulent la gestion des entrées en toute sécurité:
$ request-> get ('username'); // explicite, testable et souvent filtré
Validation et désinfection : Valider et désinfecter toujours les entrées, quelle que soit la source. Des outils comme le validateur de Symfony ou les demandes de formulaire de Laravel facilitent cela.
Flux de données explicites : sachez d'où proviennent vos données. Ne laissez pas le temps d'exécution décider pour vous.
- Meilleure sécurité
- Comportement plus prévisible
- Tests et entretien plus faciles
Conclusion: clarté sur la commodité
$_REQUEST
échange la sécurité et la clarté pour une commodité minimale. Dans le développement de PHP moderne, c'est une mauvaise affaire. En utilisant des superglobaux spécifiques et une manipulation de demande structurée, vous gagnez:
Éviter $_REQUEST
ne consiste pas seulement à suivre les règles - il s'agit d'écrire du code en qui vous pouvez faire confiance. Et c'est à cela que sert le développement professionnel de PHP.
Fondamentalement: si vous ne savez pas d'où proviennent vos données, vous ne pouvez pas les sécuriser. Alors ne devinez pas. Être spécifique.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Utilisation de $ _RequestSuperglobalintroduceSecurityRisksksBecauseitCombinesInputfrom $ _get, $ _ Post et $ _cookie, melikedTounpredictableBehavior; 2.tallowsunigingInputSourCestoOverrideIntetendones, telasamalicious

Utilisation de $ _requestroduducesdataambiguityBymergingInputsfrom $ _get, $ _ Post et $ _cookie, faisant en sorte que

$ _RequestesdiscouragedInmodernPhpBecauseitmergesInputfrom $ _get, $ _ post et $ _cookie, créations de grande envergure

$ _Request fusionne obtenir, publier des données et cookies, mais il existe des risques de sécurité et de prévisibilité; Lorsque les principaux conflits, son ordre de remplacement est déterminé par Variables_Order ou Request_Order dans Php.ini, et par défaut EGPCS, c'est-à-dire que les écrasements de publication obtiennent et obtiennent des écrasements de cookie; Par exemple, lorsqu'il y a des paramètres "utilisateur" dans Get, Post et Cookie, la valeur de poste gagne; L'utilisation de $ _Request peut entraîner des vulnérabilités de sécurité, un comportement imprévisible et des difficultés à tester; La meilleure pratique consiste à éviter d'utiliser $ _request, mais devrait explicitement utiliser $ _get, $ _post ou $ _c

Theshiftfrom $ _requesttorequestObjectSresentsAmaJorimprovementInPhpDevelopment.1.requestObjectsAbstrusSuperglobalsIntoAClean, cohérentapi, éliminant laBuilt-infiltring, Sanitisation, etvalid

Il y a last_orderDirectiveInphp.inidettermines quidatasources (get, post, cookie) aremergedInto $ _requestandtheirprecedenance

Éviter $ _RequestDuetoutPredictabledAdAtasourceDedSecurityRisks; 2.Usure $ _getForidempotentoperations likefiltering, $ _ PostForState-changingActionss liseformSubmission; 3.thevaluein $ _requestdependSonrequest_OrderInphp.ini, seniattoinconsissintbehavior; $.

Using$_GETand$_POSTinsteadof$_REQUESTismoresecurebecauseitensurespredictableinputsources,2.ItpreventsparameterconflictsduetooverlappingnamesinGET,POST,andCOOKIE,3.ItstrengthensdefensesagainstCSRFbyenforcingrequestmethodintegrity,4.Itimprovescodeclari
