Ayuda Proteger $_GET[''] -  PHP Ayuda Proteger $_GET[''] - PHP - Página 4


Página 4 de 4 PrimeroPrimero ... 234
Mostrando resultados del 31 al 37 de 37
  1. #31
    Cita Iniciado por yeik1989 Ver Mensaje
    Aun así, siempre que la petición realice un cambio en el servidor (y no sea una simple consulta) se debe usar POST y no GET, y no solo eso, se deben utilizar cookies con un CSRF Token. Si no, aunque te protejas de la SQL Injection pueden hacerte un ataque CSRF (a ti o a tus usuarios) que básicamente consiste en invocar acciones en el servidor por parte del usuario al que atacan sin su consentimiento. Ejemplo:

    Un archivo php procesa la operación de enviar dinero de una cuenta a otra. Si se usa GET o se usa POST sin CSRF token un atacante puede crear una petición que envie la acción de enviar dinero desde la cuenta del usuario atacado a la suya y colocar un script para lanzar esa acción en una página web que más tarde tendrá que conseguir que vea la victima. Si la victima tiene una sesión abierta en el servidor comprometido y visita la web del atacante automáticamente le enviará la cantidad de dinero que se haya fijado en el script de ataque sin siquiera enterarse.


    Esto sucede porque las peticiones GET se saltan la protección de cross-origin y las peticiones POST si se hacen desde un action de un formulario también (no por ajax, ahi salta el cross-origin).
    Corrígeme si me equivoco, pero entonces si utilizo $_SERVER['PHP_SELF'] no hay manera de que hagan ataque CSRF, ya que el proceso de envìo de datos se realiza antes de que se carguen las cabeceras del sitio.
    Citar Citar  

  2. #32
    Cita Iniciado por xcodex Ver Mensaje
    Corrígeme si me equivoco, pero entonces si utilizo $_SERVER['PHP_SELF'] no hay manera de que hagan ataque CSRF, ya que el proceso de envìo de datos se realiza antes de que se carguen las cabeceras del sitio.
    Quizás sea por desconocimiento pero no entiendo que quieres decir.
    PHP_SELF te devuelve la ruta del script.php que se está ejecutando, ¿para qué querrías recuperar eso?

    Lo que debes hacer para evitar un ataque CSRF es generar en el servidor un token aleatorio y guardarlo en algún sitio relacionado con el usuario (generalmente $_SESSION o una cookie). Luego ese código cada vez que renderices un formulario lo renuevas y lo pintas en el formulario como un hidden input. Al procesar la request POST del formulario compruebas el token de $_POST con de la cookie o $_SESSION y si coinciden no hay ataque, si son distintos hay ataque (y lo gestionas como creas conveniente).


    Renderizando el hidden input en el formulario:
    Código PHP:
    <?php
    $_SESSION
    ["token"] = md5(uniqid(mt_rand(), true));
    ?>
    <input type="hidden" name="csrf" value="<?php echo $_SESSION["token"]; ?>">
    Validando si hay ataque o no:
    Código PHP:
     if (isset($_POST["csrf"]) && $_POST["csrf"] == $_SESSION["token"]) {
           
    executeWhateverActionInServer();

    Citar Citar  

  3. #33
    usa mysql pdo
    Citar Citar  

  4. #34
    Cita Iniciado por yeik1989 Ver Mensaje
    Quizás sea por desconocimiento pero no entiendo que quieres decir.
    PHP_SELF te devuelve la ruta del script.php que se está ejecutando, ¿para qué querrías recuperar eso?

    Lo que debes hacer para evitar un ataque CSRF es generar en el servidor un token aleatorio y guardarlo en algún sitio relacionado con el usuario (generalmente $_SESSION o una cookie). Luego ese código cada vez que renderices un formulario lo renuevas y lo pintas en el formulario como un hidden input. Al procesar la request POST del formulario compruebas el token de $_POST con de la cookie o $_SESSION y si coinciden no hay ataque, si son distintos hay ataque (y lo gestionas como creas conveniente).


    Renderizando el hidden input en el formulario:
    Código PHP:
    <?php
    $_SESSION
    ["token"] = md5(uniqid(mt_rand(), true));
    ?>
    <input type="hidden" name="csrf" value="<?php echo $_SESSION["token"]; ?>">
    Validando si hay ataque o no:
    Código PHP:
     if (isset($_POST["csrf"]) && $_POST["csrf"] == $_SESSION["token"]) {
           
    executeWhateverActionInServer();

    Entiendo la idea, pero.. ¿el campo tipo hidden no podría ser modificado por un atacante mediante "clic derecho -> inspeccionar elemento?.
    Citar Citar  

  5. #35
    Registro
    28-marzo-2014
    Ubicación
    Mexico
    Edad
    22
    Mensajes
    510
    Cita Iniciado por xcodex Ver Mensaje
    Entiendo la idea, pero.. ¿el campo tipo hidden no podría ser modificado por un atacante mediante "clic derecho -> inspeccionar elemento?.
    Podria ser modificado pero al comparar los tokens en back-end y al no coincidir no se realiza ninguna acción. CSRF/XSRF son ataques para ejecutar una acción sin la autorización o conocimiento del usuario.

    Imagina que en tu app tienes un logout con esta url: /logout.php

    Y a alguien se le ocurre comentar: <img src="/logout.php">

    Al entrar donde este ese comentario directamente te cerraría sesión. Ahi entra el token, algo aleatorio, único por sesión, difícil de adivinar, si no coincide no hace nada.

    Suerte
    Citar Citar  

  6. #36
    Cita Iniciado por Zarat Ver Mensaje
    Podria ser modificado pero al comparar los tokens en back-end y al no coincidir no se realiza ninguna acción. CSRF/XSRF son ataques para ejecutar una acción sin la autorización o conocimiento del usuario.

    Imagina que en tu app tienes un logout con esta url: /logout.php

    Y a alguien se le ocurre comentar: <img src="http://forobeta.com/logout.php">

    Al entrar donde este ese comentario directamente te cerraría sesión. Ahi entra el token, algo aleatorio, único por sesión, difícil de adivinar, si no coincide no hace nada.

    Suerte
    Muchísimas gracias!!!!, entendido
    Citar Citar  

  7. solo usen laravel, en 7 días lo manejan super fácil y ya se olvidan de todos esos problemas jajaja
    Citar Citar  

Página 4 de 4 PrimeroPrimero ... 234


Temas similares

  1. Ayuda con script para proteger mi contenido contra plagio
    Hola, realmente no sé si este tema va en este foro, pero al estar relacionado con un Blog de Blogger, lo pensé dejar aqui. Bueno, mi duda es la...
    Respuestas: 3
    Último mensaje: 28-mar-2014
  2. Neceseito ayuda como proteger una fanpage :(
    Ayuda porfavor necesito saber proteger pagins
    Respuestas: 1
    Último mensaje: 19-sep-2013
  3. Formulario de contacto con $_GET
    Buenas tardes, estoy buscando un formulario de contacto para Wordpress con el que poder enviarle un valor via $_GET o de alguna otra manera, les...
    Respuestas: 3
    Último mensaje: 21-nov-2011
  4. Problema con $_GET - Urgente por favor
    Buenas tardes amigos de forobeta: Tengo el siguiente problema: tengo un archivo llamado index.php y desearía que al acceder a...
    Respuestas: 10
    Último mensaje: 06-nov-2011

Normas de publicación

  • No puedes crear nuevos temas
  • No puedes responder mensajes
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •