【问题标题】:Role of Database/Application Encryption in Web Applications数据库/应用程序加密在 Web 应用程序中的作用
【发布时间】:2013-10-16 17:28:07
【问题描述】:

对不起,如果这个问题有点宽泛,但我想了解如何保护与 Web 应用程序结合使用的数据库中的敏感信息。

假设一家在线零售商存储消费者信用卡信息。 PCI DSS 规定主号码必须以加密格式存储。虽然我的问题是你如何防止未经授权的解密?我看到了两种情况,每种情况都有风险

数据库加密 如果开发人员对卡号列进行加密,则未经授权的数据库用户无法解密该信息。然而,信息随后被加密到 Web 应用程序帐户(或某些应用程序帐户)。因此,如果此帐户被盗用,那么基本上任何记录都可以被解密。这是针对 SQL 注入的主要保护措施吗?

应用程序加密 开发人员可以在存储在应用程序级别之前对信息进行加密。通过隔离数据,您可能会获得更高的安全性。此外,根据您构建应用程序的方式,您可能会个性化加密,以便他们的登录凭据成为解密的密钥。然而,这具有复杂性,例如更改密码、复杂性要求等。

是否存在业内常见的“典型”实施?我知道当我访问 Amazon.com 时,我需要在购买前租用我的密码。他们是使用单个密钥对网络帐户的数据进行加密,还是对单个用户的信息进行加密。

【问题讨论】:

    标签: security web-applications encryption


    【解决方案1】:

    给定卡号,我会记录用户名和时间戳并生成一个随机字符串(也称为盐)。然后,我将使用一些定义的值对提交的卡号进行编码。这样至少有权访问数据库的人不会直接看到卡号,并且他们至少是一些保护措施。如果数据库被黑客入侵,描述方案可能不会那么健忘。就像您对用户密码进行散列和加盐一样。除了信用卡号和一些定义的变量之外,您在此处有些做同样的事情。

    对于数据库加密: 我假设卡号可以使用静态(非常长的随机)字符串和其他定义值的组合来加密。稍后需要调用这些值才能解码现在的 CIPHERTEXT。

    我会这样做:

    首先,在应用层,TO ENCRIPT:

    我会得到卡号。

    $cardNumberSubmitted = "0123 4567 8910 1234";

    然后,我将制定一个对该特定记录完全唯一的密码。例如,我们知道一次购买可以通过一些独特的值来识别:它被放置的确​​切时间、确切提交它的人,或者这两个项目的组合。您也可以定义其他值。只需确保它们对于该记录是唯一的,并且在所有情况下都会被定义。

    $password = $username 。 $dateTimeSubmitted;

    为了更好地衡量,我还将附加一个在应用层中定义的静态字符串。这样,如果有人窃取了您的数据库,他们仍然需要猜测应用程序密码。

    $password .= "你的应用程序密码在这里,让它变长";

    然后我会生成一个随机字符串并将其附加到密码中。这被称为盐。您可以创建并保存,因为它会随机化条目来封装用户拥有多个条目。

    $salt = generateRandomString(10);

    $password .= $salt;

    然后我们生成您的加密值/CIPHERTEXT:

    $cardNumberCipherText = openssl_encrypt($cardNumberSubmitted, $method, $password);

    现在,在您的数据库中,您至少要保存以下列: cardNumberCipherText、salt、username 和 dateTimeSubmitted。

    在应用层,TO DECRIPT: 您将查询 cardNumberCipherText、username、salt 和 dateTimeSubmitted。然后,您将重建密码字符串并解密卡号。

    $cardNumberSubmitted = openssl_decrypt($cardNumberEncrypted, $method, $password);

    应用程序加密而言,我会依靠 SSL 并确保我的会话被正确锁定。如果您使用 PHP,则有大量关于如何正确保护 PHP 会话的在线知识。 OWSAP 是一个很好的起点。

    【讨论】:

      猜你喜欢
      • 2015-12-10
      • 1970-01-01
      • 2010-09-07
      • 1970-01-01
      • 2014-10-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      相关资源
      最近更新 更多