验证网站数据库中是否存在电子邮件

时间:2018-06-19 16:16:02

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 rubygems

我想验证我使用的电子邮件是否存在于网站中。

我尝试使用随机密码发布电子邮件,然后从搜索响应中使用搜索方法查看是否存在诸如“电子邮件无效”之类的字符串。

如果存在,则无效;如果不是,那么它是有效的电子邮件,因此它存在于网站的数据库中。

例如,我为facebook.com尝试过这种方法-但我正在寻找其他网站的通用方法:

require 'net/http'
require 'uri'
require 'json'

uri = URI.parse("https://www.facebook.com")
header = {'Content-Type': 'text/json'}
user = {user: {
               email: 'example@gmail.com',
               password: "some_password"
                  }
        }
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri.request_uri, header)
request.body = user.to_json
response = http.request(request)
puts response
puts request.body
source = Net::HTTP.get(uri)
puts source

1 个答案:

答案 0 :(得分:1)

  

不适用于facebook,因为我以它为例,但在其他网站上只是为了验证数据库中是否存在电子邮件

这并不总是可能的。对于给定的网站,您只能根据具体情况来实现。您可以尝试几种不同的方法(如下所述)。您可能还会发现,该网站根据您正在执行的操作尝试对限制/阻止您的请求进行评分-例如,通过添加验证码,(理论上,该操作必须通过人工干预才能完成)通过。

确定网站数据库中是否存在电子邮件的一些可能方法是:

  • 尝试登录(密码错误),然后查看响应(例如错误消息)是否指示电子邮件是否存在。
  • 尝试重设密码,然后查看响应(例如信息/错误消息)是否指示电子邮件是否存在。
  • 尝试登录几次(使用错误的密码),然后查看是否有任何迹象表明该帐户已经/即将被锁定
  • 尝试注册一个新帐户,看看是否有任何消息表明“该帐户已存在”
  • 尝试从网站内部“添加/联系/推荐朋友”;看看这是否表明该用户是否有帐户。
  • ...等等。

通常,在网站的用户友好性和安全性之间总会有一个折衷:一方面,提供有用的错误消息(如“密码错误”与“未知电子邮件”)很有帮助;而另一方面,网站泄漏信息是不安全的。

因此,我为什么通过说“并非总是可能的”来开始回答。这取决于每个网站的设计方式。

例如,使用Devise进行身份验证的Rails应用程序默认情况下将以上述方式公开信息。但是,如果您选择设置Devise的config.paranoid = true,则错误消息将变得通用并且不会泄漏此数据。

您还可以尝试通过响应时间来弄清这一点:有时,(设计不良的)网站将花更长的时间进行响应,例如如果电子邮件存在,则登录尝试失败或密码重置请求失败。

有关更多信息,请参见:https://www.owasp.org/index.php/Testing_for_User_Enumeration_and_Guessable_User_Account_(OWASP-AT-002)


我出于教育目的提供了上述信息,例如如何构建安全的网站;通常,我会提倡通过上述任何一种方法对您不拥有的网站“暴露”数据。

如果您在法律上有必要透露另一家公司网站持有的所有电子邮件,我强烈建议(如果需要,请通过法律系统)请求访问权限,而不是试图通过安全漏洞进行泄漏!