Foros del Web » Programando para Internet » PHP »

Permitir solo acceso al servidor

Estas en el tema de Permitir solo acceso al servidor en el foro de PHP en Foros del Web. Hola amigos , He montado un código el cual cada x tiempo mediante ajax consulta un dato que se genera y sube al servidor, pero ...
  #1 (permalink)  
Antiguo 03/07/2014, 11:26
 
Fecha de Ingreso: abril-2010
Mensajes: 267
Antigüedad: 14 años
Puntos: 1
Permitir solo acceso al servidor

Hola amigos ,
He montado un código el cual cada x tiempo mediante ajax consulta un dato que se genera y sube al servidor, pero me es importantísimo que a ese archivo php que genera ese dato solo pueda entrar la web, es decir, si yo entro desde el enlace en un ventana o pestaña no me deje acceder, yo he conseguido evitar que ese archivo sea ejecutado desde otro archivo con un if:

Código:
if($_SERVER['SERVER_ADDR'] == $_SERVER['REMOTE_ADDR']) {
}
Me da igual si es un script en php similar a ese o si es htacces, pero necesito hacerlo. Porfavor agradezco muchísimo vuestra ayuda :)

Un Saludo
  #2 (permalink)  
Antiguo 03/07/2014, 13:14
Avatar de Karmac  
Fecha de Ingreso: agosto-2011
Ubicación: Bilbao
Mensajes: 196
Antigüedad: 12 años, 8 meses
Puntos: 34
Respuesta: Permitir solo acceso al servidor

Pongamos que quieres acceder desde index.php a tu archivo, llamado private.php.

index.php
Código PHP:
Ver original
  1. // Definimos una constante.
  2. define('access', 1);
  3.  
  4. include('private.php');

private.php
Código PHP:
Ver original
  1. // Comprobamos que esté definida, cosa que no pasará si se accede directamente al archivo.
  2. if ( ! defined('access') ) { die('No se permite el acceso directo a este archivo.'); }

Saludos, espero que sirva.

PD: puedes usar .htaccess también, busca el Google o en el foro.
  #3 (permalink)  
Antiguo 04/07/2014, 05:12
 
Fecha de Ingreso: abril-2010
Mensajes: 267
Antigüedad: 14 años
Puntos: 1
Respuesta: Permitir solo acceso al servidor

Hola Karmac,
Muchas gracias por tu respuesta :), esa solución la conocía, se me ha venido a la mente nada mas leerla XD Jaja, muchas gracias por la respuesta, verás, el formulario se envía mediante ajax por post, y recibe datos y escribe, en el localhost y el host donde alojaré el script me va perfectísimamente (con el ejemplo que me has escrito), pero a la hora de incorporar el ajax no :/, ¿Sabes algún sitio donde lo expliquen para hacerlo con htacces?

Un Saludo y gracias de verdad por tu tiempo y respuesta ^^
  #4 (permalink)  
Antiguo 04/07/2014, 08:47
Avatar de Karmac  
Fecha de Ingreso: agosto-2011
Ubicación: Bilbao
Mensajes: 196
Antigüedad: 12 años, 8 meses
Puntos: 34
Respuesta: Permitir solo acceso al servidor

Con que no te va bien con el AJAX te refieres a que te niega el acceso, ¿verdad? Ciertamente he tenido este mismo problema tuyo mil veces, y sigo buscando respuestas.

Una solución puede ser comprobar que la petición se hizo mediante AJAX:
Código PHP:
Ver original
  1. if ( empty($_SERVER['HTTP_X_REQUESTED_WITH']) OR strtolower($_SERVER['HTTP_X_REQUESTED_WITH'] != 'xmlhttprequest') )
  2. {
  3.     # code...
  4. }

Llegué a la conclusión de que este método no es 100% seguro. Quizá alguien que sepa más en seguridad que yo pueda ayudarte.

Ayer mismo encontré un fragmento de código al que no le presté mucha atención, que evitaba accesos mediante AJAX entre diferentes dominios. Acabo de ver su importancia gracias a tu pregunta jeje Si lo encuentro edito y te lo muestro.

En cuanto al .htaccess, como bien te he dicho, nunca he sabido usarlo bien, tendrás que buscar en Google o esperar a que alguien responda. Lo mío no es la seguridad (hasta cierto punto básico, claro).

Saludos.

EDITO: se me olvidó decirte que WordPress (supongo que entre otros CMS) utiliza un sistema de tokens, códigos que sólo duran X periodo de tiempo y se usan como claves a la hora de hacer la petición. Busca sobre ello también, mis conocimientos no dan para más.
  #5 (permalink)  
Antiguo 04/07/2014, 09:17
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Permitir solo acceso al servidor

Creo q esto os valdría...

https://developer.mozilla.org/en-US/...s_control_CORS

Saludos :D
__________________
>> Eleazan's Source
>> @Eleazan
  #6 (permalink)  
Antiguo 04/07/2014, 12:49
 
Fecha de Ingreso: abril-2010
Mensajes: 267
Antigüedad: 14 años
Puntos: 1
Respuesta: Permitir solo acceso al servidor

¡Hola Karmac! ,
Sí, eso exactamente, he estado pensando en entremezclar, observa el siguiente ejemplo:

