2010-02-14 30 views
2

我用我的網站的形式提交下列安全(invisble驗證碼),以防止自動提交:看不見驗證碼

  1. 產生對數x固定鹽MD5的結果,並使其 內形式作爲隱藏字段
  2. 生成2個隱藏字段A和b,其中A + b = X,a和b是 未加密
  3. 在提交,使用JavaScript來添加其他純隱藏的字段c 其中c = A + b
  4. 服務器端的基於C採用MD5與鹽,但是這樣的系統在生產中破獲一起加密 X

比較一下,一個人能夠成功自動提交成千上萬的形式。任何想法如何?

這樣做的一種方式是,黑客已經知道操作是+(通過javascript觀察很容易找到),讀取表單並添加a和b,創建一個新的表單,其中包含額外的c字段C = A + b。他必須先閱讀一份表格,然後創建一份表格。

我的問題是:

  1. 我是可能的方法來打破我的系統上面提出的假設是什麼?
  2. 如果是這樣,我該怎麼做才能防止這種黑客行爲?
  3. 什麼是黑客可能使用的其他替代黑客?

我不想使用真正的驗證碼,因爲它會降低用戶體驗。所有建議都歡迎。

回答

5

另外,黑客可以只是執行你自己的JavaScript本身

如果你想驗證用戶不是機器人,你必須讓用戶做一些機器人不能做的事情。這真的很簡單。

0

我不能給你的具體情況提供建議,但Django有一些不錯的方法,可以在沒有驗證碼的情況下如何抑制評論字段中的垃圾郵件:Nice approaches here

1

進一步的步驟是增加所需的計算量;使表單太快提交不可行。試試看HashCash

0

您的系統無法正常工作,因爲攻擊者只是自己執行您的JavaScript。如果您想要使用某種類似的方案來阻止自動提交,則需要在客戶端上放置一個工作負載因子。這不會阻止自動化軟件能夠提交到您的站點,但它會減慢它們並增加攻擊的成本。目標是增加成本並減緩它們的攻擊力,以至於攻擊不值得。而不是試圖自己建立它嘗試使用this proof of work service