【问题标题】:How to inject JavaScript into an internet forum that parses URLs如何将 JavaScript 注入解析 URL 的互联网论坛
【发布时间】:2015-11-05 06:02:42
【问题描述】:

假设情景

有一个互联网论坛,可以在其中键入与 URL 匹配的正则表达式,例如

http://somesite.com

一旦提交,将成为论坛帖子HTML中的链接。于是上面的链接就变成了

<a href="http://somesite.com">http://somesite.com</a>

如果可能的话,我想利用它来让 JavaScript 进入 a 标记的 href,即

href="javascript:(function(){alert('Yo, dawg');}())"

关键是我需要以某种方式获取表达式

javascript:(function(){alert('Yo, dawg');}())

做同样的事情,但被解析器识别为 URL。我怎么能这样做?有什么方法可以使用转义字符、unicode 或其他方式吗?

【问题讨论】:

  • 不,除非你知道他们用什么正则表达式来解析。
  • 我假设他们正在使用服务器端正则表达式?
  • @hjpotter92 为了便于讨论,假设是/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/,那么这是一个可以解决的问题吗?
  • 如果您已经知道正则表达式,您可以自己使用解析器对其进行测试!在 regex101.com 上测试模式
  • 看模式,我觉得你不行。该模式不接受javascript: 部分。

标签: javascript html regex xss code-injection


【解决方案1】:

不确定这个JS Fiddle 是否是您要的。

HTML:

<div id="test">
    http://www.example.com<br>
    http://google.com<br>
    google<br>
    object.property<br>
    http://www.ex-am-ple.com<br>
    www.test<br>
    http://text
</div>

JS:

var div = document.getElementById("test");
var divContent = div.innerHTML;
div.innerHTML = divContent.replace(/http:\/\/(.*)\.(\w+)/g, '<a href="//$1.$2" target="_blank" onclick="javascript:(function(){alert(\'Yo, dawg\');}())">$1.$2</a>');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-14
    • 2014-04-05
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    相关资源
    最近更新 更多