Cita:
// Comprobamos si es mediante ajax la petición

if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) OR strtolower($_SERVER['HTTP_X_REQUESTED_WITH'] != 'xmlhttprequest')) {
} else {

// Comprobamos si no se accede desde la web y es un acceso directo al archivo

if ( ! defined('gfsjkgdjdyijm8') ) {

// Si hemos accedido directamente no dejamos que se ejecute el script

exit();

}

}
En caso de que sea ajax no hacemos nada y mostramos la web, pero en caso de que no, comprobamos si está definido. Pero de todas formas si has encontrado agujeros de seguridad prefiero seguir buscando :/, pues estamos en las mismas jajaja XD, sobre lo de los tokens he probado a hacerlo alguna vez y me ha funcionado, es decir, lo he hecho con sesiones, genero con php un numero aleatorio y lo guardo en un get, luego compruebo si el get es igual que la sesion en un if, si es así lo muestro, en mi caso eso no me vale :/, ya que debo mantener el ajax abierto durante todo el momento cuando esté la página abierta, y si caduca estan abierta se me liaría. :/

Muchas gracias :)))

¡Hola Eleazan! :D ,
Le he estado hechando un ojo al enlace, pero no me aclaro muy bien ya que tengo poquísimo conocimiento de htacces, ¿A qué código en concreto te refieres? :/

¡Un Saludo y muchísimas gracias! :)
  #7 (permalink)  
Antiguo 07/07/2014, 08:13
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Permitir solo acceso al servidor

Nada, no te preocupes...

Investigué algo más sobre el tema, y veo que se puede "evitar" eso, asiq no es un buen método :)

Y sobre ajax... se me ocurren dos cosas:

Añadir algun "header custom", para poder checkearlo y permitir la ejecucion o no..

O hacer algún tipo de "launcher" de AJAX.. .que incluya ese archivo con el define de la variable
__________________
>> Eleazan's Source
>> @Eleazan
  #8 (permalink)  
Antiguo 07/07/2014, 12:52
 
Fecha de Ingreso: abril-2010
Mensajes: 267
Antigüedad: 14 años
Puntos: 1
Respuesta: Permitir solo acceso al servidor

¡Hola Eleazan! ,
Muchas gracias por tu tiempo enserio, miles de gracias :), pues nunca he oido hablar de ese header custom, he estado hechando un ojo por internet y encontré esto:

http://stackoverflow.com/questions/6351593/jquery-ajax-custom-header
http://stackoverflow.com/questions/7686827/how-can-i-add-a-custom-http-header-to-ajax-request-with-js-or-jquery
http://stackoverflow.com/questions/20356374/add-custom-http-header-to-all-jquery-ajax-requests

¿Que debería hacer exactamente? Si me pudieras poner un breve ejemplo te lo agradecería :)

¡Un Saludo!
  #9 (permalink)  
Antiguo 08/07/2014, 00:21
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Permitir solo acceso al servidor

Algo como...

Código Javascript:
Ver original
  1. $.ajax({
  2.     url: 'script.php',
  3.     headers: { 'el-header-q-yo-quiera': 'un valor' }
  4. });

Esto deberia funcionar....

Pero claro,cualquiera q sea capaz de leer tu código js sabrá hacer la petición...

A no ser que el header sea cualquier tipo de valor de la session, o similar, q se regenere cada vez
__________________
>> Eleazan's Source
>> @Eleazan
  #10 (permalink)  
Antiguo 08/07/2014, 04:35
 
Fecha de Ingreso: abril-2010
Mensajes: 267
Antigüedad: 14 años
Puntos: 1
Respuesta: Permitir solo acceso al servidor

Hola Elazan,
Claro, pero como protejo el php de peticiones externas al servidor con:

Cita:
if($_SERVER['SERVER_ADDR'] == $_SERVER['REMOTE_ADDR']) {
}
Y el define, si entran directamente a ese archivo les salta el aviso, y no pueden ejecutarlo desde el exterior del host, creo que habría suficiente seguridad. ¿No?

¡Un Saludo y gracias por tu ayuda! :D
  #11 (permalink)  
Antiguo 08/07/2014, 05:09
Avatar de Karmac  
Fecha de Ingreso: agosto-2011
Ubicación: Bilbao
Mensajes: 196
Antigüedad: 12 años, 8 meses
Puntos: 34
Respuesta: Permitir solo acceso al servidor

Cita:
Iniciado por alejandromaringomez Ver Mensaje
Hola Elazan,
Claro, pero como protejo el php de peticiones externas al servidor con:



Y el define, si entran directamente a ese archivo les salta el aviso, y no pueden ejecutarlo desde el exterior del host, creo que habría suficiente seguridad. ¿No?

¡Un Saludo y gracias por tu ayuda! :D
Siento no haber estado pendiente estos días, me encontraba de viaje.

¡Ese es el código que te mencione en mi último post pero no conseguí encontrar! Supongo que si combinas ese con el otro que envié, el que comprueba si la petición se hizo mediante AJAX, tendrás suficiente seguridad. Investiga un poco más de todos modos lo de los tokens jeje Puedes mirar el código de fuente de WordPress, alguna vez lo he hecho y se sacan cositas.

Saludos.

Etiquetas: permitir, servidor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:59.