我正在考虑制作一个应用程序,使桌面客户端的 OpenID 身份验证变得容易。其基本原理是从网络浏览器窃取 cookie,以避免对每个可能的 OpenID 提供商进行硬编码身份验证。
假设用户已经登录到 OpenID 提供商,应用程序会从默认浏览器克隆 cookie,并使用适当的 OpenID URL 请求对所需服务进行身份验证。
为了使这个应用程序可用,我需要知道 Linux 上最常用的 Web 浏览器是什么,可能需要有统计证据。我认为 Firefox 和 Chromium 是目前最受欢迎的两个。
注意:鉴于受访者对安全和标准的强调,该问题的标题已被编辑。
答案1
“从网络浏览器窃取 cookie”以获得身份验证听起来正是恶意软件为了获取您的个人信息和登录数据而采取的做法。
如果这种方法有效,我建议您将其软件中的安全漏洞告知每个浏览器的开发团队。
答案2
当您编写抓取脚本并且不想在脚本中处理一些复杂的网站身份验证时,从 Web 浏览器窃取 cookie 是很常见的事情。
传统上,浏览器以 Netscape 继承的简单文本格式存储 cookie cookies.txt
。 Wget 有一个选项--load-cookies
加载这样的文件。
现代版本的 Firefox 和 Chrome 不再使用这种格式,而是使用 SQLite 数据库。有一些扩展可以使它们转储cookies.txt
文件,例如Cookie 导出器和cookie.txt 导出。
对于有技术头脑的人使用的脚本来说,这一切都很好,但我不会在普通公共应用程序中这样做。你会陷入痛苦的境地,不知道该使用什么浏览器(该用户有三个 Firefox 配置文件和两个 Chrome 配置文件,我应该看哪一个?),并使不太常见浏览器的用户感到愤怒(Opera、Konqueror、Gecko 等)。 )。即使它有效,它也会对可用性造成很大影响:您要求用户在使用您的应用程序之前在浏览器中执行某些操作,而不是在浏览器中执行某些操作(注销网站或删除 cookie)只要他们继续使用您的应用程序。
如果目标网站很难交互,我仍然认为该方法是合理的。即便如此,我还是倾向于让您的应用程序通过浏览器自动化框架与其自己的浏览器实例(使用自己的配置文件)进行交互,例如硒或者瓦提尔。对于一般的 OpenID 登录,我认为最好调用已知的浏览器并使其吐出身份验证凭据。
答案3
有很多方法可能会适得其反。
虽然有多种方法可以从浏览器中获取 cookie,但这并不是使用任何官方 API 来完成的。这意味着它依赖于当前发布的软件版本的实现细节,并且可能随时更改,恕不另行通知。随着浏览器内部结构的重新设计,您的应用程序可能并且将会在随机时间中断。您可能不会提前知道这些变化,因此,无论您需要多少天或几周的时间才能找到解决方法,愤怒的用户都会因为一个完全损坏的程序而对您紧追不舍。如果浏览器供应商出于安全考虑而决定对其 cookie 存储进行加密,那么您的整个程序将无法修复。
许多现代浏览器都有多个配置文件的概念。我可以使用我的个人帐户或工作帐户登录 Edge。您如何知道从哪一个中提取 cookie?用户切换浏览器配置文件时是否希望您在应用程序中切换帐户?长期以来,混淆工作帐户和个人帐户会给用户带来灾难。如果我想在您的应用程序中使用一个帐户,在我的浏览器中使用不同的帐户?
也许最重要的是,您迫使应用程序的用户以一种他们可能不习惯的非常特定的方式使用他们的网络浏览器。我(和许多其他人)使用私人/隐身模式(或类似的插件Cookie 自动删除)与任何需要登录的网站。这可确保关闭浏览器后不会保留任何 cookie 或其他登录信息。你的应用程序会要求用户以不安全的方式存储身份验证信息的方式使用浏览器。重视安全的人会认为这是不可能的。