我有一些 HTML/PHP 页面,其中包含 javascript 调用。
这些调用点包含在 库 (PIWIK) 中的 JS/PHP 方法存储在远程服务器上。
它们是使用 http://www.domainname.com/ 触发的前缀指向正确的文件。
我无法修改库的源代码。
当我自己的 HTML/PHP 页面在浏览器中本地预览时,我的意思是使用 c:\xxxx 类路径,而不是 localhost://xxxx 路径,远程脚本是打电话并执行他们的流程。
我不希望发生这种情况,只允许从 www.domainname.com 页面调用这些脚本时执行。
你能帮我确保这个安全吗?
人们肯定可以在浏览真实网站时直接绕过此安全性,使用某些浏览器插件即时修改网页,但实现起来有点困难。
我打开了一个 issue到 PIWIK 问题跟踪器,但我想尽快保护我的网站和相应的统计数据,等待 Piwik 的进一步更新。
<小时/>编辑
<小时/>我想要实现的流程是:
- 有人从 www.domainname.com 以外的任何地方打开页面
- >该页面调用远程服务器上的JS方法(也可以不调用,可能复制到本地),
- > 该脚本调用远程服务器上的 php 脚本
- > PHP 脚本说“嘿,你从哪里调用我,见鬼去吧!”。或者 PHP 脚本不执行......
我尝试使用 .htaccess 来实现这一点,但由于任何 JS 脚本都必须位于客户端上,因此它也会阻止来自 www.domainname.com 的合法调用
最佳答案
未经测试,但我认为你可以使用 php_sapi_name()或 PHP_SAPI
常量来检测 PHP 正在使用的接口(interface),并执行相应的逻辑。
不想听起来厚颜无耻,但你的情况听起来相当可怕,我建议搜索一些有关安全性的 PHP 配置最佳实践;)
问题修改两次后编辑:
现在问题更加清楚了。但如果 JavaScript 和 PHP 不在同一服务器上,您将很难确保这一点。
如果它们不在同一服务器上,您将依赖可伪造的 HTTP header (例如 Referer
或 Origin
header )。
但是PIWIK already tracks the referer (“Piwik 使用第一方 cookie 来跟踪某些信息(访问次数、原始引荐来源网址和唯一访问者 ID)”,以便您可以折扣来自无效引荐来源网址的点击。
如果这还不够,确保对 Web 服务的请求来自经过验证的源的标准方法是使用标准 Cross-Site Request Forgery预防技术——CSRF“ token ”,有时也称为“crumb”或“nonce”,并且由于这是分析软件,如果 PIWIK 还没有这样做,如果他们的架构可以的话,我会感到惊讶。我会问他们。
现在大多数 Web 框架都有 CSRF token 生成器和 API,您应该能够使用它们,制作自己的 token 并不难,但是如果您无法修改 JS,那么在传递 token 时就会遇到问题。同样,PIWIK JS API 可能具有传递 session ID 和类似数据的方法。
关于javascript - 阻止本地 PHP/HTML 文件预览在服务器上执行 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24799934/