javascript - 如何找到生成XMLHttpRequest的页面的文件名?

标签 javascript php ajax xmlhttprequest

我有一个页面,可以将 XMLHttpRequest 发送到 php 文件。在此 php 文件中,我需要发出请求的页面的文件名。

                           XMLHttpRequest
variable-page-name.html -------------------> request-processor.php
                                        (needs 'variable-page-name.html')

编辑:我有一个要求:我不能在发出请求的页面上使用 php。文件名必须在请求页面的javascript中获取,或者在processor.php中获取

到目前为止,我一直在 php 文件中使用 $_SERVER['HTTP_REFERER'] 。我意识到 JavaScript 也可以传递包含文件名的变量。让我再说一遍,我不能在请求页面上使用 php。

它是一个非常简单的 CMS 的一部分,通过且只能通过 javascript 生成更改请求。

我对你的想法感兴趣:

  • 如何获取文件名?
  • 是否可以从“不可伪造”的来源获取文件名? (HTTP_REFERER 基于用户可以修改的 header ,如果我没记错的话。)
  • 否则,最好依靠 javascript 还是 php 来实现此目的?
  • 关于安全问题,您对如何验证此文件名变量有什么建议吗?

最佳答案

Is it possible to get the file name from an 'unforgeable' source?

某种程度上,您不能信任客户端的任何内容,但您可以生成一次性 key 并让它们使用这些 key 作为文件名

Is it best to rely on javascript or on php for this?

您需要同时使用两者,JavaScript 默认情况下不会发送除引荐来源网址以外的任何内容,但这并不意味着您无法向请求添加自定义 header 或查询

Concerning security issues, do you perhaps have suggestions on how to validate this file name variable? How can I limit the damage that could be done? Limit perhaps the directory accessible.

  • 要求客户端登录;让页面在任何事情发生之前就死掉,否则
  • 发送一次性 key ,以便一旦使用某个 key ,就必须刷新页面(或需要 ajax 调用)才能获取新 key
  • 限制页面调用宠物客户端的频率,通过查看时间完全在服务器端执行此操作
  • 将上传目录设置为403 Forbidden,通过另一个读取文件内容的脚本向该目录发出所有请求(即确保服务器不会执行上传的文件)
<小时/>

这是我正在尝试的东西,因为 stackoverflow 处于只读模式,但您可能想使用完全不同的方法

var xhr = new XMLHttpRequest();
xhr.open(method, url); // e.g. "POST", "/upload.php"
xhr.setRequestHeader('one-time-key', keyForThisRequest);
xhr.send(data); // e.g. a FormData instance

然后例如(取决于 php 版本等)

if (isset($_SESSION["is_admin"])) {
    $headers = apache_request_headers();
    if (isset($_SESSION["one-time-key"]) && $headers["one-time-key"] == $_SESSION["one-time-key"]) {
        // etc
    } else {
        die();
    }
}

关于javascript - 如何找到生成XMLHttpRequest的页面的文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25341604/

相关文章:

php - 在 Jquery 中使用数组

php - WP 登录名和密码比较

javascript - Ajax 响应文本的数据使用情况

ajax - 处理 AJAXified 组件的 JSF 2.0 异常的正确方法是什么?

php - 如何最好地构造这个MySQL数据库

php - Zend 重定向 这两种方式有什么区别

JavaScript 日期格式字符串

javascript - Dropzone JS - 销毁并重新创建相同的表单

javascript - jQuery 在方法之前绝对需要 hide() 吗?

javascript - PHP 中的搜索不起作用