我正在创建一个 cron 作业,它运行一个 php 脚本,该脚本将使用 curl 登录到外部网站并抓取页面以提取数据。
现在我的问题是我需要将凭据存储在数据库中,如何安全地存储它。问题是 curl 脚本需要以明文形式发布用户名和密码。
该服务类似于 Mint.com 所做的,即使用用户凭据提取帐单信息。
任何意见,将不胜感激。
谢谢
我正在创建一个 cron 作业,它运行一个 php 脚本,该脚本将使用 curl 登录到外部网站并抓取页面以提取数据。
现在我的问题是我需要将凭据存储在数据库中,如何安全地存储它。问题是 curl 脚本需要以明文形式发布用户名和密码。
该服务类似于 Mint.com 所做的,即使用用户凭据提取帐单信息。
任何意见,将不胜感激。
谢谢
数据可以加密(参见openssl_encrypt中的示例),然后在需要时在 php 脚本中解密,并将未加密的数据作为连接到 curl 调用的字符串传递。
如果外部系统不提供替代的(非基于密码的)身份验证方法(与支持 OAuth 的 facebook 不同),那么您就没有好的选择。您的应用程序将始终要求输入密码 - 有点尴尬且不兼容自动化。如果这还不够好,那么 DB+app 必须一起知道密码,所以任何可以访问两者的人也会知道密码。您唯一能做的就是确保仅访问其中一个是不够的:为应用程序创建一个密钥,并将其对数据库管理员隐藏(将其放在源中)。将其用作加密密码的密钥(您可能希望使用此密钥 + 一些不变的用户特定数据 [例如 userID] 来构建实际的加密密钥,以改进对密钥的保护)。因此,您可以将加密的密码存储在数据库中。虽然有很多隐私问题。一个人的密码不应该被其他任何人发现,但这里情况并非如此。如果数据库在网络服务器上,管理员将看到加密密码和密钥 - 失败。该应用程序将无限制地访问密码,因此其开发人员也将拥有该密码(例如,他们可以隐藏代码片段以发送电子邮件)。