代码之家  ›  专栏  ›  技术社区  ›  Amr Badawy

我能以安全的方式从JavaScript读取Captcha数据吗?

  •  7
  • Amr Badawy  · 技术社区  · 14 年前

    我们在注册表单中使用Captcha控件,除了服务器验证之外,我们还对JavaScript(JQuery)中的所有字段进行完整的客户端验证。。
    我尝试了很多方法,但都会用JavaScript编写验证码值,任何人都可以访问:(

    3 回复  |  直到 14 年前
        1
  •  8
  •   Dan McGrath    14 年前

    这是做不到的。

    正如您所知,Javascript是客户端的,任何客户端代码都必须被视为潜在的危害,因为您无法控制它。


    根据评论请求,以下是总体思路:

    首先,在服务器上,计算一个随机字符串作为salt。每一个请求都应该是唯一的。这根绳子的作用是防止 rainbow table attacks .

    现在,单独保存这个字符串,还要创建另一个字符串,它是随机字符串和验证码答案的串联。对于这个新的组合字符串,您将生成它的哈希(例如,SHA-1)。

    using System.Web.Security;
    ...
    string hashVal = FormsAuthentication.HashPasswordForStoringInConfigFile(combined, "SHA1");
    

    随机字符串和散列值都需要放置在页面中,javascript才能读取。

    在客户端,当用户回答Captcha时,获取随机字符串并将其与答案连接起来(明白了吗?)。拿着这根绳子,你可以用 SHA-1 JQuery plugin 散列并将其与您发送的预先计算的散列进行比较。

    hashVal = $.sha1(combinedString)

    如果匹配,它(几乎)肯定是正确的答案。如果没有,那就100%错了。

        2
  •  1
  •   nathan gonzalez    14 年前

        3
  •  0
  •   Saff    14 年前

    我想最好的办法是5或10 ).