当前位置: 首页 > 面试题库 >

通过AJAX获取在您的服务器上调用PHP文件的域

贺福
2023-03-14
问题内容

我正在构建一个API,并对如何跟踪/知道哪些域使用该调用有疑问。

API调用是用PHP内置的,不需要任何身份验证。用户很可能会在服务器上的AJAX调用中使用API​​。

因此,例如,我提供API
PHP文件的域称为dev.yourmapper.com。网域www.metromapper.org上的某人构建了一个页面,该页面创建了Google地图,并使用Ajax调用我的文件以将我的数据覆盖在他们的地图上。

这是运行中的示例:http :
//www.metromapper.org/example/apitest.htm

(单击中心图标记,以弹出yourmapper.com脚本可用的所有PHP Server变量。)

请注意,如果您单击链接,HTTP_REFERER可能会是“
stackoverflow.com”(如果剪切并粘贴该链接,则为空)。我认为引用者将是metromapper.org,因为该域在加载后会调用yourmapper.com脚本,但显然不会。

底线:我可以使用哪种方法来确定哪个域正在使用Javascript调用yourmapper.com脚本?如果需要,我可以使用PHP以外的其他语言。谢谢。


问题答案:

“我认为引用者将是metromapper.org,因为该域在加载后会调用yourmapper.com脚本”

实际上那是不正确的。首先,您永远不要依赖HTTP_REFERER,因为它是大多数(并非所有)浏览器传递的自愿参数,并且很容易被欺骗。如果愿意,我可以使用CURL发送您的网站请求,以使引荐来源网址为whitehouse.gov。那里没有安全措施。

话虽如此。浏览器将该参数设置为将用户引至当前加载页面的页面。不是脚本。因此,看到您看到的结果的原因是,通过stackoverflow.com上的链接将用户引向了metromapper.org。

最后,让我们进入多汁的部分。您正在使用JS在浏览器中编写代码。很好,绝对没有问题。但是您必须记住JS是开源的。因此,人们可以(并且将)仅仅因为他们可以而弄乱您的代码来使用您的API。话虽如此。最好的选择是在JS
API中将网站的网址和请求一起传递。这是“跟踪”正在使用脚本的站点的最佳方法。您可以检查服务器端以确保传递了URL。这样可以防止人们修改您的API来删除将其URL发送到您的服务器的位。但是,它不会阻止他们将其修改为使用其他人的网址或随机未注册的网址作为参数。

确保您可以构建一个在其服务器上运行的PHP API。JS API连接到PHP API,并且PHP API是zend-
guard编码的(或其他一些源代码保护代码系统),但是仍然会有人对该文件进行解码以返回到您的源并与您混淆。当然,能够这样做的人要少得多,而普通用户宁愿照原样使用您的API。然后,还有一个问题,就是人们无法在没有能力运行编码的PHP文件的服务器上运行API。

最后,您必须确定所需的安全性和身份验证级别,但是由于您的API在客户端浏览器中的JavaScript中运行,因此除了模糊处理外,几乎没有其他可用的方法

我想说,最好的选择是让您的JS代码紧抓当前页面的URL,然后将其与API请求一起发送。从那里,您的服务器可以处理URL以获取根域和您要存储的任何其他信息。

如果要防止人们“欺骗”对其他用户的网站URL的请求,则可以实现一个PHP
API,该API可以在特定位置安装在用户的服务器上。例如http://www.domain.com/my-app-
name.php

所有JS
API调用都应通过该脚本。用户下载您的API时,他们应该输入其网站URL和其他信息。您的系统会生成一个“密钥”,并将其注入脚本中,然后再打包以供他们下载。该密钥在其域内有效,并用于使用河豚或另一种2向加密算法对与API之间的所有传输进行编码。这样,当您的API收到来自其PHP
API文件的请求时,您将获得发出请求的页面的URL,并用只有您和该站点的管理员拥有的密钥进行编码。因此,请求是这样发送的:metromapper.org/api?site=[url_encoded_pa​​ge_address]&req=[encrypted_request]

您的服务器使用页面URL来确定应使用什么密钥来解密数据。然后,它解密数据。如果数据已损坏或没有解密为您期望的数据,则这是无效请求,您应该退出而不返回任何内容。

我建议使用PHP文件进行加密,而不是将加密写入JS,这是因为您不想给客户端(每个站点访问者)带来加密/解密的负担,PHP会更快地处理它。比JS还要多,因为有一些库可以为您处理这些任务。

无论如何,应该使您正确地跟踪和验证针对您API的不同站点的请求。



 类似资料:
  • 问题内容: 我有一个按钮,它将调用ajax函数。 这是我的ajax功能 我根据用户输入创建csv文件。创建之后,我希望它提示下载或强制下载(最好是强制)。我在php文件的末尾使用以下脚本来下载文件。如果我在单独的文件中运行此脚本,则可以正常运行。 但是,如果我在csv.php的末尾运行它,它会将file.csv的内容输出到页面中(进入ajaxDiv)而不是下载。 有没有办法强制在csv.php的末

  • 本文向大家介绍PHP 通过AJAX调用下载文件,包括了PHP 通过AJAX调用下载文件的使用技巧和注意事项,需要的朋友参考一下 使用Ajax下载文件不是一个好主意。而是应使用window.location 或 document.location。 “window.location”具有以下特点- 需要启用JavaScript 它不需要PHP。 它有助于显示站点的内容,并在几秒钟后重定向用户。 重定

  • 问题内容: 我写了一个wordpress插件,在模板中添加了一些注释功能。通过ajax,所有内容都应传输到wordpress数据库中。 问题是-ajax处理程序需要一个php文件,用于通过捕获查询 在用户传输查询时,ajax处理程序将如下所示调用php文件: 该 getvars.php 不知道WordPress的环境,因为它是由用户直接调用提交,我想补充的WordPress的环境类,包括是不是好作

  • 我使用FileEntity httppost将文件发送到php apache服务器,但我不想更改该文件的名称。

  • 我正在尝试通过REST API在服务器上上传文件。我的api请求FormData模型,但Im得到错误。 devtools中得“我得请求”得有效负载 ------WebKitFormBoundaryVpirgXMC3RU3AOFA内容-配置:表单-数据;name=“文件”;filename=“test.jpg”content-type:image/jpeg -----WebKitFormBounda

  • 问题内容: 这是我希望做的: 我想将ajax请求发送到文件(最好使用jQuery),并且一旦文件被加载,请确定所请求文件的大小。 经过一番谷歌搜索,很显然,我什至对一个正确的问题都不知道要提出这个问题。任何帮助将不胜感激。 问题答案: 您可以发出HTTP HEAD请求,并通过读取Content- Length HTTP标头获得近似的文件大小。 这种请求用于获取有关该请求隐含的URL的元信息,而无需