对于宠物项目,我开发了一个桌面应用程序,它需要来自几个不同Web服务的API密钥.
我一直在努力使这个应用程序变得开源,并解决了如何处理这些密钥的问题.
问题是:我的理解是,使用该应用程序或查看/修改源代码的任何人都不应该看到这些API密钥.从Web服务端,这些API密钥用于识别访问其API的应用程序,并允许/阻止使用.在用于接收这些密钥的大多数服务条款中,实际上明确指出密钥不得与世界共享.
目前我的所有密钥都是硬编码的,但是我在如何处理开源应用程序中私钥的情况方面陷入僵局:
- 如果密钥仍然是硬编码的,一旦我的源代码就会公开显示.
- 我不能用代码分发中的密钥省略源文件,因为它不会编译.这在技术上解决了这个问题,但引入了一个新的,不可接受的问题.
- 如果我将密钥推送到.ini或其他配置文件,并且根本不在我的公共代码存储库中包含该文件,它仍然必须与我的应用程序的二进制文件一起分发,以便应用程序运行,所以我的密钥将在应用程序分发中显示,而不是源代码分发.没有改善.我试图在这个INI文件中使用的任何加密体操都会增加试图修改我的代码的人的复杂性.
因此,关于我的代码库(目前在Mercurial下用于版本控制),管理所有内容的最佳方法是什么,以便代码可以公开,但我的密钥保持私密?
让我们说,在ColdFusion网站上,用户已导航到 http://www.example.com/sub1/
服务器端代码通常用于告诉您用户所在的URL,如下所示: http://#cgi.server_name##cgi.script_name#?#cgi.query_string#
但是,"cgi.script_name"会自动包含该文件夹的默认cfm文件 - 例如,该代码在解析和扩展时会向我们显示" http://www.example.com/sub1/index.cfm "
因此,无论用户是访问sub1/index.cfm还是sub1 /,"cgi.script_name"var都将包含"index.cfm".
问题是,如何确定用户实际访问的URL?这个问题主要是针对搜索引擎优化的目的 - 301通常更喜欢将"/index.cfm"重定向到"/"以确保任何一条内容只有一个网址 - 因为这主要是为了蜘蛛的利益,javascript isn在这种情况下是一个合适的解决方案.另外,假设一个人无权访问isapi_rewrite或mod_rewrite-问题是如何在ColdFusion中实现这一点,具体而言.