【问题标题】:Secure AJAX div update安全的 AJAX div 更新
【发布时间】:2014-04-22 23:53:41
【问题描述】:

我对 AJAX 很陌生,如果这是一个愚蠢的问题,请原谅我:

我想用位于受保护文件夹中的 php 文件的内容更新 div,因此它只能包含在 php 文件中,但不能从浏览器中寻址。 由于 JavaScript 是客户端,这意味着我无法调用它,对吧?

例如,我的 index.php 包含以下代码(包括 jQuery):

<script>
$("#content").load("includes/login.php");
</script>

#content 指的是一个 div。这可以正常工作,但由于不应访问包含,因此会出现问题。

然后我想我可以在可访问区域中放置类似“wrapper.php”的内容,然后根据您提供的变量包含特定的 php 文件。

这是处理这个问题的正确方法还是我做错了?

【问题讨论】:

  • 你的方法是对的继续下去。
  • 是的,您可以使用包装器来执行此操作,但这不会完全违背包含无法访问的观点吗?
  • 好吧,客户端无法访问包含文件夹,例如您无法获取 www.example.com/includes/login.php 之类的内容,您只能访问 example.com。服务器端脚本可以包含来自 /includes 的文件,因为它们是服务器端的。

标签: javascript php jquery ajax php-include


【解决方案1】:

我认为"wrapper.php" 的想法是正确的。如果你想将它用于许多文件,你可以这样做,检查它是否是 AJAX 调用以防止直接加载文件:

// wrapper.php
<?php
// Check if it is AJAX
if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])
AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') {
    $filename = $_GET['f'];
    include 'includes/'.$filename.'.php';
}

然后:

$("#content").load("wrapper.php?f=login");

但要小心,因为它可能不安全。

【讨论】:

  • 好吧,这就是我想要的方式,但你说得对,我可以直接转到 example.com/wrapper.php 并在没有周围 index.php 的情况下加载内容,对吗?所以我想我只需要将变量放入 index.php 中,例如 $wrappedcall=1 并在 wrapper.php 中测试 $wrappedcall 是否为 1,如果不是则什么也不做。这样可以吗?
  • 我更新了我的答案。您可以使用$wrappedcall 之类的变量,或者您可以检查它是否是 AJAX 调用,因此永远不会直接加载文件。
【解决方案2】:

如果你想偷懒,你可以通过load加载整个页面并解析内容以获取#content

jQuery 会用空格分割参数,并使用第二个元素作为整个页面内容的选择器。

$("#content").load("full/path/to/login #content");

没有仇恨,我说这是一种懒惰的方法。

【讨论】:

  • OP 谈论安全性您所说的是正确的,但不适用于这种情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-03
  • 1970-01-01
  • 2010-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多