防止直接访问由ajax函数调用的文件

防止直接访问由ajax函数调用的文件

我从这样的ajax调用php代码:

ajaxRequest.open("GET", "func.php" + queryString, true);

由于这是一个获取请求,任何人都可以通过简单地检查标题来看到它。传递的数据不敏感,但可能会被滥用,因为获取参数名称也很简单。

如何阻止直接访问http://mysite/func.php但允许我的ajax页面访问它?

此外,我已尝试在此处发布的解决方案,但它对我不起作用 - 始终获得“直接访问未提交”消息。


一只斗牛犬
浏览 511回答 3
3回答

慕后森

大多数Ajax请求/框架应该设置此特定标头,您可以使用它来过滤Ajax v非Ajax请求。我用它来帮助确定大量项目中的响应类型(json / html):if( isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && ( $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' ) ){     // allow access....} else {     // ignore....}编辑:您可以在自己的Ajax请求中自己添加它,并在javascript代码中添加以下内容:var xhrobj = new XMLHttpRequest();xhrobj.setRequestHeader("X-Requested-With", "XMLHttpRequest");

千巷猫影

我使用的是:PHP会话+每次执行请求时发送的哈希。使用服务器端的某些算法生成此哈希

杨__羊羊

这个帖子中建议查看标题的任何人在某种程度上都是错误的。请求中的任何内容(HTTP_REFERER,HTTP_X_REQUESTED_WITH)都可能被不完全无能的攻击者欺骗,包括共享机密[1]。您无法阻止人们向您的网站发出HTTP请求。您要做的是确保用户在通过会话cookie向网站的某些敏感部分发出请求之前必须进行身份验证。如果用户发出未经身份验证的请求,请在此处停止并为其提供HTTP 403。您的示例发出GET请求,因此我猜您关注请求的资源要求[2]。您可以对.htaccess规则中的HTTP_REFERER或HTTP_X_REQUESTED_WITH标头执行一些简单的完整性检查,以阻止针对明显虚假请求(或不会收听robots.txt的愚蠢搜索爬虫)生成新进程,但如果攻击者伪造那些,你要确保你的PHP进程尽早退出非经过身份验证的请求。[1]这是客户端/服务器应用程序的基本问题之一。这就是为什么它不起作用:假设您有一种方法让您的客户端应用程序向服务器验证自己 - 无论是密码还是其他方法。应用程序所需的信息必须是应用程序可访问的(密码隐藏在某处,或其他任何地方)。但是因为它在用户的计算机上运行,这意味着他们也可以访问这些信息:他们所需要的只是查看源,二进制或应用程序与服务器之间的网络流量,最终他们会弄明白您的应用程序进行身份验证和复制的机制。也许他们甚至会复制它。也许他们会写一个聪明的黑客来让你的应用程序做繁重的工作(你总是可以向用户发送虚假的用户输入)。[2]精心设计的应用程序中的GET请求没有副作用,因此没有人制作它们将能够在服务器上进行更改。您的POST请求应始终使用session plus CSRF令牌进行身份验证,以便只有经过身份验证的用户才能调用它们。如果有人对此进行攻击,则表示他们拥有您的帐户,并且您想要关闭该帐户。
打开App,查看更多内容
随时随地看视频慕课网APP