web-dev-qa-db-fra.com

La clarté nécessaire sur l'utilisation des 403 fonctions

Il suffit de voir l'extrait de code suivant. Je suis tombé sur cela dans l'un des plugins que je lis maintenant.

if ( ! defined( 'ABSPATH' ) ) {
  header( 'Status: 403 Forbidden' );
  header( 'HTTP/1.1 403 Forbidden' );
  exit;
}

Je comprends que ce script envoie une réponse d'en-tête 403 interdite au navigateur pour un accès non autorisé. Mais pourquoi deux 403 en-têtes? Est-ce que le second type de repli sur le premier?

1
Naresh Devineni

La manière appropriée d’envoyer un statut (lorsque WordPress n’est pas disponible) est la suivante:

http_response_code( 403 );

Voir le Manuel de PHP pour sa définition .

Mais dans les fichiers de plug-in, il ne devrait jamais s'agir du code "par défaut" placé au-dessus d'un en-tête de fichier. Voir Il est utile de limiter l'accès direct aux fichiers de thème? pour une discussion.

Dans WordPress, utilisez status_header( 403 ) si vous en avez besoin.


Une note sur le code que vous avez posté:

header( 'Status: 403 Forbidden' );
header( 'HTTP/1.1 403 Forbidden' );

La première ligne est un traitement "spécial" pour PHP fonctionnant en mode CGI, la seconde utilise une version de protocole HTTP spécifique sans aucune vérification. Si la connexion est via HTTP 2 ou 1.1, cela n'a aucun sens.

Les deux sont incorrects, car la manière correcte d’envoyer le statut correct avec header() consiste à utiliser les deuxième et troisième arguments de cette fonction.

Donc, cela fonctionnerait mieux:

header( 'Status: 403 Forbidden', true, 403 );

Le deuxième argument indique à PHP de remplacer d'autres en-têtes portant le même nom, le troisième concerne le statut réel. Le code que vous avez posté est un bon compteur - exemple. :)

7
fuxia