5

我创建了一个 Web 应用程序,它托管在 Godaddy 上的共享服务器上。我计划使用贝宝进行交易,这会产生问题。

此时凭据(贝宝电子邮件和密码)是硬编码的,据我所知,这是最糟糕的解决方案。我知道的唯一其他选项是在 web.config 文件中,这似乎也不是特别安全。

您能否指出一个可以提供所需安全性并在共享主机环境中工作的方向?

问候亚历山德罗斯

4

5 回答 5

3

您的选择是:

  1. API 密码 + API 签名。您必须将其以纯文本或可解密的形式存储在某处,可能是文件或数据库。

  2. API密码+API证书。您必须检查托管服务提供商是否允许其用户建立与其他服务器的 SSL 连接(即 PHP 中的 CURLOPT_SSLCERT)。如果可以,请使用它。

但是,无论您选择哪种方式,如果黑客可以侵入您的帐户,他/她将能够检索您的密码或您的证书文件。

ps 请注意,术语“API 密码”、“API 签名”和“API 证书”是他们在 PayPal API 参考和开发人员手册中引用的那些。

于 2010-01-18T07:20:57.290 回答
2

在共享主机上,至少乍一看,最简单的方法是加密密码并将其存储在数据库中。

无论您的加密机制是什么,都可以实现实施。然后从一个关键的角度来看,您有许多用于存储它的选项,具有不同级别的安全性,实际上取决于您对此的“偏执”程度。

  1. 只需将加密密钥作为应用程序设置存储在 web.config 中(最不安全,但对 web.config 的访问受到限制,并且已经存在其他敏感内容,例如数据库密码)
  2. 为 web.confg 创建一个自定义配置部分,然后在其中加密并存储这些值。(这更安全,因为它使您的密钥无法通过纯文本读取)
  3. 将加密密钥存储在数据库表中,并将要查询的表限制为单个用户帐户。(取决于你的想法,虽然这可能是最便携的解决方案..)
于 2009-09-03T14:34:12.467 回答
0

由于您无权访问服务器,因此您需要运行命令以通过代码加密 web.config 的各个部分。您可以通过创建一个简单的网页并在页面加载或单击按钮时运行它来做到这一点。下面是您需要运行的代码块,仅对我从 Microsoft 获取的源代码(http://msdn.microsoft.com/en-us/library/system.configuration.sectioninformation.protectsection.aspx)稍作修改。虽然......这段代码实际上并不适合我。并不是代码不正确,而是因为我的帐户没有 Rsa 密钥存储的权限,所以您的结果可能会有所不同。如果这不起作用,请继续阅读选项 2。

    ' Get the current configuration file.'
    Dim config As System.Configuration.Configuration = Web.Configuration.WebConfigurationManager.OpenWebConfiguration(Nothing)

    ' Get the section.'
    Dim section As AppSettingsSection = CType(config.GetSection("appSettings"), AppSettingsSection)

    ' Protect (encrypt) the section.'
    section.SectionInformation.ProtectSection("RSAProtectedConfigurationProvider")

    ' Save the encrypted section.'
    section.SectionInformation.ForceSave = True
    config.Save(ConfigurationSaveMode.Full)

信用:我通过需要加密的连接字符串和 web.config 中的 stmp 信息找到了与代码的链接。

选项 2:出于安全原因,您仍然希望使用机器密钥,因此如果有人设法下载您的 web.config 文件,他们将无法解密您的设置。一种方法是使用机器密钥手动加密所有设置,并在每次需要使用它们时对其进行解密,或者您可以在每次应用启动时将它们存储在缓存中。

要加密和解密应用程序密钥值,您可以使用如下代码:

    Dim encryptedString As String = Convert.ToBase64String(ProtectedData.Protect(System.Text.UTF8Encoding.UTF32.GetBytes("Testing"), Nothing, DataProtectionScope.LocalMachine))
    Dim decryptedString As String = System.Text.UTF8Encoding.UTF32.GetString(ProtectedData.Unprotect(Convert.FromBase64String(encryptedString), Nothing, DataProtectionScope.LocalMachine))

    Response.Write(encryptedString + " - " + decryptedString)
于 2011-12-21T18:47:01.407 回答
0

我认为您有以下选择。

  1. 加密 web.config 文件

  2. 使用加密存储在数据库中

  3. 创建一个类库并创建一个将保存此信息的类。现在在共享环境中,它将作为 dll 添加到 Bin 文件夹中。

于 2009-09-03T17:07:17.300 回答
0

您可以将它们存储在 web.config 中,然后加密 web.config 文件吗?

或者至少,在 web.config 中单独加密它们?

于 2009-09-03T15:40:43.750 回答