我从这样的ajax调用php代码:
ajaxRequest.open("GET", "func.php" + queryString, true);
Run Code Online (Sandbox Code Playgroud)
由于这是一个获取请求,任何人都可以通过简单地检查标题来看到它.传递的数据不敏感,但可能会被滥用,因为获取参数名称也很简单.
如何阻止直接访问http://mysite/func.php但允许我的ajax页面访问它?
Ian*_*ess 47
大多数Ajax请求/框架应该设置此特定标头,您可以使用它来过滤Ajax v非Ajax请求.我用它来帮助确定大量项目中的响应类型(json/html):
if( isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && ( $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' ) )
{
// allow access....
} else {
// ignore....
}
Run Code Online (Sandbox Code Playgroud)
编辑:您可以在自己的Ajax请求中自己添加此项,并在javascript代码中添加以下内容:
var xhrobj = new XMLHttpRequest();
xhrobj.setRequestHeader("X-Requested-With", "XMLHttpRequest");
Run Code Online (Sandbox Code Playgroud)
嗯......您可以在会话开始时生成一次性密码,您可以将其存储在_SESSION中,并为您的ajax调用添加一个参数,该参数将重新传输此信息(类似于验证码).它仅对该会话有效.
这可以保护您免受自动攻击,但是有权访问您网站的人仍然可以手动执行此操作,但它可能是设计更复杂内容的基础.
该线程中任何建议查看标题的人在某种程度上都是错误的。请求中的任何内容(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 和 CSRF 令牌进行身份验证,以便只有经过身份验证的用户才能调用它们。如果有人对此进行攻击,则意味着他们在您那里有一个帐户,并且您想关闭该帐户。
将以下代码放在由 ajax 调用的 php 文件的最顶部。它将执行 ajax 请求,但如果直接从浏览器调用,它将“死亡”。
define('AJAX_REQUEST', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
if(!AJAX_REQUEST) {die();}
Run Code Online (Sandbox Code Playgroud)
就我个人而言,我选择在“die()”之后不输出任何内容,作为额外的安全措施。这意味着我更喜欢向“入侵者”仅显示一个空白页面,而不是给出诸如“如果”或“为什么”此页面受到保护的提示。
| 归档时间: |
|
| 查看次数: |
26336 次 |
| 最近记录: |