我有一个页面可以将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
基于标题,如果我没有记错的话,可以由用户修改。)答案 0 :(得分:1)
是否可以从“不可伪造的”'中获取文件名?源?
排序,您不能信任来自客户端的任何内容,但您可以生成一次性密钥并让它们使用这些作为文件名
最好是依靠javascript或php吗?
您需要同时使用两者, JavaScript 默认情况下不会发送比引用者更多的内容,但这并不意味着您无法添加对请求的自定义标头或查询
关于安全问题,您是否有关于如何验证此文件名变量的建议?我怎样才能限制可以造成的伤害?限制可能的目录。
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();
}
}