[Resuelto] ¿Como puedo obtener una URL con PHP desde un archivo AJAX?

Iniciado por Leguim, 19 Agosto 2019, 00:39 AM

0 Miembros y 1 Visitante están viendo este tema.

Leguim

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 (php) [Seleccionar]

$url = $_SERVER["PHP_SELF"];


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!

jmpesp

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

Leguim

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.

engel lex

Cita de: MiguelCanellas 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.

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

#!drvy

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://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html

Saludos

engel lex

Cita de: #!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.

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

#!drvy

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

engel lex

Cita de: #!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

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Leguim

#8
No quiero que pase esto...

Función JS:
Código (javascript) [Seleccionar]

function Enviar_Mensaje(cadena, user)
{
      // cadena = Mensaje que enviará
      // user = id del usuario el cual recibirá dicho mensaje

      $.ajax({
      // etc
      })

      .done({
       // etc
      })
}


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.

#!drvy

CitarLa 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