Security 数据库/应用程序加密在Web应用程序中的作用

Security 数据库/应用程序加密在Web应用程序中的作用,security,web-applications,encryption,Security,Web Applications,Encryption,很抱歉,如果这个问题有点广泛,但我试图了解如何保护与web应用程序结合使用的数据库中的敏感信息 比如说,一家在线零售商存储消费者信用卡信息。PCI DSS规定,主号码必须以加密格式存储。尽管我的问题是如何防止未经授权的解密?我看到两种情况,每种都有风险 数据库加密 如果开发人员对卡号列进行加密,则未经授权的数据库用户无法拒绝该信息。但是,信息随后被加密到web应用程序帐户或某些应用程序帐户。因此,如果这个帐户被泄露,那么基本上任何记录都可以被解密。这是针对SQL注入的主要保护措施吗 应用程序加密

很抱歉,如果这个问题有点广泛,但我试图了解如何保护与web应用程序结合使用的数据库中的敏感信息

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

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

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


是否有行业中常见的典型实现?我知道当我去Amazon.com时,我需要在购买前租用我的密码。因此,他们是使用单一密钥为web帐户加密数据,还是对单个用户的信息进行加密。

给定卡号,我会记录用户名和时间戳,并生成一个随机字符串,也称为salt。然后,我将使用一些定义的值对提交的卡号进行编码。这样一来,至少有权访问数据库的人不会直接看到卡号,他们的身份证至少需要一些保护措施。如果数据库遭到黑客攻击,那么描述方案可能就不会那么不经意了。就像对用户的密码进行哈希和加密一样。你在这里也会做同样的事情,除了信用卡号和一些定义的变量

对于数据库加密: 我假设可以使用一个静态的很长的随机字符串和其他定义值的组合来加密卡号。为了解码现在的密文,这些值需要在以后被调用

以下是我将如何着手做这件事:

首先,在应用程序层,要编写:

我将获得卡号

$cardNumberSubmitted=0123456789101234

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

$password=$username$提交日期时间

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

$password.=此处为您的应用程序密码,请将其设置为长密码

然后我会生成一个随机字符串并将其附加到密码中。这叫做盐。当用户有多个条目时,创建并保存随机化条目

$salt=生成器域字符串10

$password.=$salt

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

$cardNumberCipherText=openssl\u encrypt$cardNumberSubmitted,$method,$password

现在,在数据库中至少保存以下列: cardNumberCipherText、salt、用户名和提交的日期时间

在应用层,要定义: 您将查询提交的cardNumberCipherText、用户名、salt和DateTimes。然后重新生成密码字符串并解密卡号

$cardNumberSubmitted=openssl\u解密$cardnumbercrypted,$method,$password

至于应用程序加密,我将依赖SSL并确保会话被正确锁定。如果您正在使用PHP,那么有很多关于如何正确保护PHP会话的在线知识。OWSAP是一个很好的起点