Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: Trunchante en 14 Mayo 2019, 11:55 am



Título: Duda con PHP - Diferencia entre GET y POST
Publicado por: Trunchante en 14 Mayo 2019, 11:55 am
Buenas Hackers!

Estoy ahora jugando un poco con PHP y no entiendo varias cosas. Os pongo en contexto, he instalado las herramientas LAMP (Apache{2} + mySQL-server + PHP) y hize así rápido una página index.php que es un Login. SI te logueas bien accedes a la siguiente página y si no te avisa de que el Login es incorrecto volviendo a la misma página.

El caso, viendo un poco el uso de GET y POST entiendo un poco la diferencia, con GET los elementos se envían de forma "pública" sin embargo con POST no sabes lo qué mandas. Al final el login lo dejé usando POST y efectivamente, con mysql puedes comprobar de esta forma si el usuario se manda.
SIn embargo, yo he visto en páginas de wordpress que se supone que ya tiene un prestigio como CMS, hacer el login usando GET, bien es cierto que no se puede pillar porqué va cifrado y tal, pero no entiendo eso (una mala praxis?).

Entonces, esto es para ver si me aclaran un poco la diferencia entre los formularios con GET y POST

Gracias


Título: Re: Duda con PHP - Diferencia entre GET y POST
Publicado por: #!drvy en 14 Mayo 2019, 12:06 pm
Ambos se mandan de forma publica, ambos pueden ser vistos. La diferencia es que uno forma parte de la URL (GET) mientras que el otro forma parte del BODY que se envía en la petición (POST). Para entenderlo realmente hay que entender GET y POST del protocolo HTTP.

GET es una petición con cabeceras y nada más, no tiene contenido.
POST es una petición con cabeceras y contenido.

https://developer.mozilla.org/es/docs/Web/HTTP/Methods
https://en.wikipedia.org/wiki/POST_(HTTP) (https://en.wikipedia.org/wiki/POST_(HTTP))

Ahora bien, dado que GET va en la URL, los datos que se envíen mediante este protocolo son visibles a cualquier ojo, con POST dado que se envían en el BODY, además de no ser visibles en las cabeceras de la petición, pueden ir cifrados gracias al protocolo SSL lo cual le da un layer de seguridad contra los MiTM (ataques man-in-the-middle). Por eso siempre se debe utilizar POST para hacer un login.

Citar
SIn embargo, yo he visto en páginas de wordpress que se supone que ya tiene un prestigio como CMS, hacer el login usando GET,

No te voy a decir que no porque es posible, pero no culpes a un CMS de lo que hacen sus usuarios. Wordpress por defecto usa POST y tiene tokens CSRF para protección adicional lo cual es completamente incompatible con GET. Que dicha funcionalidad se pueda modificar y adaptar a gusto de cada uno.. tambien.

Saludos


Título: Re: Duda con PHP - Diferencia entre GET y POST
Publicado por: Trunchante en 14 Mayo 2019, 12:24 pm
Mmm entiendo. De ahí esa "flexibilidad" que da PHP frente a html (además de las variables superglobales y demás).
Aprovecho para otra duda de no tiene nada que ver con la anterior. Yo podría incluir html PHP y javascript? Es que por ejemplo a la hora de darle a un botón me parece más sencillo hacer onclick=funcionJavascript() que tener que mandar los datos del formulario y tener que procesarlos con if-else y tal. En la práctica no pude hacerlo, aver si me pongo otra vez con  con ello
Nose si se entiende lo que digo. Muchas gracias!


Título: Re: Duda con PHP - Diferencia entre GET y POST
Publicado por: animanegra en 14 Mayo 2019, 12:25 pm
Corrijo ligeramente lo que te comentan, cuando cifras con https cifra también la URL así que da igual utilizar POST o GET, al menos en ese aspecto. La única diferencia es que una va en la propia petición get de la cabecera y otra va en un apartado aparte de la petición con lo que la cantidad de datos no se limita al estipulado por el maximo tamaño de la URL. La seguridad adicional es simplemente que no se visualiza la peticion en la URL y no te lo puede mirar alguien que está al lado tuyo, pero no aporta nada de seguridad.

Peticion pass con GET:
Código:
GET /?user=lalala&pass=1234 HTTP/1.1
Host: www.servidor.com
User-Agent: Mozilla/7.47.0
Accept: */*


Peticion pass con POST:
Código:
POST / HTTP/1.1
Host: www.servidor.com
User-Agent: Mozilla/7.47.0
Accept: */*
Content-Length: 21
Content-Type: application/x-www-form-urlencoded

user=lalala&pass=1234

Dependes siempre del cifrado en ambas para que se envie de una forma que no puedan capturar.

Citar
Mmm entiendo. De ahí esa "flexibilidad" que da PHP frente a html (además de las variables superglobales y demás).

No tiene nada que ver uno y otro (Me refiero a que se utilizan para cosas distintas). Uno procesa en cliente y otro en servidor. Una parte sirve sólo para que el cliente vea las cosas de forma bonita y de presentación y la otra sirve para hacer programas que hagan un procesado en el lado del servidor (consultas a bases de datos, autenticacion, acceso y subida de ficheros)