键盘乱敲的正则表达式

6 投票
11 回答
2326 浏览
提问于 2025-04-15 13:03

在注册新账户时,很多网站应用会要求你回答一个“安全问题”,比如“你狗的名字是什么?”之类的。

我想在我们的数据库里查找那些用户只是随便敲键盘,而不是给出真实答案的情况——这通常意味着这个账户可能是恶意或欺诈的。

比如问“母亲的娘家姓是什么?”

用户可能会回答:“lakdsjflkaj”。

有没有什么建议可以帮助我完成这个任务呢?

注意:我不仅仅是用正则表达式来处理这些“安全问题的答案”

这些“答案”可以:

  1. 通过一些基本的SQL正则表达式从数据库中选出来

  2. 用Python的正则表达式进行多次分析

  3. 根据需要进行比较、筛选和评分

这是一个技术性的问题,不是哲学问题 ;-)

谢谢!

11 个回答

13

安全问题的整个做法其实有点问题。

我一直觉得人们在安全问题的答案上往往比他们的密码还要弱
安全问题就像安全链中的一个环节——而且是最弱的那个环节!

我认为,更好的做法是允许用户请求将新密码发送到他们注册的邮箱。这样有两个好处。

  1. 破解者首先得找到并攻破邮箱服务(而且,你永远不会帮他们做到这一点——一定要好好保护注册的邮箱地址)
    • 你的服务用户会在有人尝试破解时收到通知(他们会收到一封邮件,告诉他们有人试图重置密码)

如果你非得要有秘密问题,那就让它触发一个重新生成的(永远不要发送用户的密码,生成一个临时的,最好是一次性的)密码发送到他们注册的邮箱——而且,根本不要显示这个密码。

另一个小技巧是让秘密问题本身就是他们注册的邮箱地址
如果他们答对了,你就把重新生成的临时密码发送到那个邮箱。

40

我不建议这样做——在我看来,这些问题会降低安全性。所以作为用户,我总是尽量提供另一个半密码作为答案——对你来说就像是“土豆泥”。嗯,确实是土豆泥,但这正是我想要做的。

顺便说一下,我不太确定你能否查询这些答案。因为它们绕过了你的密码保护,所以应该像密码一样处理,也就是以哈希的形式存储!

编辑:
当我看到这篇文章时,我立刻想起了这些问题;-)

6

你可能更适合分析n-gram的分布,这个方法和语言检测有点像。

这段代码是一个使用三元组(trigrams)进行语言检测的例子。我猜测那些随意敲击键盘生成的三元组是非常独特的,正常语言中是不会出现的。

撰写回答