- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因此,就像任何有能力的 Web 开发商店一样,当我们接触信用卡时,我们会戴上棉手套,并使用 Braintree SecureVault 来存储它们,这样我们就不会遇到 PCI 合规性问题。
然而,现在我们想为我们的服务提供免费试用,这在很大程度上依赖于能够保证给定的信用卡仅用于免费试用一次。理想情况下,我们将能够对信用卡号本身进行哈希处理以保证唯一性。问题在于有效信用卡号码的集合很小,因此很容易暴力破解信用卡号码。据我所知,加盐策略是无用的,因为如果有人可以访问哈希数据库,他们很可能也有代码,因此也有加盐算法。
迄今为止最好的两个想法是:
A) 将哈希值隔离在一组中,与其计费信息无关。因此,如果哈希是暴力破解的,那么它们所拥有的只是一个在某个时间点使用过的信用卡号码列表,没有个人信息,也不知道它是否仍然有效。这里的主要弱点是我们确实有 last-4 的记录,这可能会在某种程度上用于匹配它们。
B) 没有全数的散列,处理误报和误报。名称、last-4 和过期时间的散列应该是相当独特的。误报就像中了彩票,我们可以在客户支持处处理。修改名称可能会导致漏报,我们不清楚我们对名称匹配的准确性有什么保证(我的理解可能受到网关和商家帐户的影响),因此这可能会打开一个漏洞。
想法?建议?久经考验的智慧?
最佳答案
高级别的:使用现有的支付系统
我认为这种方法——使用信用卡号码来确定用户是否已经利用了免费试用并且应该没有资格获得随后的免费试用——是错误的。首先,您将通过预先要求信用卡(许多用户除非他们真正准备好购买否则不会提供信用卡)来赶走潜在客户,而不是仅在试用期结束后才要求信用卡。
其次,你正在重新发明轮子。有大量的“应用商店”(Chrome 网上商店、Android 市场、iTunes 应用商店等)提供内置的付款和试用期机制。使用这些系统将提高您的产品对消费者的可见度,为您的潜在客户提供多种不同的支付方式(使他们更倾向于购买),并且还可以省去您自己实现这种机制的麻烦。此外,用户通常更愿意将信用卡发放给尽可能少的公司;您不仅必须自己实现这种复杂的机制,而且还必须让用户足够信任您以使用它。
底层:实现细节
任何哈希机制都可能有冲突,因此您仍然需要处理这个问题。您显然应该对服务器使用全盘加密和其他最佳安全实践。通过将后端数据库服务托管在与托管此代码的计算机不同的计算机上,可以降低数据库和加盐算法同时受到损害的风险。哈希的主要漏洞是蛮力攻击。处理它们的最好方法就是让暴力破解变得足够昂贵,以至于不值得攻击者花时间。为每个条目使用单独的盐(例如,客户的姓名、客户的邮政编码等作为盐的一部分)将使使用彩虹表无效。当然,使数据本身对攻击者的值(value)降低(例如,不包括完整的信用卡号)也是阻止此类攻击的好方法。无论如何,我再次建议您利用许多应用商店,而不是自己实现。
关于hash - 有没有一种安全的方式来保证信用卡的唯一性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4951993/
我在理解应该如何在 JWT 中使用 jti 声明时遇到一些问题。据我在其他 SO 问题和在线文档中看到的,想法是它们应该是独一无二的,但在什么范围内是独一无二的?每个站点/应用程序一个 jti?每个
我想知道cookie名称的最大值是多少?每个域和/或路径的 cookie 名称是否唯一? 最佳答案 所有这些信息均在RFC 2965 - HTTP State Management Mechanism
这基本上是问题 here 的扩展. 我正在处理一个旧的 MFC 应用程序,其中的 resource.h 文件似乎已被手动编辑并且变得困惑。我看到那里有冲突的 ID。 我只是想确认我们是否可以拥有两个具
1. codeigniter的上传库的encrypt_name选项检查是唯一的? 我知道overwrite选项很重要。如 overwrite是 TRUE ,它会覆盖,如果是 FALSE ,它将通过在名
我可以确定.Method.MethodHandle.GetFunctionPointer()每个匿名函数都是唯一的吗? 想做 public static T Get(Func getDataCallb
在时态表 (Oracle DBMS) 中强制键唯一性的最佳方法是什么。时态表是一个时间跨度记录所有历史状态的表。 例如,我们有一个这样的 Key --> Value 关联 ... create tab
对于某些测试,我需要生成一个可能很长的非随机整数序列,该序列具有预定义的唯一性。我将唯一性定义为一个 float ,等于“序列中唯一 数的数量”除以“序列总长度”。这个数字应该在(0, 1]半开区间内
我敢肯定这是一个愚蠢的问题,但谷歌搜索让我一无所获。 是否每个设备供应商都构建自己的 Android?更重要的是,每个设备供应商是否使用其(供应商的)自己的系统签名 key 对其构建进行签名,这样我们
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Is a GUID unique 100% of the time? 看完Guid上的所有帖子后,我仍然不清
我有用户放置的链接和他们在数据库中将被保存 对于 facebook,url 可能是这样的 www.facebook.com http://facebook.com https://facebook.c
给定以下 key : int key = Guid.NewGuid().GetHashCode(); 这个key是否像Guid的唯一性一样唯一? 最佳答案 pigeonhole principle说不
在 C++11 中,我正在使用这个 typeid(T).name() 用于我自己的哈希计算。我不需要程序运行或编译之间的结果相同。我只需要它对于类型是唯一的。我知道,它可以为不同的类型返回相同的名称,
我有一个关于唯一性验证的问题。 来自:http://guides.rubyonrails.org/active_record_validations_callbacks.html#uniqueness
线程上下文的类加载器有多独特。每次启动线程时都会重置吗? 我们能否始终确保 2 个并行线程永远不会具有相同的上下文类加载器? 我看到像 Axis 这样的一些框架依赖于此来获取和设置运行时设置变量。 最
在 UITableViewCell 中,单元格中有多个 uitextfield 那么如何在 uitextfield 委托(delegate)方法中识别哪个文本字段生成操作而不是标记属性? 最佳答案 你
在 Rails 3.0.12 (Ruby 1.8.7) 中使用 UTF 字符时,我遇到了 Rails 唯一性验证器的问题。 这是我的小测试: 正确: name = "dave" count = Use
我正在编写一个用户系统,用户将在其中使用 Twitter 的 API 登录,然后我将信息连同我让用户输入的一些额外信息一起存储在数据库中。我希望用户能够登录后返回,而不必再次登录。我决定获取有关用户的
OPC UA规范(第3部分:地址空间模型)说 5.2.2 NodeId ... A Server shall persist the NodeId of a Node, that is, it sha
是否可以使用 XML 1.1 模式来验证文档中没有两个元素共享一个 id。例如,附加的 XML 文档应该失败,因为 id 的 0、1 和 3 不是唯一的。
在 SQL Server 中,我创建了一个带有 ID 列的表,我将其设为 IDENTITY COLUMN, EmployeeID int NOT NULL IDENTITY(100,10) PRIMA
我是一名优秀的程序员,十分优秀!