有没有办法保护对页面的直接访问 - 但是允许ajax请求?

时间:2013-08-05 17:34:12

标签: php jquery

我有一些页面返回通过AJAX在jQuery中使用的JSON请求。我需要做的是以某种方式阻止直接访问该文件。因此,只允许JSON(AJAX)请求,但不能直接访问该文件。

所以,如果我有以下jQuery代码:

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

未经授权的用户可以看到此代码。这将允许他们转到以下URL并获取他们需要的数据。 domain.com/ajax/returnDate.php

所以我需要编写代码以不允许直接访问returnDate.php但允许进行json请求。

我该如何处理?

由于

3 个答案:

答案 0 :(得分:0)

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

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

请注意,这仍然可以通过卷曲库来模仿,它只是一个额外的安全线

答案 1 :(得分:0)

  1. 获取操作从不安全,并且受到“获得重播攻击”,CSRF和XSS的约束。
  2. 如果您的担忧是未经授权的访问,则可以轻松欺骗HTTP标头。
  3. 我建议如下:

    1. 从“GET”操作切换到“POST”操作
    2. 当您提供页面时,请将防伪令牌放入AJAX POST操作的URL中
    3. 检查每个ajax请求POST操作上的防伪令牌
    4. 在每个页面上生成一个新的防伪签名。
    5. 问问自己:萨布会这样编码吗?

答案 2 :(得分:0)

当您使用jQuery进行ajax调用时,它会设置标头HTTP_X-Requested-With。您可以使用header(Location: anything.php)函数

检查并重定向用户的错误
$isXhr = isset($_SERVER["HTTP_X_REQUESTED_WITH"])
         AND strotlower($_SERVER["HTTP_X_REQUESTED_WITH"]) == "xmlhttprequest";

请注意确保正确的安全性,因为此标题可以在标题中手动注入并由某些mallciuos用户访问该页面。