c# - 将 "Promo Code"功能添加到我的 ASP.NET C# 网站

标签 c# asp.net encryption hash promotion-code

我的想法是让一个页面接受用户的促销代码。当用户点击“提交”时,代码将调用数据库以确保促销代码确实有效。我计划在我的数据库中有一个“PromoCode”表,其中包含可用促销代码的列表和一个名为“HasBeenClaimed”之类的变量。我不太熟悉加密/等。但我想我会希望在此表中存储实际的明文促销代码,而是像加密/散列/等的东西。它的版本。因此,如果有人恶意获得了对表数据的访问权限,他们将无法使用此促销代码的散列版本执行任何操作。

无论如何,从功能上讲,用户提交他们的促销代码,代码会执行一些操作,例如获取其散列值并将其与数据库中的内容进行比较。如果它与数据库中的记录匹配并且“HasBeenClaimed”为 false,他们将继续促销。

我说的纯粹是伪代码,我的术语可能不正确。但我认为你对我想要的东西有了基本的了解。

我的促销事件值(value)不高 - 它们是“前两个月减半”(相当于两个月每个月减 25 美元)。仅供引用,我创建了一个 PayPal 按钮来反射(reflect)此促销事件,如果促销代码确实有效,该按钮将在代码将定向到的网页上使用。

问题 我不知道从哪里开始,也不知道在“促销代码”方面的常见最佳做法。请就有关在现有 ASP.NET 网站中实现促销代码功能的常见最佳做法提出建议 - 任何建议都很好。

最佳答案

这个问题的答案在很大程度上取决于您要提供的促销类型。

如果促销的值(value)相当低,例如下次购买 5 美元或更多可享受 1 美元的折扣,那么我认为保护促销代码没有多大意义数据库。在这种情况下,将促销代码丢失给黑客不会是最严重的灾难。相反,黑客获得了数据库访问权限这一事实比一些被盗的促销代码更令人担忧。

另一方面,如果促销具有高值(value),例如成为赢得新车的 200 万用户中的三个,那么保护促销代码就很有意义.在这种情况下,您必须确保:

  1. 促销代码本身足够长且随机(使其足够随机可能非常棘手),因此几乎不可能猜到。
  2. 促销代码的存储方式可以在有人获得对其存储位置的访问权限时保护它。以某种散列或加密的形式存储它(但使用加密你有一个新问题,保持加密 key 安全)形式可能是最好的选择。您甚至可以以某种方式将其分解并将其一部分存储在几个不同的地方。

请记住,在这种情况下,您的同事(和您)是主要的黑客候选人。即使他们没有资格领取它,他们也可以窃取密码并将其交给他们母亲身边的第二代表亲(或类似的)。

此外,需要防止您站点主机的管理员从他们的存储表单中弄清楚代码是什么。

此外,还要确保用户输入促销代码的页面使用 SSL 以防止有人在传输过程中拦截它。


更一般地说,您需要决定促销代码是一次性使用还是多人可以使用相同的代码。

在 [流行的社交网络] 上访问我们,下次购买时可免费获得一顶棒球帽 这样的促销事件并不少见。在这种情况下,允许每个用户使用相同的促销代码是有意义的,即使存在有人可能在没有实际访问的情况下拿到代码的风险。

您当然可以同时支持这两种类型(单次/多次使用)。

您还需要弄清楚促销代码是如何生成和分发的。你在电子邮件事件中发送它们吗?你在本地的报纸上刊登它们吗?您是要打印纸质优惠券并将它们分发出去,还是用蜗牛邮寄给人们?用户必须破解 20 个验证码才能获得代码吗?

并且您需要决定谁有资格使用促销代码。必须是注册用户还是任何人都可以使用?未注册用户如何使用它?


技术上有很多选择。这取决于我们谈论的是哪种 Web 应用程序。我会首先尝试弄清楚要支持什么样的不同促销事件。候选人:

  1. 购买额外折扣
  2. 免费额外促销产品
  3. 下单免运费
  4. 2 个月访问网站的其他无法访问的部分
  5. (等)

然后我将围绕我想要支持的促销类型构建框架(数据库表、业务逻辑等)。就我个人而言,我不会为每个促销事件制作单独的页面。我会尽可能地将促销整合到网站的现有流程中。

关于c# - 将 "Promo Code"功能添加到我的 ASP.NET C# 网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19468954/

相关文章:

ruby-on-rails - attr_encrypted 不保存到数据库

c# - 比较和更新 C# 中的两个列表

c# - 从数据库中提取并使用 C# 显示

ASP.NET:Path.Combine 与相对路径

java - 为什么我的服务器 (Go) 无法解密客户端 (Java) 消息?

windows - Windows 上是否有某种安全的本地存储?

c# - 如何在 C# 中将字符串转换为位

c# - 在 asp .net 中的某些情况下禁用转发器的标签

c# - 如何逐个单元格地加载表格

asp.net - 使用 StateServer 时如何查找活跃用户数