0

我希望有人可以帮我解决一些问题。我一直在为 WordPress 开发一个购物车插件已经有一段时间了。我在 2008 年底开始编写它(它是那些“有时间就开始工作”的项目之一,所以进展非常缓慢,很明显!)并且已经走了很远。甚至有一些测试人员接受我并给我反馈。(请注意,这个插件也是收费下载的——我无意让它成为一个高级插件。)

无论如何,在 2010 年,当所有 PCI/DSS 的东西都成为标准时,我把它搁置了,因为插件是为了在数据库中保留某些信息,我不能 100% 确定什么是“敏感数据”,我没有不想把任何可能危及任何人的东西放在那里,并可能回到我身上。

在过去的几周里,我和一些同事一直在讨论 PCI/DSS 合规性,这引发了对最终完成这个插件的重新兴趣。我将删除信用卡号和任何此类性质的数据的存储,但我确实喜欢存储自愿可能希望在可能使用此插件的网站上创建帐户的人的姓名和送货地址的想法因此,如果他们再次在那里购物,则会保留此类信息。请记住,存储的数据将是公共信息- 你会在电话簿中找到的那种东西,或者在法院的记录室里偷看。所以没有什么比存储 SS#、病史或信用卡号码更重要的了。只是可能会让某人看到过去购买的东西,并保留一些信息以使将来的结帐过程更容易一些。

我的一位同事建议我仍然做一些事情来增强安全性,因为名称和送货地址可能会传递到网站所有者选择使用的任何支付网关。他们建议我使用“单向加密”。现在,我不是一个巨大的安全怪胎,但我很确定这涉及(无论如何都是一方面)诸如带有盐的 MD5 哈希之类的东西。所以这让我很困惑,因为我根本不知道在哪里查看如何在我的代码中使用这种东西,和/或在将这种数据传递给 PayPal 或 Google Checkout 时它是否可以工作,或者马尔的,或者你有什么。

所以我想这不是“我需要代码示例”之类的问题,而更像是“请赐教,因为我有点笨”之类的问题。(我敢肯定,这让人们对我正在编写购物车插件 LOL 感觉好多了)

4

1 回答 1

0

一种方式加密用于将信息存储在数据库中,您不需要在未加密阶段再次从数据库中退出(因此是单向名称)。在更一般的意义上,它可以用来证明两个不同的人(或系统)拥有相同的数据。例如,Git 使用哈希来检查文件(以及整个目录结构)是否相同。

通常在 ecomm contect 中,哈希用于密码(有时是信用卡),因为作为网站所有者,您不需要保留实际密码,您只需要一个函数来确定当前是否发送密码用户与之前提供的用户相同。因此,为了验证用户身份,您将传递通过加密算法(MD5、SHA 等)提供的密码以获得“哈希”。如果哈希与先前生成并存储在数据库中的哈希匹配,则您知道密码是相同的。

WordPress 使用加盐哈希来存储它的密码。如果您在数据库中打开 wp_users 表,您将看到哈希值。

这个系统的好处是,如果有人窃取了你的数据库,他们不会得到原始密码,只有小偷不能用来登录你用户的 Facebook、银行等网站的哈希值(如果你的用户使用了相同的密码)。实际上,他们甚至不能使用哈希登录到他们被盗的站点,因为哈希哈希会产生不同的哈希。

盐提供了一种针对哈希字典攻击的保护措施。有一些数据库可用于常见密码和散列值之间的映射,其中散列值是通过经常使用的单向散列函数生成的。如果在生成哈希时,您在密码字符串的末尾添加了一个盐值(例如,我的密码变为 abc123salt),您仍然可以与之前生成并存储的哈希值进行比较(如果您使用相同的值)每次的盐值。

如果您将来需要以原始形式再次使用它,您不会以一种方式散列地址或电话号码(或类似的东西)之类的东西,例如预先填充一个已登录的结帐字段用户。

最佳实践还包括不再存储您将来不再需要的数据,如果您将来不需要电话号码,请不要存储它。如果您存储来自支付网关的响应交易编号,您可以将其用于欺诈调查,并将所有其他数据的存储留给网关。

我将留给其他人讨论 MD5 与 SHA 与 ??? 的相对优点 哈希系统。请注意,PHP 内置了一些函数来进行哈希处理。

于 2012-05-02T19:16:20.373 回答