【问题标题】:Is there a foolproof way to check browser in JS or Node.JS?有没有一种万无一失的方法来检查 JS 或 Node.JS 中的浏览器?
【发布时间】:2018-01-11 17:44:26
【问题描述】:

我有一个网站,我想禁止所有不使用 chrome 及其衍生产品、firefox 及其衍生产品、safari 或新版本的 opera 的用户(IE 和其他旧浏览器可能会危及安全性)。有没有一种绝对万无一失的方法(即使是黑客也无法欺骗他们的浏览器)在客户端或服务器端的 JavaScript 中执行此操作?

【问题讨论】:

  • 确保您的服务器已加固。这是唯一的防御。你无法控制任何客户端。
  • 答案是“不”
  • 如果某个特定的浏览器会危害您网站的安全性,那么即使您禁止它,您也无法恢复该安全性。它表明该漏洞很容易被用户触及,这反过来意味着任何人都可以利用它,即使他们使用“认可”的浏览器。这听起来像是一个 XY 问题。
  • 嗯,问题是旧的 IE 版本不支持 cookie 安全性(特别是 httpOnly),我不知道如何解决。
  • @IsaacKrementsov - 除非您允许来自外部来源的第 3 方、恶意和不受信任的 Javascript 进入您的网页,否则您对 httpOnly 购买的东西有点误解。如果 cookie 在传输过程中受 https 保护,那么从用户浏览器中捕获它们的唯一方法是用户计算机上运行的恶意工具。而且,如果他们运行了这样的工具,那么无论如何都可以从浏览器存储中获取 cookie。你担心什么样的攻击,你认为你必须有httpOnly才能安全?

标签: javascript node.js security browser cross-browser


【解决方案1】:

不,它不能可靠地完成。您可以使用一些复杂的 JavaScript 计时运行,并将测试库的执行时间与每个浏览器和版本的已知计时进行比较。显然,这必须在比率的基础上进行测试,以排除硬件性能的差异。但是,这并不是万无一失的,并且需要对每个浏览器版本进行“指纹识别”性能,并且您会接受并且需要随着每个新浏览器版本的发布而不断更新。这不是一个万无一失的方法,通常被认为是一个非常糟糕的主意。它还可能导致误报,这将导致使用合规浏览器的人根据您的 JavaScript 指纹测试的可变性被拒绝访问。

强化服务器是一种更好的方法,使用简单的浏览器标识符(如导航器名称)将提供您需要的结果。试图设计一个万无一失的方法的麻烦在于,即使你让它工作,一个狡猾的黑客仍然可以得到你。强化服务器是保护您的网站的唯一真正方法。

【讨论】:

  • 我可以将它加载到 Fiddler/Charles 上,然后查看发回的内容并将其放在我的请求中......这不会有任何区别。
  • 问题在于 cookie,而不是实际的服务器端代码。我想让 cookie 只能被服务器读取(虽然很难按原样读取 cookie,但这将使安全防弹,除非黑客获得了对我服务器的访问权限)。
【解决方案2】:

这是一种糟糕的安全方法

您不应依赖用户从特定浏览器访问您的网站这一事实。相反,您应该选择允许那些兼容的浏览器使用功能,并通过签名(浏览器发送的有助于识别特定浏览器类型的部分)将其禁用给其他浏览器。

最重要的是,您应该永远不要在您的应用程序中留下漏洞!如果您知道这是不同浏览器类型中的漏洞,请修复问题 - 不要试图隐藏它。人们总会找到解决隐藏问题的方法。容易修复?让它没有隐藏的问题!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 2022-09-23
    相关资源
    最近更新 更多