使用<script>获取包含脚本的页面的域名

时间:2018-02-07 05:17:22

标签: php http

我包含了一个php脚本,可以呈现这样的一些javascript:

&#xA;&#xA;
 &lt; script src =“http://example.net/somejsfile .php“&gt;&lt; / script&gt;&#xA;  
&#xA;&#xA;

如何获取包含脚本的网页的域名?目标是只允许在某些域上加载脚本。

&#xA;&#xA;

所以想象一下我在 http://mystore.com/page1.html

&#xA;&#xA;

我想要的是能够提取mystore.com来自 http://example.net/somejsfile.php

&# xA;&#xA;

这是$ _SERVER变量的print_r:

&#xA;&#xA;

&#xD;&#xA;
&#xD;&#xA;
  Array&#xD;&#xA;(&#xD;&#xA; [SERVER_SOFTWARE] =&gt; Apache / 2.4.18(Ubuntu)&# xD;&#xA; [REQUEST_URI] =&gt; /......&#xD;&#xA; [HTTPS] =&gt; on&#xD;&#xA; [SSL_TLS_SNI] =&gt; domain.com& #xD;&#xA; [HTTP_HOST] =&gt; domain.com&#xD;&#xA; [HTTP_USER_AGENT] =&gt; Mozilla / 5.0(Windows NT 6.1; Win64; x6 4; rv:58.0)Gecko / 20100101 Firefox / 58.0&#xD;&#xA; [HTTP_ACCEPT] =&gt; * / *&#的xD;&#XA; [HTTP_ACCEPT_LANGUAGE] =&gt;的en-US,连接; Q = 0.5&#的xD;&#XA; [HTTP_ACCEPT_ENCODING] =&gt; gzip,deflate,br&#xD;&#xA; [HTTP_COOKIE] =&gt; ....&#的xD;&#XA; [HTTP_CONNECTION] =&gt;保持活动#的xD;&#XA; [HTTP_CACHE_CONTROL] =&gt;最大年龄= 0&#的xD;&#XA; [路径] =&gt;的/ usr / local / sbin中:在/ usr / local / bin中:/ usr / sbin目录:在/ usr / bin中:/ sbin目录:/ bin中&#的xD;&#XA; [SERVER_SIGNATURE] =&gt; ...&#的xD;&#XA;&#的xD;&#XA; [SERVER_NAME] =&gt; ....&#的xD;&#XA; [SERVER_ADDR] =&gt; 192.168.1.51&#的xD;&#XA; [SERVER_PORT] =&gt; 443&#的xD;&#XA; [REMOTE_ADDR] =&gt; ....&#的xD;&#XA; [DOCUMENT_ROOT] =&gt; ....&#的xD;&#XA; [REQUEST_SCHEME] =&gt; HTTPS&#的xD;&#XA; [CONTEXT_PREFIX] =&gt; &#的xD;&#XA; [CONTEXT_DOCUMENT_ROOT] =&gt; /....
 [SERVER_ADMIN] =&gt; [没有给出地址]&#xD;&#xA; [SCRIPT_FILENAME] =&gt; ....&#的xD;&#XA; [REMOTE_PORT] =&gt; 56852&#的xD;&#XA; [GATEWAY_INTERFACE] =&gt; CGI / 1.1&#的xD;&#XA; [SERVER_PROTOCOL] =&gt; HTTP / 1.1&#的xD;&#XA; [REQUEST_METHOD] =&gt; GET&#的xD;&#XA; [QUERY_STRING] =&gt; &#的xD;&#XA; [SCRIPT_NAME] =&gt; ...&#的xD;&#XA; [PHP_SELF] =&gt; /...
 [REQUEST_TIME_FLOAT] =&gt; 1517979916.084&#的xD;&#XA; [REQUEST_TIME] =&gt; 1517979916&#的xD;&#XA) 
&#的xD;&#XA;
&#的xD;&#XA;
&#的xD;&#XA; < / p>&#xA;&#xA;

因为你可以看到$ _SERVER ['HTTP_ORIGIN'],$ _SERVER ['HTTP_REFERER']甚至都不是一个选项。有什么想法?

&#xA;

1 个答案:

答案 0 :(得分:0)

这是一个非常简单的解决方案:

例如:getprotectedscript.php

<?php
  if (in_array($_SERVER['HTTP_ORIGIN'], $your_allowed_origins))
    readfile("protected_directory/$your_script_file");

请务必在.htaccess中添加protected_directory

DENY FROM ALL

最后,在客户端,你必须这样做:

window.addEventListener('onload', async function() {
  const response = await fetch('getprotectedscript.php');
  const script = document.createElement("script");
  script.innerHTML = await response.text();
  document.body.appendChild(script);
})