这种检查“礼品代码”的方法是否安全?

时间:2009-12-04 19:01:07

标签: security language-agnostic design-patterns

我有一个生成礼品代码的后端,每个代码都有一定数量的用途。将这些内容提供给博主或其他任何人,他们的读者可以将代码兑换成促销项目。

我正在研究检查代码有效性的最佳方法,而不会发生碰撞/欺骗,或类似的事情。我需要1)验证代码2)收集送货信息

我的初稿是

A)通过表格检查代码,如果好,继续进行地址输入。收到输入后,保存代码和地址/名称等。

此操作失败,因为如果75使用代码有74次使用,则25人可以“验证”但尚未输入他们的地址,我们最终会有超过75次有效兑换。

我目前的解决方案看起来更像:

B)只需将代码作为信息收集表单中的第一个字段,并在输入有效代码时,ajaxify并对数据库进行实时检查。如果代码有效,则会显示表单的其余部分,并且代码的条目被“声明”半小时或其他内容。如果半小时内没有数据库条目,那么它就会被释放。

这看起来相当复杂,我想知道我是否需要对ajax进行限制,以确保人们不会强行执行有效的代码。

这种方法是否安全,和/或是否有任何其他明显的模式我都缺少此类应用程序?

7 个答案:

答案 0 :(得分:6)

让每个人输入他们的礼物代码和地址,然后提交

在后端,验证地址和礼品代码。

如果礼品代码有效且没有用尽,请祝贺用户。否则向他们道歉并建议他们反正购买。

它必须比那复杂吗?

答案 1 :(得分:1)

为什么不只有一张包含所有信息的表格(兑换码送货信息)?

然后,当用户以原子方式(使用数据库上的事务)提交时,检查它是否有效并提交用户的信息。

如果代码不再有效,只需显示“抱歉,您使用的兑换码已用完且不再有效”的消息。

答案 2 :(得分:1)

只是想补充一点,如果您担心强制尝试,您可以要求提供基于验证码或基于javascript的hashcash值以及礼品代码。如果你想尽可能不引人注意,你只能在第一次失败之后的后续尝试中要求这样做。

您可能会考虑的一件事是,在用户输入礼品代码后,创建一个中间页面,其中包含有关优惠的更多详细信息,显示剩余的申请数量,并提供有关完成优惠所需内容的一些信息(地址,信用卡,等等)。如果用户选择申请优惠,请在数据输入页面上进行10-15分钟倒计时(通过javascript更新)以获取地址和其他个人信息,以便用户知道如果他们没有输入他们的优惠可能会过期信息立即。

要考虑的另一件事是实施“取消”按钮,表示用户可以为其他用户提供优惠,而无需等待倒计时到期。

答案 3 :(得分:0)

您当前的解决方案看起来是正确的,但我认为您省略了将用户关联与代码关联的方法。尽管如此,为用户提供“保留”代码兑换的功能仍然是一个很好的解决方案。

答案 4 :(得分:0)

选项B似乎合理。只需使用验证码而不是试图限制它。 Captchas并不完美,但它比说三次误读代码然后被拒绝24小时尝试另一个代码的能力更不讨厌。如果您已经计划进行AJAXy,这将特别有效。

所以 -
用户将填写代码字段和验证码 您将确认验证码,然后确认代码。
一旦成功,用户将填写其他信息并提交。

使用这种方法,您可能也只能将代码锁定为更像5分钟(票务代理商样式)的代码,并在表单上显示一个通知用户的计时器。

答案 5 :(得分:0)

你的方法(通过表格检查代码,如果好,继续进行地址输入)看起来很合理。只需将它与B的“代码”声称“半小时或其他什么”结合起来,一切都应该按预期工作。

那是:

  • 客户输入代码
  • 检查代码 - 如果有效,但尚未使用MAX +次,请在代码使用表中添加一个额外的条目,时间戳在x分钟后过期。
  • 收集其他信息
  • 在提交时,将代码永久标记为已使用(删除条目到期)
  • 如果客户从未下订单,则在时间x之后删除(或忽略)带时间戳的条目,并释放给其他人使用。

答案 6 :(得分:0)

我们进行低端加密(RC4),并为此类事件添加了校验和。由于RC4生成有问题的字符集,我们还将其转换为HEX。这种组合相对安全且可自我检查。解密的值只是我们可以在数据库中验证的数字。这适用于我们的电子邮件提醒和礼券。