这是我的index.html(易受攻击的):
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="style.css">
<script src="script.js"></script>
</head>
<script>
document.write("<form><select>");
document.write("<option value=1>" +
document.location.href.substring(document.location.href.indexOf("default=") + 8)
+ "</option>");
document.write("<option value=2> French </option>");
document.write("</select> </form>");
document.write(document.location.href);
</script>
<body>
</body>
</html>
它应该从../index.html?default=English
获取默认语言,它将默认语言设置为英语。
我正在尝试使用../index.html?default=<script>alert(document.cookie)</script>
在屏幕上显示Cookie,但浏览器似乎将>
编码为%3E
。我还使用了\x3Cscript>alert(document.cookie)\x3C/script>
,\x3Cscript\3Ealert(document.cookie)\x3C/script\3E and <script>alert(document.cookie)</script>
,但没有运气。
答案 0 :(得分:1)
您的易受攻击的代码需要对从该位置解析的字符串使用decodeURIComponent
,以使攻击有效:
document.write("<option value=1>" +
decodeURIComponent(
document.location.href.substring(
document.location.href.indexOf("default=") + 8))
+ "</option>");
对于那些编写易受攻击代码的人来说“有意义”这样做是因为来自URL的字符串可能合法地包含>
等字符。