我想验证我使用的电子邮件是否存在于网站中。
我尝试使用随机密码发布电子邮件,然后从搜索响应中使用搜索方法查看是否存在诸如“电子邮件无效”之类的字符串。
如果存在,则无效;如果不是,那么它是有效的电子邮件,因此它存在于网站的数据库中。
例如,我为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
答案 0 :(得分:1)
不适用于facebook,因为我以它为例,但在其他网站上只是为了验证数据库中是否存在电子邮件
这并不总是可能的。对于给定的网站,您只能根据具体情况来实现。您可以尝试几种不同的方法(如下所述)。您可能还会发现,该网站根据您正在执行的操作尝试对限制/阻止您的请求进行评分-例如,通过添加验证码,(理论上,该操作必须通过人工干预才能完成)通过。
确定网站数据库中是否存在电子邮件的一些可能方法是:
通常,在网站的用户友好性和安全性之间总会有一个折衷:一方面,提供有用的错误消息(如“密码错误”与“未知电子邮件”)很有帮助;而另一方面,网站泄漏信息是不安全的。
因此,我为什么通过说“并非总是可能的”来开始回答。这取决于每个网站的设计方式。
例如,使用Devise进行身份验证的Rails应用程序默认情况下将以上述方式公开信息。但是,如果您选择设置Devise的config.paranoid = true
,则错误消息将变得通用并且不会泄漏此数据。
您还可以尝试通过响应时间来弄清这一点:有时,(设计不良的)网站将花更长的时间进行响应,例如如果电子邮件存在,则登录尝试失败或密码重置请求失败。
我出于教育目的提供了上述信息,例如如何构建安全的网站;通常,我会不提倡通过上述任何一种方法对您不拥有的网站“暴露”数据。
如果您在法律上有必要透露另一家公司网站持有的所有电子邮件,我强烈建议(如果需要,请通过法律系统)请求访问权限,而不是试图通过安全漏洞进行泄漏!