Recientemente comencé a codificar fuertemente scripts soportados por AJAX en PHP, es decir, los archivos a los que se accede por las llamadas AJAX también se pueden usar directamente, ¿cómo desactivarlos?AJAX only access
Respuesta
No puede evitar esto de manera confiable. La clave en realidad es no considerar a alguien accediendo a este archivo directamente como un problema de seguridad: planifique que esto sea posible y estará en un lugar mucho más seguro.
Algunas personas podrían recomendar código que se parece a esto (o similar):
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH'])
&& strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
// more code here
}
Sin embargo, el quid de la cuestión es que las cabeceras HTTP pueden ser falseadas con bastante facilidad y no son un medio de asegurar el código. En mis pruebas en un sitio concurrido hace un tiempo noté que estos encabezados en realidad no son tan confiables.
No hay forma de denegar directamente el acceso. Dado que una consulta siempre se puede diseñar para que coincida con cualquier criterio que se le ocurra.
Si XmlHttpRequest se utiliza para consultar el servidor se añade una cabecera que puede ser detectada usando algo como:
/* AJAX check */
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
//Do something here
}
Uso Sesiones en su aplicación.
Edición:
registrar su sitio en una sesión, utilizo UUID para eso.
Establezca una cookie con el mismo valor, que utiliza en la sesión.
Envíe su solicitud AJAX con un parámetro que también incluya este valor.
Compara los valores de la sesión, la cookie y el parámetro.
Como otras personas han sugerido en sus respuestas, esto no es posible. Esto se debe a uno de los principios básicos de la seguridad informática: nunca se puede confiar en el cliente. Es por eso que validamos todas las entradas del cliente, etc.
En lugar de tratar de impedir que otros clientes accedan a sus servicios, dedique tiempo a escribir servicios web defensivos. Es decir, asegúrese de que los usuarios malintencionados no puedan deslizar inyecciones u otros ataques a través de su lógica comercial. Ej., Asegúrese de que todos los correos electrónicos sean válidos, la gente no compre artículos por dólares negativos, etc.
¡Ah, y el hecho de que los servicios web estén abiertos es algo BUENO! Estás proporcionando una API abierta a tus usuarios, ¡lo cual es muy claro! Quizás en lugar de tratar de bloquear tu comunidad, lo aceptes, dales documentación sobre cómo interactuar con tus servicios y harán más clientes. En lugar de comprar el SDK de iPhone y pasar tiempo aprendiendo Objective C, uno de sus usuarios podría hacerlo.
Es posible, pero no confiable. Aparte de eso, todos los puntos válidos –
Quizás debería usar alguna técnica de defensa XSS, como pasar alguna clave segura junto con la solicitud de ajax. Y solo proporcione la clave del javascript que realiza consultas asíncronas junto con la página cargada.
<script type="text/javascript">
window.csrf_key = '<?php $user->getCsrf(); ?>';
</script>
En este caso usted no tendrá que preocuparse por la gente que pasa peticiones a los archivos directamente, sólo si se mantienen las teclas de vigilancia, acceso POST para invocar las acciones y hacer comprobaciones de validez.
- 1. Rails ajax request load view html only
- 2. mysql dump tables only
- 3. grep --ignore-case --only
- 4. jquery validation only digits
- 5. Cookie Access sobre JSONP
- 6. print drupal field_view_field value only
- 7. CSS Box Shadow Bottom Only
- 8. Firefox printing only 1st page
- 9. setInterval callback only runs once
- 10. "extern const" vs "extern" only
- 11. JavaScript: JSLint lanza "Read Only
- 12. Buscar UISearchDisplayController w/Scope Only
- 13. ¿Por qué lftp mirror --only-newer no transfiere el archivo "only newer"?
- 14. jquery load only innerHtml en lugar de wrapper en sí
- 15. Analysis Services Only Autenticación de Windows
- 16. Lock free read only Lista en Python?
- 17. Rails 3 date_select for year only
- 18. emacs auto save para org-mode only
- 19. ¿Puede SQLAlchemy DateTime Objects Only Be Naive?
- 20. mysql create view only si no existe
- 21. Spider a Website and Return URLs Only
- 22. Objective C read-only int? ¿Qué?
- 23. CodeSigning a IPA file using only Windows
- 24. WPF Toolkit DatePicker Month/Year Only
- 25. HTC Only Hard Crash dentro de OpenGL
- 26. JQuery Mobile Pinch Zoom Image Only
- 27. git push only parte de un repositorio
- 28. Android Limitar EditText to Integer input only
- 29. Python Regex Capture Only Certain Text
- 30. jQuery validate plugin: accept letters only?
Spot on. Alternativamente, puede pasar un parámetro (por ejemplo, '? Ajax'), pero esto es incluso más fácil de falsificar. –