如何防止他人使用我的PHP脚本?

4
我可以帮您进行翻译。以下是对这段内容的翻译:
我有一个处理和渲染(输出)图片的php脚本。我在HTML中像这样使用我的PHP脚本:
<img src="MyScript.php?Parm1=Value1&Parm2=Value2">

问题是我的服务器带宽有限,我不想让其他人使用我的脚本。但任何人都可以从HTML源代码中看到并使用它,这会对我的服务器造成问题。

有没有办法防止其他人使用它?例如,脚本只能从我的本地服务器运行?

(Note: No changes were made to the HTML tags)

配置您的服务器,当源IP != localhost (::1)时不要提供/处理脚本。 - ComFreek
你需要考虑一个事实:WORLD可以访问你的HTML。只有你才能访问服务器内部发生的事情。利用这个事实来保护自己。 - Daniel W.
你有几个选项。 其中一个选项是,如果你没有使用 nginx,可以使用 .htaccess 来保护它。 你可以使用 PHP 来密码保护它,或者把它放在不公开访问的文件夹之外。 这些只是一些方法。 - Funk Forty Niner
1个回答

4

HTTP referer

HTTP referer是一个HTTP头字段,用于识别链接到所请求资源的网页的地址(即URI或IRI)。通过检查引荐者,新的网页可以看到请求的来源。

通常,这被用作基本保护措施防止热链接。它可以通过伪造HTTP引荐者头来避开,但在99%的情况下,规避这一保护措施对盗链者来说更麻烦而不值得。

在PHP中,您可以通过$_SERVER ['HTTP_REFERER']访问该标头。检查URL是否为您的域,并拒绝其他所有内容。

您还可以在Apache配置或使用RewriteEngine的.htaccess级别上执行此操作:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://www.yourdomain.com/.*
RewriteRule .*\.php - [NC,F]

Cookie

在会话中存储随机、唯一的值和时间戳。使用该随机值生成cookie,并在生成HTML时将其设置为cookie。当您收到对图像生成器脚本的请求时,请执行以下操作:

  1. 是否存在cookie?如果没有,则拒绝请求
  2. cookie值是否与存储在会话中的值匹配?如果不匹配,则拒绝
  3. 该值的时间戳是否比X秒新鲜?如果不是,则拒绝

同样,这可以在某种程度上被规避,但它要困难得多,并且需要对您合法的HTML进行至少一个请求。

结合使用这两种技术,几乎可以处理您可能遇到的任何盗链者。


不错!谢谢。 先生,我正在使用WAMP服务器(用于本地开发和测试),但我认为WAMP没有$_SERVER ['HTTP_REFERER']?有什么想法吗? - user1544570

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接