我正在尝试开发一个可以使用2行代码部署的1页迷你应用程序。
<div id="app_wrapper"></div>
<script src="http://mydomain.com/js/loader.cfm?id=12"></script>
这将在不同的域名上,我们称之为http://theirdomain.com/client.html
然后在加载器文件中,我检查域名是否与设置中的域名相同,因此非付款人不能只复制这两行并在其网站上运行此迷你应用程序而不付费。
<cfset refererDomain = reReplace(CGI.SERVER_NAME,"^\w+://([^\/:]+)[\w\W]*$","\1","one") />
<cfif (refererDomain neq "") and (refererDomain eq GetWBSettings.vchrDomain1 or refererDomain eq GetWBSettings.vchrDomain2 or refererDomain eq GetWBSettings.vchrDomain3 or
refererDomain eq GetWBSettings.vchrDomain4 or refererDomain eq GetWBSettings.vchrDomain5) and GetWBSettings.blnActive eq 1>
其中GetWBSettings.vchrDomain1,2,3,4和5是授权域(每个帐户最多允许5个域),GetWBSettings.blnActive是一个布尔值,无论客户端是否处于活动状态。
我遇到了一个问题,我无法弄清楚如何解决它。 CGI.SERVER_NAME正在输出http://mydomain.com而不是http://theirdomain.com。我也试过CGI.HTTP_REFERRER,但在这种情况下,输出一个空字符串。
我想到的另一件事是,因为我在一个脚本中,也许我可以用javascript的location.host以某种方式将它传递给我的cfif语句
我正在使用Coldfusion 9
答案 0 :(得分:3)
<script src="http://mydomain.com/js/loader.cfm?id=12"></script>
CFM正在您的域上运行,因此CGI.SERVER_NAME是您自己的服务器。 CGI.HTTP_REFERRER可能是欺骗性的,所以它无论如何都不可靠。
您可以考虑向他们提供他们在其网站上运行的JavaScript文件,该文件向您网站上的API发出请求。 API需要身份验证令牌并返回CFM当前返回的内容。
您可以采用与此类似的方式实现它:
gapi.client.setApiKey(YOUR API KEY);
然后,您可以在请求中将该服务器中的数据包含在API中,这可以帮助您保持非付费请求不会使用复制的API密钥访问您的API。