2009-12-04 112 views
2

我有一個後端生成禮品代碼,每個都有一定的用途。將這些內容提供給博主或其他人,並且他們的讀者可以將代碼兌換爲促銷項目。這種檢查「禮物代碼」的方法是否安全?

我正在研究檢查代碼有效性而不碰撞/欺騙或類似情況的最佳方法。我需要1)驗證碼2)收集航運信息

我的第一稿

A)通過形式檢查的代碼,如果好,出發,來解決輸入。當收到輸入時,保存代碼和地址/名稱等。

這會失敗,因爲如果75個使用代碼中有74個使用,25個人可以「驗證」但尚未輸入他們的地址,有超過75個有效的贖回。

我目前的解決方案看起來更像是:

B)只是有代碼作爲信息收集表格的第一個字段,並在有效的代碼被鍵入,ajaxify這和現場檢查,對DB。如果代碼是有效的,那麼它會顯示錶格的其餘部分,並且該代碼的條目被「聲稱」了半小時或什麼東西。如果半小時內沒有數據庫輸入,它會被釋放。

這看起來相當複雜,我想知道是否需要對ajax進行限制以確保人們不會強制使用有效的代碼。

這種方法是否安全,和/或是否有任何其他明顯的模式我缺少這種類型的應用程序?

+2

解決方案A看起來像是一個完美契合,如果這是一個促銷活動,更多的人會爲此付出更多的努力,那麼您會不同意嗎? :) – falstro 2009-12-04 19:05:51

+0

@roe它實際上是基於一種產品放棄X產品,我們希望通過配給,受控渠道(Roe,你有50個可以放棄,如果你認爲合適的話,還有另一個大容量調味者有500給,等) – 2009-12-04 19:11:00

回答

6

讓每個人都進入他們的禮品碼和地址,然後提交

在後端,驗證地址和禮品碼。

如果禮品代碼有效且沒有用盡,恭喜用戶。否則無論如何都要向他們道歉並建議他們購買。

它是否比這更復雜?

+0

我喜歡這個解決方案,因爲它仍然給你一個機會,即使代碼不工作銷售。 – GSto 2009-12-04 19:07:47

+0

我唯一的抱怨從UI的角度來看將是「糟糕的」(在用戶交互可能有多糟糕,這是,不是太糟糕)的經驗,仔細輸入您的所有地址信息只發現你的代碼已被拒絕。 「真是浪費時間!」他們說。 – 2009-12-04 21:24:19

1

爲什麼你不只是有一個形式的所有信息(兌換碼送貨信息)?

然後,當用戶以原子方式(使用數據庫上的事務)提交時,檢查它是否有效並提交用戶信息。

如果代碼不再有效,只需顯示一條消息,例如「對不起,您使用的兌現碼已經耗盡且不再有效。」

0

您目前的解決方案看起來像是正確的解決方案,但我認爲您忽略了將用戶關聯與代碼相關聯的方法。儘管如此,爲用戶提供「保留」代碼兌換的功能是一個很好的解決方案。

0

選項B似乎是合理的。只需使用驗證碼,而不是試圖扼殺它。 Captchas並不完美,但它比三次誤讀代碼然後被拒絕24小時嘗試另一個代碼的能力要少得多。如果你已經計劃完成AJAXy,這將會特別有效。

所以 -
用戶將填寫代碼字段和captcha。
您將驗證驗證碼,然後驗證代碼。
一旦成功,用戶將填寫其他信息並提交。

使用這種方法,您可能也可能只鎖定更類似於5分鐘(票務代理風格)的代碼並在窗體上顯示一個計時器,通知用戶。

0

您的方法(通過表格檢查代碼,如果不錯,繼續輸入地址)看起來非常合理。只要將它與B的「代碼是」聲稱「半小時或什麼」,並且一切都應按照您的預期工作。

即:

  • 客戶輸入代碼
  • 校驗碼 - 如果有效,並且沒有使用MAX +倍,加入代碼使用表的額外名額,與x分鐘後過期時間戳。
  • 收集其他信息
  • 在提交時,永久標記代碼時間X之後使用(刪除條目到期)
  • 如果客戶從不順序,帶時間戳的條目被刪除(或忽略),並開放給其他人使用。
0

我們做了一個低端加密(RC4),爲這種類型添加了校驗和。由於RC4生成有問題的字符集,因此我們也將其轉換爲HEX。這個組合相對安全並且自我檢查。解密的值只是我們可以在數據庫中驗證的一個數字。這適用於我們的電子郵件提醒和禮品證書。

1

只是想補充一點,如果您擔心暴力破解企圖,您可以要求提供基於驗證碼或基於JavaScript的hashcash值以及禮物代碼。如果您希望儘可能不引人注意,那麼您只能在第一次失敗後嘗試進行後續嘗試。

您可能會考慮的一件事是,用戶輸入禮品代碼後,創建一箇中間頁面,其中包含有關該優惠的更多詳細信息,顯示剩餘索賠的數量,以及有關完成提供(地址,信用卡等)。如果用戶選擇要求報價,請在地址和其他個人信息的數據輸入頁面上進行10-15分鐘的倒計時(通過JavaScript更新),以便用戶知道如果報價沒有輸入信息立即。

要考慮的另一件事是實現一個「取消」按鈕,指示用戶可以使報價可供其他用戶使用,而無需等待倒數到期。

相關問題