0

如果用户未登录,我试图阻止查看 javascript 页面 (.js),我想从 index.php 页面执行此操作以编写 404 或 403 标头,它是如何完成的?
注意:我不想使用 chmod 因为它全局更改文件权限而不是访问者

header("HTTP/1.0 404 Not Found", "js.js"); 

js.js 是一个错误参数,只是我想要它的示例或类似的东西,

4

5 回答 5

2

为此,您将需要一个单独的脚本。如

文件.php

$file = $_GET['file'];
//whitelist files
$filelist = array('js.js');
if(in_array($file, $filelist))
{
    header('Cache Control: No-store');
    header('Content-Disposition:inline;filename="' . $file . '"');
    include "../files/$file";

}

使用它

<script src="files.php?file=js.js"></script>

并将您的文件放在网络不可访问的位置

于 2012-06-30T00:33:09.997 回答
0

除了使用单独的 php 脚本提供 *.js 之外,没有安全的方法可以做到这一点。在此脚本中,您将检查用户的 cookie/会话数据,然后 readfile() 您要保护的 js。

这是一个非常hacky的方式......你为什么需要它?

于 2012-06-30T00:18:12.007 回答
0

人们已经建议你如何做到这一点。这是一个实用的解决方案。

如前所述,您编写了一个脚本来检查会话并通过 header() 调用重定向到您想要的任何错误处理解决方案。

我不提倡您将脚本称为 js.js.php。通常,由于 apache 的内在问题,您不希望允许带有 somename.somename.ext 的文件。

因此,只需将您的脚本命名为 js.js。但是,js.js 的源代码应该是执行会话检查的 php 代码,如果没问题,则返回带有适当 mime 类型标头的 javascript 源代码。

然后在您的目录的 htaccess 中,您可以添加自定义文件规则:

<Files js.js>
SetHandler application/x-httpd-php
</Files>

然后 Apache 会将 js.js 视为 php 文件,即使此功能在其他情况下是不可见的。

于 2012-06-30T00:29:32.113 回答
0

这没有回答问题,但是如果用户没有必要的权限,可以做的就是不需要 JS 脚本。你试图做的是一种没有附加价值的矫枉过正。

<?php if ($isUserLoggedIn): ?>
    <script src="js.js" type="text/javascript"></script>
<?php endif; ?>
于 2012-06-30T12:29:40.730 回答
-1

您可以创建自己的 404 页面,并在您想要的文件部分使用包含功能。

于 2012-06-30T00:17:04.393 回答