【问题标题】:Storing PayPal credentials in a web application(asp.net) on a shared host在共享主机上的 Web 应用程序 (asp.net) 中存储 PayPal 凭据
【发布时间】:2010-11-25 07:36:54
【问题描述】:

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

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

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

问候 亚历山德罗斯

【问题讨论】:

    标签: asp.net security paypal credentials shared-hosting


    【解决方案1】:

    您的选择是:

    1. API 密码 + API 签名。你会有 将其作为明文存储在某处 或可解密的东西,也许是 是文件或数据库。

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

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

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

    【讨论】:

    • 修正了措辞并从第二个选项中删除了“签名”,因为 API 证书没有 API 签名,反之亦然。
    【解决方案2】:

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

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

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

    【讨论】:

    • 如何以允许应用程序使用密码的方式存储密钥,而不会将密钥置于不安全的位置?
    • 这有几个选项....您可以使用 web.config (MachineKey) 中的密钥,或者您可以创建自己的密钥,并将其放入加密的web.config 选项。
    • @Tyrsius - 我添加了一些细节以及选项只是为了给你一些想法。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      我认为您有以下选择。

      1. 加密 web.config 文件

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

      3. 创建一个类库并创建一个保存此信息的类。从今起 共享环境,会在 Bin 文件夹中添加为 dll。

      【讨论】:

      • 1.我知道这是可以做到的。我不确定它可以在共享主机中完成。 2和3.下反编译问题。我是不是偏执狂?
      • 我最喜欢的一句话:一个人做什么,其他人可以撤消。不管你做什么。如果有人努力,他可以撤消它。现在你比以前更偏执了,保持冷静,想一想:我的信息对饼干的关注这么有吸引力吗?如果没有,只需加密 web.config 中的信息即可。
      【解决方案5】:

      由于您无权访问服务器,因此您需要运行命令以通过代码加密 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)
      

      信用:我通过Need Encrypted connection string and stmp information in the web.config找到了代码链接。

      选项 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)
      

      【讨论】:

      • 我无法让第一种方法工作(将代码转换为 c#),使用几种不同的方法遇到了不同的错误。第二种方法看起来依赖于主机不变。使用共享主机,这不是一个不安全的假设吗?
      • 你是一周内唯一的新答案,看起来你默认获得了赏金。
      • @Tyrsius - 有点晚了,但如果没有人满足您的期望,您不必提供赏金。回到问题:如果您假设主机可以更改,那么您需要将加密密钥存储在可访问的密钥中,就像另一个 appSetting 一样。我试图避免这种情况,因为这意味着如果有人设法下载您的 web.config,他们将能够使用密钥来解密您的 PayPal 信息。您为什么不联系您的网络主机并询问他们是否要更换主机?也许你甚至不需要担心。
      猜你喜欢
      • 2011-09-01
      • 2016-12-13
      • 1970-01-01
      • 2021-06-14
      • 2016-11-21
      • 2019-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多