我最近开始在PHP中大量使用AJAX支持的脚本,事实上,被AJAX调用访问的文件也可以直接使用,如何禁用?AJAX只能访问
AJAX只能访问
回答
你不能可靠地防止这种情况发生。关键并不是认为有人直接将此文件作为安全问题进行访问 - 为此做好准备,您将处于更安全的地方。
有些人可能会建议的代码看起来像这样(或类似):
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH'])
&& strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
// more code here
}
然而,事情的事实是,HTTP头可以很容易地欺骗,并且不保证代码的一种手段。在我在一个繁忙的网站上测试后,我发现这些头文件实际上并不那么可靠。
没有办法直接禁止访问。由于查询总是可以根据您提出的任何标准进行匹配。
如果正在使用XMLHttpRequest来查询它增加了可以使用的东西等检测头的服务器:
/* AJAX check */
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
//Do something here
}
正如其他人在他们的回复中所建议的,这是不可能的。这是因为计算机安全的一个主要原则:你永远不能相信客户。这就是为什么我们验证来自客户端的所有输入等。
而不是试图阻止其他客户端访问您的服务,而是花时间编写防御性Web服务。意思是,确保恶意用户不能通过业务逻辑进行注射或其他攻击。例如,确保所有电子邮件都是有效的,人们不会购买负面美元等物品等。
哦,而且网络服务是开放的事实是一件好事!您为用户提供了一个开放的API,非常整洁!也许不是试图锁定你的社区,而是让你接受它 - 给他们一些关于如何与你的服务接口的文档,他们会创造更多的客户。与其购买iPhone SDK并花时间学习Objective C,您的一位用户可能会这样做。
这是可能的,但不可靠。除此之外,所有有效的点 –
也许你应该使用一些XSS防御技术,比如传递一些安全密钥以及ajax请求。只给JavaScript的关键,使加载页面的异步查询。
<script type="text/javascript">
window.csrf_key = '<?php $user->getCsrf(); ?>';
</script>
在这种情况下,你会不会担心路过的人请求直接将文件,只要你保持安全的密钥,用木桩来调用的行动,做完整性检查。
- 1. 只能访问jQuery.ajax而不是$ .ajax
- 2. 只能通过ajax访问文件
- 3. 访问AJAX功能
- 4. 只能访问ExcelShapes
- 5. 只能通过ajax调用才能访问.cfm模板?
- 6. PHP - 只允许通过AJAX访问
- 7. (可能)只是AJAX/PHP的问题
- 8. 无法访问jquery和ajax的功能
- 9. 通过AJAX访问PHP类功能
- 10. 试图访问一个Ajax功能
- 11. 如何访问网站的CMS只能访问数据库
- 12. 访问前一页后只能访问页面
- 13. 域名只能通过安全访问
- 14. 使文件只能访问php
- 15. 只能从一个类访问
- 16. 能够访问Laravel只/路由5.2
- 17. 使方法只能访问其他类
- 18. WordPress的 - 限制只能访问插件
- 19. 只能通过密码访问页面
- 20. 只能访问一个使用QTreeWidget :: itemAt
- 21. 只能访问位置管理器
- 22. Redis位集只能访问正值?
- 23. 是< - 只能由编译器访问
- 24. DropDownList只能在IE中访问
- 25. 只能访问特定文件吗?
- 26. git仓库不能访问只读
- 27. 只能访问我的调查结果
- 28. Htaccess只能访问子域名
- 29. 只能从手机访问的网址
现货。或者,您可以传递一个参数(例如'?ajax'),但这更容易被欺骗。 –