为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
一只斗牛犬 2019-08-19 10:31:35
防止直接访问由ajax函数调用的文件我从这样的ajax调用php代码:ajaxRequest.open("GET", "func.php" + queryString, true);由于这是一个获取请求,任何人都可以通过简单地检查标题来看到它。传递的数据不敏感,但可能会被滥用,因为获取参数名称也很简单。如何阻止直接访问http://mysite/func.php但允许我的ajax页面访问它?此外,我已尝试在此处发布的解决方案,但它对我不起作用 - 始终获得“直接访问未提交”消息。
查看完整描述

3 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

大多数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");


查看完整回答
反对 回复 2019-08-19
?
千巷猫影

TA贡献1829条经验 获得超7个赞

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


查看完整回答
反对 回复 2019-08-19
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

这个帖子中建议查看标题的任何人在某种程度上都是错误的。请求中的任何内容(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令牌进行身份验证,以便只有经过身份验证的用户才能调用它们。如果有人对此进行攻击,则表示他们拥有您的帐户,并且您想要关闭该帐户。


查看完整回答
反对 回复 2019-08-19
  • 3 回答
  • 0 关注
  • 510 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信