【问题标题】:JavaScript code injection without a <script> tag没有 <script> 标签的 JavaScript 代码注入
【发布时间】:2011-08-11 04:45:50
【问题描述】:

客户端脚本正在将一些 HTML 从服务器拉入页面内弹出窗口(阴影框等)。

我怀疑这是通过 jQuery 的 .html() 某处完成的。

长话短说,以下失败:

<script type="text/javascript"> myFunc(); </script>

很遗憾,我无法修改客户端代码(因此我无法通过替代通道传递和执行 JavaScript 代码)。

我完成这项工作的一种方法是将以下内容作为 HTML 的一部分返回:

<img src="." onerror=" myFunc(); "/>

事后看来,我本可以使用有效的图像 URL 和 onload,但如果这两个事件都有效,我宁愿使用错误的路径来使浏览器立即引起调用(并减少一次 HTTP/缓存查找)。

关于目前的设置,我想听听您对此的看法,或许还有更好的解决方案。

编辑:

假设这是我不能乱用的客户端代码:

jQuery.get('test.php',function(data){
    jQuery('#popup').html(data);
});

这是test.php返回的数据:

Hello!
<script type=text/javascript> myFunc(); </script>

以下是我提出的解决方案:

Hello!
<img src="." onerror=" myFunc(); "/>

【问题讨论】:

  • 我很确定如果页面是通过 AJAX 拉入您的 HTML,那么您必须通过某种事件触发您的 JS。你唯一的缺点是它是一个额外的服务器 ping。
  • 你知道你基本上是在问如何进行潜在的 XSS 攻击吗?
  • @BalusC - 如果它在同一个域上运行,为什么会是 XSS?我只需要从 HTML 块中执行 JS 部分。
  • @DA - 我仍在提取 HTML; img 标签在返回的 HTML 中!
  • 图像 SRC 属性将 ping 服务器以请求图像

标签: javascript popup wmd shadowbox


【解决方案1】:

您可以在&lt;body&gt; 上使用 onload。

<body onload="myFunc();">

【讨论】:

  • 这显然行不通。我没有返回一个完整的 HTML 页面,只是一个摘录。我将通过澄清编辑我的问题
  • 您可以访问文件 test.php 吗?在这种情况下,我会返回一个 JSON,一个包含两个字段的数组。 JS 和 HTML。然后你可以使用 JavaScript 的 eval() 并注入 HTML。
  • 不,我已经在上面关于“替代渠道”的部分解释了这一点。顺便说一句,test.php 是假设性的 - 它实际上是 CMS 的输出,因此破解 CMS 核心以进行此修复是困难且有问题的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
  • 2014-01-13
  • 1970-01-01
  • 2022-11-19
  • 1970-01-01
相关资源
最近更新 更多