Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: Leguim en 19 Agosto 2019, 00:39 am



Título: [Resuelto] ¿Como puedo obtener una URL con PHP desde un archivo AJAX?
Publicado por: Leguim en 19 Agosto 2019, 00:39 am
Buenas noches a todos!

Estaba haciendo un sistema nuevo pero me estanque en un tema, digamos tengo un botón en mi pagina.php que al tocarlo realiza una función (JS) -> que va a llamar a un fichero_ajax.php (ajax)

Correcto... Cuando quiero obtener la URL de la pagina.php  con PHP de la siguiente manera:

En fichero_ajax.php
Código
  1. $url = $_SERVER["PHP_SELF"];
  2.  

Me va a devolver "/pagina/ajax/fichero_ajax.php"
pero yo necesito que me devuelva "/pagina/pagina.php"

Es decir la "URL" de la pagina desde donde se llamo la función JS -> que conecta con el archivo ajax

Muchas gracias!


Título: Re: [Pregunta]: ¿Como puedo obtener una URL con PHP desde un archivo AJAX?
Publicado por: jmpesp en 19 Agosto 2019, 06:34 am
No se puede hacer de esa manera.

La variable de entorno PHP_SELF devuelve la ruta relativa a la raiz del document del archivo que se esta ejecuntado, que en este caso es el archivo que consultas via AJAX.

Lo que si puedes usar es la cabecera "Referer" (asegurate de que tu script js la este enviando correctamente), que contiene la URL completa desde donde se genero la peticion.
Teniendo la URL completa simplemente extraes la URI con parse_url().

Aun asi, debes tener en cuenta que esa cabecera es totalmente manipulable por el cliente y no deberias basarte en ella para realizar ninguna operacion critica.

Ademas, el URI path no siempre corresponde con la ruta relativa del script php que esta atendiendo esa peticion (por ejemplo si usas URL rewrite).

----------------------------

Dejando eso de lado, que es exactamente lo que queres lograr?
Es decir, para que necesitas la ruta del archivo donde se origina la peticion AJAX?

Deberias proveer mas detalles sobre lo que estas haciendo para poder aconsejarte mejor.

Saludos


Título: Re: [Pregunta]: ¿Como puedo obtener una URL con PHP desde un archivo AJAX?
Publicado por: Leguim en 19 Agosto 2019, 20:20 pm
Por razones de seguridad no me gusta nada que los usuarios puedan ejecutar funciones js y mucho menos que entre esas funciones js se puedan usar las funciones que llaman a archivos ajax. Por eso quiero saber desde que paginas se llaman a los archivos o peticiones ajax y decidir si permitirlos o no. Por supuesto esto no me hace la aplicación más segura con esto. Pero si me parece que me puede ayudar mucho.


Título: Re: [Pregunta]: ¿Como puedo obtener una URL con PHP desde un archivo AJAX?
Publicado por: engel lex en 19 Agosto 2019, 21:51 pm
Por razones de seguridad no me gusta nada que los usuarios puedan ejecutar funciones js y mucho menos que entre esas funciones js se puedan usar las funciones que llaman a archivos ajax. Por eso quiero saber desde que paginas se llaman a los archivos o peticiones ajax y decidir si permitirlos o no. Por supuesto esto no me hace la aplicación más segura con esto. Pero si me parece que me puede ayudar mucho.

si tienes usa percepción entonces probablemente tu sistema tenga un hueco de seguridad gigante...

no importa lo que hagas, js será ejecutado si asi el usuario lo desea, y si es un ataque contra tu seguridad es posible que ni si quiera js esté involucrado sino métodos que te hagan creer que es realmente un navegador y que la llamada venga de donde quiera, a fin de cuenta solo son cabeceras del navegador y pueden ser cambiadas a voluntad con un mínimo de conocimientos


Título: Re: [Pregunta]: ¿Como puedo obtener una URL con PHP desde un archivo AJAX?
Publicado por: #!drvy en 19 Agosto 2019, 22:15 pm
Lo que buscas son códigos anti-csrf, normalmente es un campo que contiene un código generado a la hora de cargar la página y luego (en el caso de AJAX), se devuelven más codigos segun se van procesado requests.

Lectura:
https://es.wikipedia.org/wiki/Cross-site_request_forgery
https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF) (https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF))

https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html

Saludos


Título: Re: [Pregunta]: ¿Como puedo obtener una URL con PHP desde un archivo AJAX?
Publicado por: engel lex en 19 Agosto 2019, 22:18 pm
Lo que buscas son códigos anti-csrf, normalmente es un campo que contiene un código generado a la hora de cargar la página y luego (en el caso de AJAX), se devuelven más codigos segun se van procesado requests.

sin embargo a nivel de seguridad usualmente son mas para evitar que usuarios inexpertos salten la seguridad XD

a fin de cuenta un sistema para romper la seguridad incluso en javascript va a buscar enviar sus csrf correctamente XD


