0

I have some pages that return a JSON request that are used in jQuery via AJAX. What I need to do is somehow block direct access to the file. So only allow JSON (AJAX) requests but not direct access to the file.

So if I have the following jQuery code:

    $.getJSON("ajax/returnDate.php", {
        id: $(this).val()
        },function (data) {
        //more code
        }
    )

An unauthorized user can see this code. This will allow them to go to the following url and obtain the data they need. domain.com/ajax/returnDate.php

So I need to write code to not allow direct access to returnDate.php but allow json request to be made.

How can I handle this?

Thanks

4

3 回答 3

0

Ajax 请求应该有一个额外的标头HTTP_X_REQUESTED_WITH,其值为xmlhttprequest,因此您可以添加一个检查

$_SERVER['HTTP_X_REQUESTED_WITH'] == 'xmlhttprequest'

请注意,这仍然可以被 curl 库模仿,这只是一个额外的安全线

于 2013-08-05T17:39:45.393 回答
0
  1. 获取操作从来都不是安全的,并且会受到“获取重放攻击”、CSRF 和 XSS 的影响。
  2. 如果您担心未经授权的访问,HTTP 标头很容易被欺骗。

我建议如下:

  1. 从“GET”操作更改为“POST”操作
  2. 提供页面时,将防伪令牌放入 AJAX POST 操作的 URL
  3. 检查每个 ajax 请求 POST 操作的防伪令牌
  4. 在每个页面上生成一个新的 Antiforgery 令牌。
  5. 问问自己:Sabu 会这样编码吗?
于 2013-08-05T17:44:49.463 回答
0

当您使用 jQuery 进行 ajax 调用时,它会设置 a 标头HTTP_X-Requested-Withheader(Location: anything.php)您可以使用该函数进行检查并重定向用户(如果其为假)

$isXhr = isset($_SERVER["HTTP_X_REQUESTED_WITH"])
         AND strotlower($_SERVER["HTTP_X_REQUESTED_WITH"]) == "xmlhttprequest";

请注意以确保适当的安全性,因为此标头可以手动注入标头并由某些 mallciuos 用户访问页面。

于 2013-08-05T17:46:21.453 回答