【问题标题】:XSS: How is this safe?XSS:这怎么安全?
【发布时间】:2016-09-14 21:11:40
【问题描述】:

我有以下代码:

echo "<span title='{$_GET["t"]}'>Foo</span>";

显然,这段代码不是 XSS-Save,但是当我调用以下 URL 时,没有执行任何 JavaScript:

  1. url?t=Foo" onclick="alert(1)"
  2. url?t=&lt;script&gt;alert(1);&lt;/script&gt;

浏览器在这里做了一些神奇的工作吗?有没有攻击向量?

【问题讨论】:

  • 在第一种情况下你不匹配结束单引号,在第二个脚本中不会在标题属性内执行
  • 你看过生成的 HTML 吗?我不认为你正在产生你认为你正在产生的东西。
  • Is there any attack vector? erm,是的 - 关于这个的一切。您盲目地信任用户输入并将其置于可执行环境中而没有任何更改。没有什么可以被认为是安全的。
  • url?t=Foo' onclick="alert(1)" i='

标签: javascript php html security xss


【解决方案1】:

为什么会这样?您将生成以下内容:

  1. &lt;span title='Foo" onclick="alert(1)"'&gt;Foo&lt;/span&gt;
  2. &lt;span title='&lt;script&gt;alert(1)&lt;/script&gt;'&gt;Foo&lt;/span&gt;

它们都不是有效的 html/javascript。第一个在引号中不匹配,因此标签被破坏。第二个没有javascript。它有一个包含字符&lt;sc 等的title 属性……这不是javascript。这只是一些 LOOKS 像 javascript 的 TEXT。

要进行 XSS,无论您注入 HAS 以生成有效代码,否则对于您要注入的任何环境,它都只是语法错误。

一个可行的例子是:

http://example.com/script.php?t='><script>alert('1');</script><span+title='

会生成

<span title=''><script>alert('1');</script><span title=''>Foo</span>
xxxxxxxxxxxxx0000000000000000000000000000000000000000000xxxxxxxxxxxx

其中x代表原始文件,0代表你注入的内容。

【讨论】:

    【解决方案2】:

    如果您尝试测试这是否易受攻击,您需要结束单引号并关闭标签,然后添加您的 javascript。类似于以下内容:

    ?t=xss'><script>alert('hi')</script><span
    

    【讨论】:

      猜你喜欢
      • 2019-03-11
      • 1970-01-01
      • 1970-01-01
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      • 1970-01-01
      相关资源
      最近更新 更多