Con php posso vedere l'indice "REDIRECT_STATUS" nell'array $ _SERVER ma php.net non ne parla. Ho una pagina di errore personalizzata che genera un 404 ma "REDIRECT_STATUS" è ancora 200. Quindi a che cosa si riferisce esattamente il codice di stato?
risposta
Non ho mai usato questa intestazione HTTP prima, ma quello che posso capire sull'URL che @Darren ha pubblicato è che puoi indicare tutti i tuoi errori (quegli errori che risultano in un'intestazione HTTP 4xx o 5xx) a solo un file php. E in quel file php puoi sapere quale specifico errore si verifica accedendo a questa intestazione HTTP REDIRECT_STATUS.
'REDIRECT_STATUS' non è una" intestazione HTTP ". Le intestazioni delle richieste HTTP sono trasformate in 'HTTP_
Il php-src code suggerisce la documentation link, vale a dire
<p>For more information as to <i>why</i> this behaviour exists,
see the <a href=\"http://php.net/security.cgi-bin\">\
manual page for CGI security</a>.</p>\n\
leggere di sicurezza CGI. Con la variabile REDIRECT_STATUS
- non è un'intestazione HTTP ma una variabile passata dal server web al programma CGI, in questo caso il processo php-cgi o php-fpm - si dice al processo php-cgi o php-fpm che la richiesta è stata elaborata dal server Web in modo controllato e non in qualche modo, accedendo direttamente a questi script CGI.
Storicamente il server Web è stato configurato per gestire i file binari CGI in una directory speciale, ad esempio $DOCROOT/cgi-bin
, e hai reso accessibili tutti gli script CGI tramite qualche URL http://SERVERNAME/cgi-bin/
.
Ora, se si chiama un programma CGI PHP tramite un URL (diretto) http://SERVERNAME/cgi-bin/php-cgi/PATH_TO_PHP_SCRIPT
, il comportamento predefinito di php-cgi è elaborare il documento /PATH_TO_PHP_SCRIPT
e quindi potrebbe ignorare i controlli di accesso dei server Web. Il documento /PATH_TO_PHP_SCRIPT
verrà elaborato, anche se il server potrebbe non consentire/PATH_TO_PHP_SCRIPT, poiché la richiesta ha già lasciato il server Web e inserito il processo PHP. Con l'aiuto di php, un server di questo tipo avrebbe perso le informazioni e avresti avuto bisogno di un altro livello di controllo di accesso per tutti gli script PHP.
Per interrompere questo comportamento è possibile configurare il programma PHP-CGI in modo che gestisca solo le richieste che impostano l'intestazione REDIRECT_STATUS
, impossibile per un client esterno, da impostare nella richiesta diretta. Solo il server web, nel mezzo tra client e php, può impostare questa intestazione e il server Web suggerisce uno stato HTTP, ad esempio 200, 404, 403 o quello che ti piace, e consente a PHP di elaborare questo stato. Ma anche la pura esistenza di questa intestazione informa il processo PHP, che la richiesta è stata elaborata in modo regolare dal server web.
Opinione: Il modo migliore per proteggersi da un tale uso sarebbe, per configurare il server Web per non consentire chiamate dirette a PHP CGI attraverso un/cgi-bin/percorso predefinito.
- 1. Recuperare REDIRECT_STATUS con error_page
- 2. PHP $ _SERVER ['REMOTE_ADDR'] vuoto
- 3. PHP $ GLOBALS mancante $ _SERVER
- 4. PHP $ _SERVER ['REMOTE_ADDR'] mostra IPv6
- 5. cos'è Python equivalente a PHP $ _SERVER?
- 6. Tutti i browser supportano PHP $ _SERVER ['HTTP_X_REQUESTED_WITH']?
- 7. Qual è l'equivalente Perl di PHP $ _SERVER [...]?
- 8. Dove impostare PHP $ _SERVER ['DOCUMENT_ROOT'] Trailing Slash?
- 9. Perché $ _SERVER ["PHP_AUTH_USER"] e $ _SERVER ["PHP_AUTH_PW"] non sono impostati?
- 10. Apache mod_rewrite REDIRECT_STATUS condizione che causa elenco di directory
- 11. $ _SERVER ['HTTP_HOST'] non impostato
- 12. Impostazione di un valore $ _SERVER php ($ _SERVER ['something']) utilizzando Apache .htaccess
- 13. $ _SERVER ['PHP_AUTH_USER'] è vuoto
- 14. Cron Job $ _SERVER issue
- 15. JSP o JavaScript equivalente a $ _SERVER di PHP ["HTTP_HOST"]?
- 16. Alternativa per $ _SERVER ['HTTP_REFERER'] Variabile PHP in MSIE
- 17. apache_request_headers() versus $ _SERVER
- 18. $ _SERVER ["SCRIPT_URI"] non funziona? alternativa?
- 19. È $ _SERVER ['REQUEST_METHOD'] ancora valido?
- 20. Cosa fa $ _SERVER da solo?
- 21. di $ _SERVER vars?
- 22. quanto è sicuro $ _SERVER ["HTTP_HOST"]?
- 23. Come posso accedere alle intestazioni delle richieste che non compaiono in $ _SERVER?
- 24. PHPUnit, superglobal vars. Come impostare il test in modo che $ _SERVER e $ _GET siano impostati correttamente?
- 25. Come seleziono solo il dominio principale da $ _SERVER ['HTTP_REFERER'] ;?
- 26. $ _SERVER ['REMOTE_ADDR'] non sta fornendo l'indirizzo IP corretto
- 27. isset ($ _ POST [ 'submit']) vs $ _SERVER [ 'REQUEST_METHOD'] == 'POST'
- 28. Can $ _SERVER ['REMOTE_USER'] può essere falsificato?
- 29. $ _SESSION creato ma non esiste PHPSESSID in $ _SERVER ['HTTP_COOKIE']
- 30. $ _SERVER ["SCRIPT_URL"]: quando è presente in modo affidabile?
[** 'Questo dovrebbe far luce» **] (http://www.php.net//manual/en/reserved.variables.server.php#105602) (tratto da php.net $ _SERVER manuale) – Darren
Sì, l'ho visto, ma in realtà non spiega molto in un modo che io possa capire. – billynoah
Queste variabili provengono da qualsiasi cosa stia eseguendo PHP ... nel tuo caso, probabilmente il tuo server web. Che server stai usando? – Brad