usuario restringir por paginas mediante loguearse limitar las intentos ingreso hace evitar entrar control como bloquear administrador acceso php ajax security

por - ¿Cómo puedo restringir el acceso a algunas páginas de PHP solo desde páginas dentro de mi sitio web?



login de usuario y administrador en php y mysql (6)

Tengo en mi sitio web una página PHP que recupera datos de mi base de datos para presentarlos en mi sitio web. Esta página se llama a través de AJAX. ¿Cómo puedo restringir el acceso a él solo desde las páginas dentro de mi sitio web, por lo que los usuarios que quieran abusar de él y obtener estos datos del sitio web (por ejemplo, publicar una solicitud HTTP desde su servidor) no podrán hacerlo?


En realidad, esto no se puede hacer si se establece como se indica anteriormente, sería necesario rediseñar e implementar algún tipo de esquema de autenticación, pero incluso eso puede ser emulado. La respuesta corta es que si un navegador web puede acceder a él, cualquier cosa puede acceder a él siempre que simule ser un navegador.

Hay cosas que podría hacer para que sea más difícil para alguien, como verificar los campos de encabezado HTTP como Referer y User-Agent, e implementar la verificación de la sesión en las llamadas AJAX.


Esto es lo que hago,

  1. En su sitio web, cree una cadena secreta. Uso la clave HMAC ($ _ SERVER [''REMOTE_ADDR'']).
  2. Escriba el secreto en una var. Javascript
  3. En la llamada AJAX, pase esta cadena como un parámetro.
  4. En el servidor AJAX, haz el hash nuevamente. Si coincide con el parámetro, la llamada es de su página.

EDITAR: Ejemplos de código,

En su sitio web, usted hace esto,

$key = ''supersecretkey''; // This is your security, don''t expose this $nonce = rand(); $timestamp = time(); $signature = hash_hmac(''sha1'', $_SERVER[''REMOTE_ADDR''] . $nonce . $timestamp, $key);

Imprime los vars a la página,

<script type="text/javascript"> <?php echo " var signature = ''" . $signature . "'';/n"; echo " var nonce = ''" . $nonce . "'';/n"; echo " var timestamp = ''" . $timestamp . "'';/n"; ?> </script>

Cuando haces una llamada AJAX, pasa los 3 parámetros al servidor,

http://example.com?signature=...&nonce=...&timestamp=...

En el servidor AJAX, haga el cálculo nuevamente,

$key = ''supersecretkey''; // This is your security, don''t expose this $nonce = $_REQUEST[''nonce'']; $timestamp = $_REQUEST[''timestamp'']; $signature = hash_hmac(''sha1'', $_SERVER[''REMOTE_ADDR''] . $nonce . $timestamp, $key); if ($signature == $_REQUEST[''signature'']) // the call if from my page.

También puede chequear la marca de tiempo para la moneda y nonce para la reproducción (necesita sesión o almacén de datos).



JavaScript que se ejecuta en otro sitio no podrá acceder a su sitio debido a la Política de mismo origen para XHR . Pero nada impide que alguien cree un script PHP + CURL para "proxy" los datos de su ajax respaldado para que parezca como si se estuviera ejecutando en su servidor. Tratar de poner en la lista negra a los clientes es complicado, las direcciones IP son baratas y los servidores http gratuitos son abundantes.

En resumen, no hay nada especial acerca de su javascript. Un cliente puede hacer lo que quiera y no puede obligarlo a comportarse, esta es la base de la "confianza del sitio del cliente". Un hacker puede usar algo como tamperdata o incluso firebug para identificar las solicitudes HTTP y podrá reproducirlas o forjarlas con CURL.

Podría intentar ofuscar su javascript. Pero al final del día, un atacante simplemente va a reproducir la solicitud http, y hay absolutamente todo lo que puede hacer al respecto.


Por desgracia, eso no es posible. Cualquier cosa que Javascript pueda hacer, un ''abusador'' también puede hacer desde su servidor. Puedes hacerlo más difícil ofuscando el javascript y el protocolo, haciendo que sea más difícil olfatear. Hay varios ofuscadores de JavaScript gratuitos y no gratuitos (también conocidos como "minimización") disponibles. Ofuscar el protocolo que puede hacer mediante la implementación de un esquema de cifrado simple (hacerlo más avanzado no ayudará, ya que la clave siempre debe estar integrada en su código de todos modos) para los datos enviados y recibidos.


Similar a @ ZZ-coder answer, pero puedes hacerlo con cookies.

1) Establezca la cookie en el servidor (hash de "dirección IP + secreto"), una cookie no persistente que dura solo una sesión, después de que el usuario inicie sesión.

2) Verifique la cookie en el servidor durante las solicitudes AJAX (porque las cookies también se envían con solicitudes AJAX)

Esto es similar a la respuesta de @ZZ-coder, pero puede omitir la parte JS por completo.