我有以下代码:
echo "<span title='{$_GET["t"]}'>Foo</span>";
显然,这段代码不是XSS-Save,但是当我调用以下URL时,没有执行JavaScript:
-
url?t=Foo" onclick="alert(1)"
-
url?t=<script>alert(1);</script>
浏览器在这里做了一些神奇的工作吗?是否存在任何攻击向量?
最佳答案
为什么会这样呢?您将生成以下内容:
-
<span title='Foo" onclick="alert(1)"'>Foo</span>
-
<span title='<script>alert(1)</script>'>Foo</span>
两者都不是有效的 html/javascript。第一个的引号不匹配,因此标签已损坏。第二个没有javascript。它有一个标题属性,其中包含字符 <
, s
, c
等等...那不是javascript。这只是一些看起来像 JavaScript 的文本。
要执行 XSS,无论您注入(inject)什么,必须 才能生成有效的代码,否则无论您注入(inject)什么环境,它都只是一个语法错误。
一个有效的例子是:
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
代表你注入(inject)的内容。
关于javascript - XSS:这如何安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39499702/