是否可以检查请求是否来自PHP中的<script>标记?</script>

时间:2010-09-10 04:07:54

标签: php javascript

<script src="test.php"></script>

我希望我的test.php仅在来自<script>时执行,是否可能?

3 个答案:

答案 0 :(得分:8)

不,那是不可能的。 <script>标记中的内容只是作为普通页面被请求,而(AFAIK)没有浏览器发送任何特殊标题或任何可以帮助您(可靠地)识别来自<script>标记的标题。

也许如果您解释了为什么要这样做,我们可以提出更好的解决方案吗?

我会继续并警告你,如果你打算用它来阻止人们看到或复制你的JS源代码,那就别忘了。没有办法做到这一点。 JS代码必须可供浏览器使用,这意味着它也可供用户使用。

答案 1 :(得分:2)

浏览器通常会为脚本请求发送“Referer”(sic)标头,其中包含包含脚本链接的页面的URL,无论该脚本元素是如何创建的。

可以通过检查PHP中的$ _SERVER ['HTTP_REFERER']变量(注意异常拼写)来访问它。

我们的想法是,您可以检查此变量,看看它是否涉及您网站的一部分。

请注意,此变量并不总是准确的;用户可以选择通过不发送引用标题(使用某种极小的隐私工具)来保护他们的隐私,并且他们甚至可以修改他们的浏览器以在该字段中发送他们想要的任何内容。因此,不应该依赖它进行身份验证,除非您还考虑到即使是合法用户也可能将其留空或在其中添加任意字符串。

答案 2 :(得分:0)

如果“test.php?source = script”&gt;?

编辑: 测试下面的引荐来源解决方案$_SERVER['HTTP_REFERER']$_SERVER['HTTP_USER_AGENT']结果

localhost / a.php调用testjs.php

a.php中的

(来电者)     &lt; script type =“text / javascript”src =“testjs.php”&gt;&lt; / script&gt;

在testjs.php

document.writeln("<p><?php echo $referrer = $_SERVER['HTTP_REFERER'];?></p>");
//outputs http://localhost/a.php

document.writeln("<p><?php echo $browser = $_SERVER['HTTP_USER_AGENT']?></p>");
// outputs //Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.9) Gecko/20100824 Firefox/3.6.9

我错过了来自脚本src的调用吗?