题
在签署了新的帐户,网络应用程序通常要求的答案的一个'安全问题',即狗的名称、等等。
我想通过我们的数据库,并寻找实例,用户只是捣碎的键盘的,而不是提供一个合理的答案-这是一种高指标的虐待/欺诈性的帐户。
"母亲的婚前名字?" lakdsjflkaj
任何建议如何我应该去做这个?
注:我不仅使用经常表达这些安全问题的答案'
在回答'可以是:
选自一个数据库使用的一些基本sql regex
分析为根据需要多次使用python regex
相比/修剪/评定为需要的
这是一个技术问题,不是一个哲学的一个 ;-)
谢谢!
解决方案
你可能是更好的分析n-gram分配,类似语言的检测。
这个代码 是一个例子检测使用语言卦.我的猜测是键盘砸卦是相当独特和不出现在通常的语言。
其他提示
我不会这么做的-在我看来这些问题削弱安全,这样作为用户我一直尝试提供的另一半密码作为一个答案-你会喜欢土豆泥.好,就是泥,但这正是我想要做的。
顺便说一句.我不知道有关事实上,你可以查询的答案。由于他们克服你的密码保护他们应该处理,如密码=储存作为一个哈!
编辑:
当我阅读 这篇文章 我立刻想起这一问题;-)
整个做法的安全问题是相当有缺陷的。
我总是发现 人们把安全回答弱于他们使用的密码.
安全问题,都是一个更多的链接在一个安全链--较弱的链接!
海事组织、一个更好的方式走会来 允许用户要求一个新的密码发送到他们的注册的电子邮件id.这有两个好处。
- 的暴力尝试已找到并打破电子邮件服务的第(而且,你将永远不会帮助他们在那里--保持注册的电子邮件id非常受保护的)
- 用户服务的总是会得到的指示,当有人试图暴力破解(他们得到一个邮件说,他们试着重新生成了他们的密码)
如果你必须具有秘密的问题,让他们触发的一再产生的(从来没有发送用户密码,重新生成的临时,最好一次被迫)密码分派到电子邮件id他们登记--而且,不显示,在所有。
另一招是 做秘密的问题本身,他们的注册的电子邮件id.
如果他们把它正确的,你发送一个 重新产生的 临时密码,以电子邮件id。
有没有办法做到这一regex.实际上,我想不出合理的方式来做到这一点,在所有--你会在哪里画的线之间的可疑和unsuspicious?我有一次,往往答案的安全问题有一个模糊的回答。毕竟,我母亲的名字不是最难的事情找出来。
如果你能找到一个列表中的字母-对概率在英语中,你可以构建一个大致的概率的单词不是"真实"的文字,使用尽可能少对,对,不在名单。不幸的是,如果你有名称或其他"非的词语"然后你不能强迫他们以英文字。
也许你可以检查丰富的辅音。例如,在你的例子 lakdsjflkaj
有2个元音字母(a)和9的辅音。通常的概率撞上一个元音时随机的按键远低于一个打一个辅音。
Dejunk 是一个红宝库,从中可以汲取灵感。它实现了一些建议在其他的答案。它认为,输入键盘捣碎如果输入:
- 包含符的双字母组不大可能出现在真实的文本,但是紧靠在一起的键盘上。(库包括一系列这样的双字母组.)
- 开始与一个意想不到的标点符号。
- 有太多的非常短的话。
- 没有元音。
- 有人物,是重复的一个不合理的次数。
如果你的问题是以往一些相关的一个真实的,人的名字,这是不可能的。考虑亚洲地名类型的罗马字符;他们很可能旅行的任何过滤你来了,但是仍然完全合法的。
你可以寻找模式没有意义的发音。例如:
"q"不接着一个'u'。
航空自卫队
qwer
zxcv
asdlasd
基本上,尝试混合在自己的键盘,看看你得到什么,以及塞在你的过滤器。还插在各种语法规则。然而,由于它的名称正在处理的,你总是会得到'那人'与奇怪的名字,他们会造成一种虚假正面的。
而不是常规的表达,为什么不只是比较有已知良好的价值观?例如,比较母亲的娘家姓与人口普查数据,或宠物的名字有任何宠物的名称列出的可以在网上找到。对于一个更简单的版本,只是做一个谷歌搜索无论是输入的。合法的名称应该有足够的结果,同时键盘糖化应该导致很少有(如果有)。
与任何其他方法,必将仍然需要处理的误报。