Título: Re: [Pregunta]: ¿Como puedo obtener una URL con PHP desde un archivo AJAX?
Publicado por: #!drvy en 19 Agosto 2019, 22:22 pm
Lo más útil de los anticsrf (aparte de su principal cometido que es evitar ejecución de acciones indeseadas desde sitios de terceros), es que te obligan a pasar por una "pasarela" antes de ejecutar/llegar a tu destino.  Por supuesto, no van a evitar que el "atacante" llegue a su destino final, pero si consiguen que tenga que pasar antes por otro sitio... así mantienes un control de flujo bastante útil y puedes saber perfectamente de donde llega un request u otro.

Saludos


Título: Re: [Pregunta]: ¿Como puedo obtener una URL con PHP desde un archivo AJAX?
Publicado por: engel lex en 19 Agosto 2019, 22:26 pm
Lo más útil de los anticsrf (aparte de su principal cometido que es evitar ejecución de acciones indeseadas desde sitios de terceros), es que te obligan a pasar por una "pasarela" antes de ejecutar/llegar a tu destino.  Por supuesto, no van a evitar que el "atacante" llegue a su destino final, pero si consiguen que tenga que pasar antes por otro sitio... así mantienes un control de flujo bastante útil y puedes saber perfectamente de donde llega un request u otro.

Saludos

esto es muy cierto! sin embargo desde el punto de vista de lo que quiere el usuario (evitar que el usuario use su navegador XD ) esto no es tan util, sería mas util usar telex, fax o algo asi XD


Título: Re: [Pregunta]: ¿Como puedo obtener una URL con PHP desde un archivo AJAX?
Publicado por: Leguim en 19 Agosto 2019, 23:41 pm
No quiero que pase esto...

Función JS:
Código
  1. function Enviar_Mensaje(cadena, user)
  2. {
  3.       // cadena = Mensaje que enviará
  4.       // user = id del usuario el cual recibirá dicho mensaje
  5.  
  6.       $.ajax({
  7.       // etc
  8.       })
  9.  
  10.       .done({
  11.        // etc
  12.       })
  13. }
  14.  

Después va a la consola del navegador y escribe "Enviar_Mensaje('123', 7);"
Esto no tiene porque ser un problema de seguridad, para nada... pero ahora imaginate que nose alguna función lo que haga sea dar un rango administrativo "Hacer_Admin(id_user);" se escriba su ID... por supuesto puedo preguntar antes siempre si la persona que esta queriendo dar admin a alguien es un admin.. pero lo que quiero que vean es la vulnerabilidad que existe y que por eso quiero hacer eso.. Pero como no es recomendable hacerlo estoy tratando de obtener la url de la pagina que llamo al fichero.. por supuesto esto no arregla el problema simplemente es una cerradura más.. me queda revisar fichero por fichero y validar todo con php antes de realizar cualquier cosa.

La solución a mi tema es obtener la url desde JS y enviarla por parametro y usarlo en el fichero ajax pero estamos en la misma porque cualquiera puede editar eso.


Título: Re: [Pregunta]: ¿Como puedo obtener una URL con PHP desde un archivo AJAX?
Publicado por: #!drvy en 20 Agosto 2019, 00:10 am
Citar
La solución a mi tema es obtener la url desde JS y enviarla por parametro y usarlo en el fichero ajax pero estamos en la misma porque cualquiera puede editar eso.

Sigues pensando en restringir al usuario en su entorno. Insisto, en JS no puedes restringir nada. Si vas a dar permisos de admin (por ejemplo), haz la consulta AJAX y en el propio PHP comprueba si el usuario puede dar esos permisos y si el que los recibe es el que el usuario dice. Implementa sesiones y estructuras de control.

Saludos


Título: Re: [Pregunta]: ¿Como puedo obtener una URL con PHP desde un archivo AJAX?
Publicado por: Leguim en 20 Agosto 2019, 00:32 am
Sigues pensando en restringir al usuario en su entorno. Insisto, en JS no puedes restringir nada. Si vas a dar permisos de admin (por ejemplo), haz la consulta AJAX y en el propio PHP comprueba si el usuario puede dar esos permisos y si el que los recibe es el que el usuario dice. Implementa sesiones y estructuras de control.

Saludos

Por eso mismo...

Bueno voy a hacer lo posible para que quede perfecto.

Gracias!


Título: Re: [Pregunta]: ¿Como puedo obtener una URL con PHP desde un archivo AJAX?
Publicado por: MinusFour en 20 Agosto 2019, 01:14 am
Técnicamente tu puedes "esconder" estas funciones. Es perfectamente posible que un usuario no pueda usar ninguna de las funciones que tu usas pero la única forma de hacer eso es meter TODO en una IIFE o en ES6 usar bloques:

Código
  1. (function(){
  2. //lo que tu quieras aquí
  3. })();

Pero literalmente, tienes que poner TODO ahí. Olvídate de separar tus archivos JS.

Claro que de todas formas, no importa si un usuario puede usar o no tu JS para ejecutar una función remota en el servidor. Lo que hace JS, lo puedes hacer de otras formas.