用于键盘糖化的正则表达式

时间:2009-07-21 14:52:26

标签: python regex fraud-prevention

注册新帐户时,网络应用程序通常会询问“安全问题”的答案,即狗的姓名等。

我想通过我们的数据库查找用户只是捣乱键盘而不是提供合法答案的实例 - 这是滥用/欺诈帐户的高指标。

“母亲的娘家姓?” lakdsjflkaj

有关我应该如何做的任何建议吗?

注意:我不仅仅在这些“安全问题解答”中使用正则表达式

'答案'可以是:

  1. 使用一些基本的sql正则表达式从数据库中选择

  2. 使用python regexes

  3. 根据需要分析了多次
  4. 根据需要进行比较/修剪/评分

  5. 这是一个技术问题,而非哲学问题 ; - )

    谢谢!

11 个答案:

答案 0 :(得分:39)

我不会这样做 - 在我看来这些问题削弱了安全性,所以作为一个用户我总是尝试提供另一个半密码作为答案 - 对你来说它想要捣碎。嗯,它是捣碎的,但这正是我想要做的。

顺便说一下。我不确定你可以查询答案的事实。由于他们克服了你的密码保护,他们应该像密码一样处理=存储为哈希!

修改
当我阅读this article时,我立即想起了这些问题; - )

答案 1 :(得分:12)

安全问题的整个方法存在很大缺陷。

我总是发现人们将安全答案弱于他们使用的密码 安全问题只是安全链中的另一个环节 - 链接较弱!

IMO,更好的方法是允许用户请求发送到其注册电子邮件ID的新密码。这有两个好处。

  1. 蛮力企图必须首先找到并破坏电子邮件服务(而且,你永远不会帮助他们 - 保持注册电子邮件ID非常受保护)
    • 当有人尝试使用暴力破解时,您的服务用户将始终得到指示(他们收到邮件说他们试图重新生成密码)
  2. 如果您必须有秘密问题,请让他们触发重新生成(永不发送用户密码,重新生成临时,最好是一次性强制)密码发送到他们注册的电子邮件ID - 并且,完全没有表现出来。

    另一个诀窍是将自己的注册电子邮件ID 的秘密问题提交给他们 如果他们说得对,您可以向该电子邮件ID发送重新生成的临时密码。

答案 2 :(得分:6)

使用正则表达式无法做到这一点。实际上,我根本无法想出一个合理的方法 - 你会在哪里划出可疑和不可挽回的界线?我曾经一次经常用一个模糊的答案回答安全问题。毕竟,我母亲的婚前姓不是最难找到的。

答案 3 :(得分:5)

您可能最好分析n-gram分布,类似于语言检测。

This code是使用trigrams进行语言检测的示例。我的猜测是键盘粉碎三卦非常独特,不会出现在普通语言中。

答案 4 :(得分:4)

如果您可以找到英文字母对概率列表,则可以使用列表中不存在的最不可能的对和对来构造单词不是“真实”英语单词的近似概率。不幸的是,如果你有名字或其他“非单词”,那么你不能强迫它们成为英语单词。

答案 5 :(得分:4)

也许你可以查看丰富的辅音。例如,在您的示例lakdsjflkaj中,有2个元音(a)和9个辅音。通常,当随机按键时击中元音的概率远低于击中辅音的概率。

答案 6 :(得分:3)

Dejunk是一个Ruby库,您可以从中吸取灵感。它在其他答案中实现了一些建议。如果输入:

,它认为输入是键盘糖化
  • 包含不太可能出现在真实文本中但在键盘上靠得很近的字符双字母组。 (该库包含一系列此类双字母组合。)
  • 以意外的标点符号开头。
  • 有太多非常短的词。
  • 没有元音。
  • 字符重复次数不合理。

答案 7 :(得分:2)

您可以在开始时检查大写字母......这肯定会给您带来一些误报。

快速谷歌给了我this,您可以将每个与该列表中的名称进行比较。

显然只适用于你所说的安全问题。

您是否也见过这个:

Anatomy of the twitter attack

下次我实施安全问题时,我会努力思考。

答案 8 :(得分:2)

如果你的问题与真实的人名有关,那就不可能了。考虑用罗马字符键入的亚洲名字;他们可能很好地绊倒你提出的任何过滤器,但仍然完全合法。

答案 9 :(得分:0)

你可以寻找语音上没有意义的模式。如:

'q'后面没有'u'。

ASDF

QWER

ZXCV

asdlasd

基本上,尝试在自己的键盘上进行混搭,看看你得到了什么,并将其插入过滤器中。还插入各种语法规则。然而,由于它是你正在处理的名字,你总是会得到那个带有奇怪名字的“那个人”,这会导致误报。

答案 10 :(得分:0)

为什么不与已知的好的值列表进行比较,而不是正则表达式?例如,将母亲的婚前姓名与人口普查数据或宠物名称与您可以在线查找的任何宠物名称列表进行比较。对于更简单的版本,只需对输入的内容进行Google搜索即可。合法的名称应该有足够的结果,而键盘糖化应该导致很少(如果有的话)。

与任何其他方法一样,您仍然需要处理误报。