是否可以从地址栏加载远程JavaScript文件?

我一直在试图将其放入地址栏中:

javascript:src='http://depot.com/file.js';funcname();

我不是为了坏事。我只是在测试我的网站,仅此而已。如果您想保护您的网站,则必须先学习攻击它,对吗?

有帮助吗?

解决方案

我想您应该能够做以下操作:

javascript:(function () {
  var newScript = document.createElement('script');
  newScript.type = 'text/javascript';
  newScript.src = 'http://depot.com/file.js';
  document.getElementsByTagName('body')[0].appendChild(newScript);
})();

这是一个非常有用的例子(将其粘贴到您的地址栏中):

javascript:(function () {
  var newScript = document.createElement('script');
  newScript.type = 'text/javascript';
  newScript.src = 'http://cornify.com/js/cornify.js';
  document.getElementsByTagName('body')[0].appendChild(newScript);

  for (var i = 0; i < 5; i++) {
    newScript = document.createElement('script');
    newScript.type = 'text/javascript';
    newScript.src = 'http://cornify.com/js/cornify_run.js';
    document.getElementsByTagName('body')[0].appendChild(newScript);
  }
})();

瞧:

Stack Overflow cornified

实际上,这就是 Cornify.com 在其书签中包括远程脚本。


更新:

作为 @Ben在另一个答案中指出, ,调用在远程脚本中定义的函数并不是那么简单。 Ben建议解决此问题的一种解决方案,但还有另一种解决方案,即Cornify正在使用的解决方案。如果您退房 http://cornify.com/js/cornify_run.js 您会发现该文件中只有一个函数调用。你可以放置你的 funcname() 如Cornify所做的那样,请在单独的JavaScript文件中调用,因为保证按插入的顺序执行脚本块。然后,您必须包括两个脚本,如以下示例:

javascript:(function () {
  var newScript = document.createElement('script');
  newScript.type = 'text/javascript';
  newScript.src = 'http://depot.com/file.js';
  document.getElementsByTagName('body')[0].appendChild(newScript);

  newScript = document.createElement('script');
  newScript.type = 'text/javascript';
  newScript.src = 'http://depot.com/file_run.js';
  document.getElementsByTagName('body')[0].appendChild(newScript);
})();

在哪里 file_run.js 仅包括一个电话 funcname().

其他提示

不是直接的答案,但仍然有用。

这是在书签中使用时将加载到JavaScript文件中的脚本:

javascript:var%20e=document.createElement('script');e.setAttribute('language','javascript');e.setAttribute('src','http://github.com/balupton/ajaxy-bookmark/raw/master/script.js');document.body.appendChild(e);void(0);

没有直接的方法,但是一个常见的黑客是运行几行JavaScript,将标签插入当前页面,将其SRC属性设置为要运行的脚本的URL:

javascript:var s=document.createElement("script");s.src="http://depot.com/file.js";s.type="text/javascript";document.getElementsByTagName("body")[0].appendChild(s);

如果要运行在远程文件中定义的函数(àla) funcname() 在您的问题中),这有点棘手。这是因为通过标签的脚本加载不同步运行,因此文件很可能尚未完成加载,将元素添加到DOM中。我想到解决此问题的唯一方法是在插入元素之前定义一些函数,然后在随附的源文件的末尾调用该元素:

function doStuff() {
    // run code that depends on the included JS file
};
// include the external script, as per the snippet above

然后,您将包括一个电话 doStuff 在随附的文件的末尾:

if(doStuff) doStuff();

最终结果看起来像这样:

javascript:function doStuff(){funcname()};var s=document.createElement("script");s.src="http://depot.com/file.js";s.type="text/javascript";document.getElementsByTagName("body")[0].appendChild(s);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top