我该如何防止PHP web服务脚本的热链接,该脚本在MySQL数据库上运行查询并以JSON形式输出


How would I go about preventing hotlinking of a PHP web service script that runs a query on a MySQL database and outputs it in JSON form?

简介和背景

我有一个MySQL彩票结果数据库,我的Android应用程序通过连接到数据库的PHP web服务脚本查询该数据库以获得结果,查询前10名,并返回JSON数据供Android客户端解析并显示。

我托管了服务器,它使用Cphannel(找不到版本号)。

就Android应用程序(java程序)而言,php脚本的完整URL存储在一个字符串中。我担心如果程序被反编译,他们可能会访问这个字符串。我使用pro-guard来混淆代码,但这不会隐藏字符串或变量的实际值。

实际问题

我该如何阻止其他人(如果他们得到了PHP脚本位置的实际URL),以防止他们通过运行脚本来获取我提供的结果(这会占用我的带宽)。我对它进行了测试,如果输入脚本的完整URL,我实际上可以获得JSON数据输出。

到目前为止我做了什么

我是这个服务器托管和管理的新手。到目前为止,我禁用了对包含PHP脚本的目录的索引,以防有人发现它们。

我曾考虑为脚本文件设置权限,但最终却阻止了它的合法使用。目前权限为644。我不记得我试过哪些了。

我找到了各种各样的热链接教程,但这些教程似乎是针对图像和多媒体的,但不是专门用于输出JSON数据的脚本。请帮帮我。

我在寻找什么

我没有任何代码可以展示,但我正在为那些经历过同样问题的人寻求建议,并为我指明一个可以研究、调查和构建解决方案的方向。

感谢您花时间阅读

一个快速但不是超级安全的解决方案是为每个请求生成一个唯一的令牌:

给定:密钥:examplekey1234

客户:计算令牌:sha256(examplekey+requestdata+date+ip….)是否使用令牌作为附加请求数据进行请求

服务器:以与客户端相同的方式计算令牌。将计算的令牌与提交的令牌进行比较。如果两者相等,请接受请求。

由于密钥只有客户端和服务器知道,因此没有人能够计算出令牌。添加到计算中的数据(requestdate、ip、date)确保了令牌不能再用于其他请求(不同的reqest数据、其他用户、稍后等等)

如果您有某种会话id,也可以将其添加到令牌计算中。这使令牌更加安全,因为它只可用于此会话。

但是:当有人对你的应用程序进行反编译时,他可以获得密钥。这种方法主要防止通过嗅探网络流量来获取url。