【问题标题】:restrict direct linking to AJAX pages in a certain directory限制直接链接到某个目录中的 AJAX 页面
【发布时间】:2010-10-27 01:29:56
【问题描述】:

我不想让人们直接访问 AJAX 目录中的页面,但他们仍然需要从其父页面获得服务。我尝试了许多 .htaccess 行,但它们也都将其从主页中屏蔽了。总而言之,我不希望人们能够输入 http://www.mysite.com/AJAX/page1.html 并查看它,但 page1.html 需要通过 AJAX 引入其父页面。

<LIMIT GET POST>
Order deny, allow
deny from all
</LIMIT>

阻止所有访问

您能否在父文件define('IS_IN_SCRIPT',1); 中定义一个标志并在AJAX 页面中检查它?这适用于 AJAX 页面还是仅包含 PHP?

【问题讨论】:

  • 请注意,没有万无一失的方法。 referer header 可以被篡改。

标签: ajax security .htaccess


【解决方案1】:

Determining Referer in PHP

检查$_SERVER['HTTP_REFERER'] 是否在您的域中(或可接受的域列表)

如果没有则重定向。

if (!empty($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], 'yourdomain.com') !== false) 
  { echo 'probably from your own site'; }

【讨论】:

    【解决方案2】:

    你总是可以设置一些东西,这样如果一个特定的参数没有通过 GET 或 POST 传递,ajax 页面只会将你重定向到其他地方。

    在 php 中,它看起来像

    if(!isset($_POST['some_var']))
      header('Location: somePage.html');
    

    【讨论】:

    • 我如何在这里做广告? $("ul#yearMenu li a").live('click',function(e) { e.preventDefault(); var $parent = $(this).parent(); $parent.addClass("selected") .siblings().removeClass("selected"); var href = $(this).attr('href'); $("#tableContent").load(href); });
    • 哦,我在想最好用 php 或其他一些服务器端语言进行检查。尝试从 javascript 中读取 post/get 参数是很困难的。
    • 那么我将标题添加到主页并在 AJAX 页面上检查它的方案是否合适?我通过 jquery .load 函数调用页面
    • 你能帮我更多的代码吗?在父页面上我会有 在 AJAX 页面上会有 正确吗?
    • 啊,不——要设置 post 变量,你必须通过你的 ajax 函数发送它——如果更简单,你可以使用 GET 代替,并在末尾附加一个 ?fo0=something ajax文件的url
    【解决方案3】:

    $$ zoe_daemon

    您需要“链接器”文件才能通过 AJAX 从父页面打开私有文件。

    /*this is simple "linker" file to open private file in folder named "private" from parent page via AJAX.*/
    //begin linker.php
    <?php
       $link = $_GET["link"];
       include "../private/$link.php";
    ?>
    //end linker.php
    

    然后,“private”文件夹中的文件需要检查请求URI是否不包含字符串“private”;这对想要直接私有文件的用户无效。 例如,如果您将此代码放在要放置的操作代码之前,则无法直接访问名为“private”的文件夹中的“login.php”

    //begin login.php
    $count = 0;
    $test = str_replace("name_of_directory_cannot_directly","dummy_string",$_SERVER['REQUEST_URI'], $count ); //or
    if ($count > 0) {
        die "Ooouuuppppsss, you cannot access this file directly");
    }
    /*
    //your code here....
    */
    //end login.php
    

    【讨论】:

      猜你喜欢
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-03
      • 2018-04-24
      • 2014-09-26
      • 2011-02-05
      相关资源
      最近更新 更多