2010-10-26 13 views
5

tuve una respuesta en una pregunta de ayer sobre el envío de datos de correo a la misma página con el Post-Redirect-Get pattern así:Seguridad de PHP: enviar POST a la misma URL = ¿mal?

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

Alguien respondió: sending data to same PHP page from Javascript, no AJAX or forms

Es extremadamente importante para los fines de la Web seguridad de que un POST no se puede enviar a través de una URL simple.

Ahora me gustaría saber qué hay de malo en esto? Quiero evitar el uso de una página separada con el mensaje de confirmación, ya que simplemente rompe la experiencia del usuario y desde un punto de vista de diseño es un no-go.

+1

No estoy seguro de entender lo que quiere decir la persona cuando dice que es importante que la POST no se envíe a través de una URL "simple". –

+0

aquí está el enlace: http://stackoverflow.com/questions/4016968/sending-data-to-same-php-page-from-javascript-no-ajax-or-forms La persona tiene una reputación de 26K. – FFish

+0

Reputación en SO no significa todo * tanto * ... (25K al momento de escribir esto);) – deceze

Respuesta

6

Es extremadamente importante para los fines de la seguridad web que un POST no se pueden enviar a través de una simple URL.

Creo que la persona que dijo esto podría haber entendido mal usted o la seguridad web.

No hay nada malo en usar la misma URL para diferentes métodos de petición (GET, POST, PUT, DELETE, HEAD etc). De hecho, es una muy buena idea.

+0

Agregué el enlace – FFish

+4

+1 ... de hecho, así es como se supone que RESTfulness funciona. – deceze

0

Parece que el replicador no pensó en su respuesta. Me imagino que estaba pensando que habría algunos problemas de seguridad al usar $ _SERVER ["PHP_SELF"], pero no puedo ver cómo en este caso.

Como ya se ha mencionado, no hay nada de malo en dejar que la misma URL maneje diferentes solicitudes.

Dicho esto, sigo separando el mensaje de confirmación del formulario. No veo razón de por qué no debería. Los mensajes de validación y de error todavía pueden aparecer en la vista de formulario, pero al dejar que muchas condiciones determinen si debe mostrar el mensaje de confirmación, el formulario o los mensajes de error parecen (IMO) estar recibiendo un código desordenado.

1

Es extremadamente importante para fines de seguridad web que un POST no se pueda enviar a través de una URL simple.

prefiero interpretar esta frase que no debería ser posible que una petición GET en la misma URL no causa el mismo como una solicitud POST. Por lo tanto, consultar $_REQUEST['submit'] en lugar de verificar implícitamente $_POST['submit'] o $_SERVER['REQUEST_METHOD'] podría ser una infracción.

Quizás el autor también quiso decir que el formulario utiliza algún token de autenticación de un solo uso para que solo se permitan las solicitudes autenticadas.

Cuestiones relacionadas