$_GET en PHP
En este artículo veremos como funciona $_GET en PHP. $_GET
es un array asociativo de variables pasado al script actual vía parámetros URL.
Veamos un ejemplo realmente simple. A continuación, haremos un formulario que le pasaremos un nombre, el cual será pasado por URL al mismo path con $_SERVER['PHP_SELF']
En mi caso he hecho todos los ejemplos en una carpeta tutorialphp
$_GET<?php $form =<<<HTML <form method="GET" action="{$_SERVER['PHP_SELF']}"> <input type="text" name="name" placeholder="write your name here"> <input type="submit" value="confirm"> </form> <hr/> HTML; echo "<h1>Ejemplo de $_GET -Blastcoding.com</h1>"; echo $form; if(isset($_GET['name'])){ echo "hola {$_GET['name']}"; }
Vea que en la URL por Ejemplo si en el form puse Luis será la siguiente luego de correr este:
http://localhost/tutorialphp/get.php?name=Luis
Okey, Pero que pasa si tenemos más de una variable?
Retomemos el formulario y agreguemos un input más en este caso el apellido.
$form =<<<HTML <form method="GET" action="{$_SERVER['PHP_SELF']}"> <input type="text" name="name" placeholder="write your name here"> <input type="text" name="surname" placeholder="write your surname here"> <input type="submit" value="confirm"> </form> <hr/> HTML; echo "<h1>Ejemplo de $_GET -Blastcoding.com</h1>"; echo $form; if(isset($_GET['name']) && isset($_GET['surname'])){ echo "hola {$_GET['name']} {$_GET['surname']}"; }
Por ejemplo, en este caso, si escribo, por ejemplo, Alan en el campo name(nombre) y Wake en el campo surname(apellido) ¿cómo será nuestra URL?
Nuestra URL será la siguiente:http://localhost/tutorialphp/get.php?name=Alan&surname=Wake
¿Cómo podemos ver nuestras variables en las URLs están delimitadas del path(la ruta) a la página por? y entre ellas por &
Pon la siguiente ruta en tu página cambiando el nombre y el apellido por el que quieras en la ruta del navegador. En mi caso pondré Wolo en name y lo en surname.
http://localhost/tutorialphp/get.php?name=Wolo&surname=lo
El resultado será que nos escribirá Wolo lo en la pantalla de nuestro navegador, ya que en nuestro archivo PHP recibiremos el valor de name y surname en la variable superglobal $_GET.
Como puede estar pensando, este meto de pasar los datos permite al usuario pasar el dato por la URL
Usos
Ahora bien, esto está muy bien, pero debe de tener en cuenta de que el dato que le permite poner al usuario no debería ser un dato personal, como por ejemplo passwords o nombres de usuario o información sensible.
Tenga en cuenta que estos datos quedan en el historial del navegador, también deberíamos chequear de que estos datos no sean ingresables por cualquiera.
Por otro lado, un lugar útil donde usar esto sería el search de nuestro programa y de hecho hay un CMS que lo usa en esto WordPress. Hay un artículo sobre search en WordPress que puede que te interese
Seguridad
Por otro lado, algo que tenemos que tener en cuenta es que todo sitio por donde le permitamos poner información a nuestro usuario puede ser un punto de ingreso para alguien con malas intenciones que quiera hackear a nuestro sitio.
Esto talvez no sea fácil de ver, puede que diga, ¿cómo va a hackear mi sitio alguien desde un search? Pues si puede hacerlo tenga en cuenta que estamos haciendo una consulta SQL esto le permitirá al atacante usar una inyección SQL en nuestro sitio, permitiéndole conseguir información sensible y en el peor de los casos borrar nuestra base de datos.
Para evitar que una inyección SQL o un ataque XSS lo mejor es que realicemos una validación de lo que estamos obteniendo en nuestra entrada, usar store procedures, vistas en SQL o similares en el lenguaje o Framework que utilicemos.
Esto lo podemos evitar utilizando los métodos query y prepare de forma correcta dentro de la extensión PDO de PHP o en la extensión MySQLi de PHP.
También, como antes expresamos, podríamos utilizar store procederes de SQL y vistas, pero es más recomendable utilizar los métodos prepare and query.
Para evitar los ataques XSS podemos utilizar protección CSRF en PHP y también podemos utilizar CSP en PHP. Tenga en cuenta que CSP no es infalible y, por tanto, es recomendable usar CSRF también.
Estas 2 formas de protegernos puedes verlas como capas de seguridad, no quiere decir que una suplante a la otra,