Sicurezza PHP: invia POST allo stesso URL = cattivo?

Ho avuto una risposta su una domanda di ieri sull'invio di dati POST alla stessa pagina con il pattern Post-Redirect-Get come questo:

if (isset($_POST['Submit'])) { // prevent resending data header("Location: " . $_SERVER['PHP_SELF']); } 

Qualcuno ha risposto: invio di dati alla stessa pagina PHP da Javascript, senza AJAX o moduli

È estremamente importnte ai fini della sicurezza Web che un POST non possa essere inviato tramite un semplice URL.

Ora mi piacerebbe sapere cosa c'è di sbagliato in questo? Voglio evitare di utilizzare una pagina separata con il messaggio di conferma, perché interrompe solo l'esperienza utente e da un POV di progettazione è un no-go.

È estremamente importnte ai fini della sicurezza Web che un POST non possa essere inviato tramite un semplice URL.

Penso che la persona che ha detto questo potrebbe aver frainteso te o la sicurezza web.

Non c'è niente di sbagliato nell'usare lo stesso URL per diversi methods di richiesta ( GET , POST , PUT , DELETE , HEAD , ecc.). In effetti, è un'ottima idea.

È estremamente importnte ai fini della sicurezza Web che un POST non possa essere inviato tramite un semplice URL.

Interpreto piuttosto questa frase che non dovrebbe essere ansible che una richiesta GET sullo stesso URL non causi la stessa cosa di una richiesta POST. Quindi verificare $_REQUEST['submit'] invece di verificare implicitamente $_POST['submit'] o $_SERVER['REQUEST_METHOD'] potrebbe essere una violazione.

Forse l'autore ha anche inteso che il module utilizza un token di authentication monouso in modo che siano consentite solo le richieste autenticate.

Sembra che il repeater non abbia pensato alla sua risposta. Immagino che pensasse che ci sarebbero stati alcuni problemi di sicurezza usando $ _SERVER ["PHP_SELF"], ma non riesco a vedere come in questo caso.

Come già accennato, non c'è nulla di sbagliato nel lasciare che lo stesso URL gestisca richieste diverse.

Detto questo, continuo a separare il messaggio di conferma dal module. Non vedo ragioni per cui non dovrei. La validation e i messaggi di errore possono ancora verificarsi nella vista module, ma lasciando che molte condizioni determinino quando è necessario mostrare il messaggio di conferma, il module oi messaggi di errore sembra (IMO) che stai ricevendo un sacco di codice confuso.