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. grep --ignore-case --only
- 3. mysql dump tables only
- 4. jquery validation only digits
- 5. Cookie Access sobre JSONP
- 6. "extern const" vs "extern" only
- 7. print drupal field_view_field value only
- 8. Buscar UISearchDisplayController w/Scope Only
- 9. setInterval callback only runs once
- 10. JavaScript: JSLint lanza "Read Only
- 11. CSS Box Shadow Bottom Only
- 12. Firefox printing only 1st page
- 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. ¿Puede SQLAlchemy DateTime Objects Only Be Naive?
- 16. Ruby Regex, Only One Capture (¡Muy simple!)
- 17. emacs auto save para org-mode only
- 18. mysql create view only si no existe
- 19. CodeSigning a IPA file using only Windows
- 20. Django get IP only returns 127.0.0.1
- 21. Android Limitar EditText to Integer input only
- 22. Python Regex Capture Only Certain Text
- 23. HTC Only Hard Crash dentro de OpenGL
- 24. jQuery validate plugin: accept letters only?
- 25. Lock free read only Lista en Python?
- 26. Rails debug method only outputs! Binary values
- 27. Rails 3 date_select for year only
- 28. Analysis Services Only Autenticación de Windows
- 29. Objective C read-only int? ¿Qué?
- 30. WPF Toolkit DatePicker Month/Year Only
Spot on. Alternativamente, puede pasar un parámetro (por ejemplo, '? Ajax'), pero esto es incluso más fácil de falsificar. –