perl - Perl 中用于 Web 控制面板登录的唯一 Web 浏览器标识 ID

标签 perl authentication cookies encryption

Web 浏览器是否具有可以传递给 Perl 脚本的唯一 ID? (就像一个独特的系列——比如你在商店里买的产品)

例如:如果我安装了一个网络浏览器,这个网络浏览器能否为 PHP 或 Perl 脚本提供一个唯一的识别 ID?

我正在寻找独特的东西的原因是执行以下操作:

  • 我有一个包含用户名和密码的用户数据库。
  • 用户名/密码被加密并设置为用户 Web 浏览器的 cookie,以便用户可以登录和注销我的 Web 应用程序。 (登录时加载的每个网页都会查看 cookie 并在 cookie 用户/密码正确时授予访问权限)
  • 如果黑客设法从用户​​那里窃取加密的用户名和密码 cookie,他将能够使用窃取的加密详细信息登录。

  • 如果用户的浏览器都有唯一的 ID 可以传递,那么我可以记录这些 ID,并在用户每次使用他的加密用户/密码 cookie 时进行匹配。这样,如果唯一 ID 不匹配(先前记录的内容),则用户将注销并要求再次手动登录。

    如果加密的用户/通行证被盗,黑客将无法利用它,因为唯一的浏览器 ID 不匹配。用户/密码 cookie 是加密的,黑客无法看到用户名或密码。当唯一的浏览器记录的 ID 不匹配时,Web 应用程序将要求用户手动登录,黑客将无法手动登录,因为他窃取的用户/密码是加密的。

    使用 IP 地址是一种可能的解决方案,但也是一个糟糕的解决方案,因为许多(如果不是大多数)ISP 将动态 IP 分配给其客户端的 Internet 连接。

    使用时间也不是一个好的解决方案,因为我希望用户一次在同一台计算机上登录数周(如果他们选择这样做)以方便使用。

    有人对上述情况有任何解决方案吗?

    我一直在寻找一种从浏览器中获取独特内容的方法,但这似乎是不可能的。有可能吗?

    最佳答案

    浏览器没有唯一ID,但是好级别fingerprinting是可能的。 The EFF has measured也就是说,在最好的情况下,浏览器发送的信息(包括用户代理字符串和其他 HTTP header )代表 18.1 位的熵,这意味着如果您随机选取两个浏览器,您有 1 次机会在 218.1(≈280,000)将具有相同的“指纹”。他们已经成立 a website where you can estimate the degree entropy您的浏览器发送的信息。

    一些网站使用这个。例如,我的银行存储了我最常用于连接到他们网站的三种浏览器的信息,并在我不使用其中一种时向我询问其他验证问题。

    另一方面,所有这些信息都是完全可以欺骗的:如果有人能够进行中间人攻击并窃取 cookie,他们也能够窃取浏览器发送的所有 header ,并且可以重用它们在您的网站上进行身份验证。如果浏览器实际上具有唯一 ID,情况也是如此。

    除了使用 SSL (https) 加密的连接要求您支付签名证书或创建自签名证书以向访问者显示安全警告之外,您的替代方法是针对 session highjacking. 采取更好的做法。

    一方面,将用户名和密码保存在 cookie 中是不标准的,即使是加密的。您应该做的是,一旦用户登录到您的网站,就为他们分配一个随机的、一次性使用的 session ID,您将将该 ID 与过期时间一起存储在您的数据库中(您可以在每次用户与您的网站交互时延长该时间) , 并将其放入 cookie 中。

    如果您想要更高程度的保护,一种选择是在用户每次发送 HTTP 请求时更改 session ID。您还可以存储每个用户用于连接到您的网站的 IP 地址列表,或者 IP 地址掩码(例如 X.Y.*.*)(如果更改过于频繁),并在他们从不寻常的地方连接时让他们进行身份验证。如果你这样做,最好问他们“你会从这个地方再次连接吗?”

    关于perl - Perl 中用于 Web 控制面板登录的唯一 Web 浏览器标识 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23827319/

    相关文章:

    cookies - 使用 cookie 而不发送到浏览器和文档 header

    perl - 如何驯服 Perl 文件的 Vim 关键字(不是omni)完成?

    iphone - Twitter:身份验证已更改?应用程序突然在身份验证窗口(钛)上崩溃

    ios - Janrain appId可以公开吗?

    javascript - 这是否可以使用 PHP 保持登录凭据有效?

    java - 在 Java 中使用 cookie 登录网页

    linux - Motif Widget Toolkit 的 Perl 绑定(bind)

    perl - 如何在 Log4perl 中仅记录 INFO 级别?

    perl - 在 Perl 中,readline 如何在循环条件中分配给 $_ 而不是在其他地方?

    javascript - 使用 HTML 创建登录页面