【问题标题】:Print JavaScript code from external file从外部文件打印 JavaScript 代码
【发布时间】:2012-03-13 12:59:57
【问题描述】:

我正在尝试了解如何在外部包含 JavaScript,以便代码打印到页面。

当我将 JavaScript 直接插入页面代码时,它会打印“hello”

<html>
<head>
<title></title>
</head>
<body>
<script type="text/javascript">document.write("hello");</script>
</body>
</html>

但是,当我将相同的代码放入外部文件时说“javascript.js”并将其 (src) 包含在 html 中,它不会打印“hello”?

<html>
<head>
<title></title>
<script type="text/javascript" src="http://thewebsite.com/javascript.js"></script>
</head>
<body>
</body>
</html> 

我正在尝试了解如何让该外部 JavaScript 文件运行并打印“hello”。 如果黑客要在其中包含以下标记,例如 textarea 以从恶意服务器调用他的恶意脚本,那么 XSS 是如何工作的?

<script type="text/javascript" src="http://thewebsite.com/javascript.js"></script>

这是“javascript.js”文件中的内容:

<script type="text/javascript">
document.write("hello");
</script>

该文件位于同一个域中,因此同源策略不应在此处应用,如前所述,如果我直接插入代码,它确实有效,但当我尝试将其包含为单独的文件时则无效。

我认为包含 JavaScript 作为外部文件,应该打印外部文件的内容(即本例中的“hello”),就好像它直接插入到 html 页面中一样?

【问题讨论】:

  • 你能告诉你在控制台上得到了什么吗?以及您使用的浏览器。我能够得到你想要做的事情。
  • 你的 javascript 文件中不需要
  • Firefox 浏览器 3.6.18 并且没有任何内容打印到屏幕上。我正在尝试做一个虚拟 XSS,我在页面上有一个 textarea,我插入 JavaScript src 标记以尝试让它从 src 包含的外部文件中的代码将“hello”打印到页面。
  • 感谢 Ajai,您解决了,外部 javascript 文件中的
  • 你插入了javascript src标签?对不起,我无法理解。如果您想执行持久性 xss 攻击,您需要将整个 js 代码注入到 textarea 中,该代码未经解析并存储在服务器中。因此,任何访问您的个人资料的人都将在登录时执行该脚本。这就是 xss 持久攻击的工作原理。现在,当您尝试加载外部 js 文件时,您需要包含整个脚本 &lt;script type="text/javascript" src="http://thewebsite.com/javascript.js"&gt;&lt;/script&gt; 而不仅仅是 javascript 标签的 src(我不知道这意味着什么,但无论如何)

标签: javascript xss


【解决方案1】:

当我将 JavaScript 直接插入页面代码时,它会打印“hello”

正确

但是,当我将相同的代码放入外部文件时说“javascript.js”并将其 (src) 包含在 html 中,它不会打印“hello”?

如果内容没有被写入,那么可能会引发错误。检查浏览器的错误控制台。

问题在于您在 JavaScript 文件中包含 HTML 脚本标签。 JavaScript 文件应只包含 JavaScript。

文件在同一个域中,所以同源策略不应该在这里应用

它没有。同源策略只是阻止 JavaScript 运行(未从)Origin A 读取来自 Origin B 的数据。由于数据包含在脚本本身中,因此即使脚本是从 Origin B 加载的,它仍然可用。

【讨论】:

    【解决方案2】:

    我猜有一个名为Same Origin Policy 的浏览器强制执行的策略,它确保来自不同域的 JS 在加载到单个页面时不会访问彼此的数据。假设您有一个 Google 广告,其中包含一些 Javascript。如果 Google Ads 中的脚本能够访问您网站中的数据,那将是不可取的(反之亦然,但当然,您总是将 Google Ads 或 Like 按钮作为 iFrame,因此无论如何它们是最整齐分开的。)

    如果您可以将 js 文件作为 src 加载到图像文件,那么我想您可以实现您想要的。(如果我没记错的话。)

    编辑:javascript 文件不能作为 img 标签的 src 的输入。您只能将其用作javascript: 方案。

    【讨论】:

    • “javascript.js”文件在同一个域中,所以 SOP 应该不会影响这个
    • 另外,这不是 SOP 的工作方式。如果您从 google.com 加载脚本,那么您相信 Google 不会在该脚本中放入任何会伤害您的内容。该脚本可以完全访问您的 Origin 上的所有数据,因为这是它正在执行的上下文。
    • 您不能将 JavaScript 文件用作图像的 src。 JS 文件将被请求,被视为不是图像,并被丢弃(使用 img 元素的 onerror 函数触发)。您可以使用 javascript: 方案 URI 作为图像的 src(其中所有 JS 都包含在 URI 本身中,而不是通过 HTTP 加载),但大多数浏览器会丢弃它们,因为它们很少有用且常见的 JavaScript 来源,让作者在询问用户生成的内容时无法防范。
    • Google Ads 只是一个例子。我指的是网页中的一般广告展示位置。这是否意味着我允许将所有第三方广告放置在我的页面中并允许他们访问他们需要的任何数据?
    • 如果您通过将&lt;script&gt; 元素放入页面来包含它们,那么是的,您就是。
    猜你喜欢
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 2012-01-29
    • 2013-11-11
    • 1970-01-01
    相关资源
    最近更新 更多