【问题标题】:How does the security in the onClick tag prevent javascript injection?onClick 标记中的安全性如何防止 javascript 注入?
【发布时间】:2015-01-16 09:05:49
【问题描述】:

我一直在想,onClick 标签(以及其他标签)如何安全?我的意思是,任何人都可以在触发 onClick 时放置他们想要执行的任何 javascript,是什么阻止了某人注入恶意代码?

【问题讨论】:

  • 是什么阻止了某人在控制台中运行他们想要的任何 js?这就是为什么您不只依赖客户端安全性的原因。
  • 所以您必须自己实施安全措施?或者系统自带对注射的防御

标签: javascript html code-injection


【解决方案1】:

浏览器客户端本质上是不安全的。这是一个完全不安全的执行环境,您无法以任何方式真正保护它。

考虑这一点的方式是您无法控制浏览器中发生的事情。可以在任何浏览器中注入、修改或运行各种代码(通过书签、控制台、直接 DOM 操作,包括添加任意 onclick 处理程序、代理修改、调试工具等)。因此,您的客户本质上是不安全的。一旦您接受浏览器根本不安全,就更容易理解您需要在服务器上执行的操作。

这就是为什么您必须验证和清理从客户端到达您的服务器的任何结果。您必须在服务器上执行此操作,以防止不良数据进入您的服务器。您不得相信发送给您的任何数据都是正确或有效的。相反,您必须在使用它之前在服务器上完全验证它。

您几乎可以将其视为任何表单提交或 Ajax 调用或带有查询参数的 URL 或您的服务器接受的结构化 URL 是对您的服务器的 API 调用,您不知道谁在使用该 API 以及他们是否是否正确使用它。因此,在数据或请求到达时,您必须对数据或请求的有效性做出任何假设,直到您自己在服务器上对其进行检查以查看一切是否有效。


仅供参考,有各种技术,例如“隐藏在闭包中的数据或函数”、代码模糊等……这使得某人更难弄乱 Javascript 的某些部分。但是,重要的是要理解,这些只是对有决心或熟练的黑客的临时障碍,并不提供实际的安全性,不应依赖于安全性。熟练的黑客实际上可以用他们自己的修改版本替换您的整个 Javascript,这几乎意味着您无法在客户端 Javascript 中做任何事情来保护它。

【讨论】:

    【解决方案2】:

    绝对没有什么可以阻止客户端运行恶意 javascript 或使用其他开发人员工具。 (例如,添加表单元素)

    这就是为什么要由来确保您的服务器端脚本的安全。 (清理用户输入等)

    【讨论】:

      【解决方案3】:

      问题通常不在于单个用户是否可以在自己的计算机上在自己的浏览器中运行任何 JS。

      问题是当您被允许将该脚本保存到数据库时无需先对其进行清理,然后它会呈现在页面上供其他人查看和执行。然后,突然之间,他们可以在其他人的机器上执行代码,窃取他们的详细信息等。

      换句话说,例如,如果您允许用户在他们的 cmets 中指定 HTML 标记,并且您没有在该标记中搜索 <script> 标记、onclick 属性等,并在将其保存到之前将其删除数据库,那么你有一个潜在的问题。当您从数据库中获取保存的标记并将其显示在页面上的某个位置而不删除任何与 JS 相关的功能时,这将成为一个实际问题。

      【讨论】:

      • 好吧,我现在明白了,我以为你可以运行可能影响服务器的javascript,现在我意识到它的客户端(为什么我没有先考虑它,我实际上知道这一点)
      • 好吧,如果服务器只是盲目地接受来自客户端的请求,例如通过 AJAX,然后你可以通过在你的 JS 控制台中到处乱搞来向服务器发出这些请求。如果您还可以请求或修改您不应该访问的数据,那么这就是问题所在。始终在服务器上进行所有安全检查。您也可以在 JS 中在客户端上做一些额外的,以方便起见,但永远不要依赖它们,它们很容易被规避。
      【解决方案4】:

      没有保护。从开发人员控制台/检查元素中,您可以修改标记中的代码。但是,只有您可以看到您在检查元素中所做的修改,它们不会永久保存。因此访问该网站的其他用户无法看到您在开发者控制台中输入的代码。

      是什么阻止了制作页面的人将恶意代码放入onclick?好吧,在 javascript 中不可能有真正危险的代码,网站对计算机所能做的最糟糕的事情就是让浏览器崩溃。所以javascript是相当安全的。

      【讨论】:

        猜你喜欢
        • 2013-07-29
        • 2021-04-08
        • 2015-10-17
        • 2017-05-19
        • 2016-04-29
        • 1970-01-01
        • 1970-01-01
        • 2015-09-05
        • 2015-09-15
        相关资源
        最近更新 更多