【问题标题】:Is my PHP code vulnerable to XSS?我的 PHP 代码容易受到 XSS 攻击吗?
【发布时间】:2016-01-11 02:52:14
【问题描述】:

本网站的用户使用一种工具来构建具有自定义设置的 JavaScript 对象。

每次他们更改输入元素中的某些内容时,我都想用他们自己的设置执行这段 javascript 代码并显示预览。

所以我放了一个 iframe,用 url 中的设置发送请求。

<iframe src="settings.php?javascript=...></iframe>

每次他们更改某些内容时,都会重新加载 iframe。

我的 PHP 代码?

<?php

$javascript = "";

/**/

if(empty($_GET["javascript"]))
{
    exit;
}

/**/

$javascript = "

    <script>
        ".$_GET["javascript"]."
    </script>

";

/**/

$html = '

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <meta name="viewport" content="width=device-width">
            '.$javascript.'
        </head>
        <body></body>
    </html>

';

/**/

echo($html);

此代码是否容易受到 XSS 攻击?如果是,我该如何防止这种情况发生?

【问题讨论】:

  • 如果您让人们插入他们想要的任何 javascript,他们可以放置漏洞并分享链接。你怎么能防止这种情况发生?不要让人们在您的网站上运行自己的 javascript。
  • 很简单:settings.php?javascript=alert%28%22I+am+vulnerable%22%29%3B 所以是的,很脆弱。
  • 只是说:他们可以很容易地比 javascript 放更多东西。另外,是的,永远不要让人们在其他机器上运行 JS。 settings.php?javascript=

    哈哈,我可以写任何东西,甚至可以在不需要知道 iframe 的内部结构的情况下询问用户密码和其他东西

  • Keh,您可以确保它的安全,但要做到这一点非常很难做到这一点,而不仅仅是阻止其他人在您的网页上运行他们的 javascript 代码。您可以将其沙箱化。或者实施 CSP...
  • 如果我只传递 JSON 对象,它需要一些过滤器吗?

标签: javascript php xss


【解决方案1】:

是的,您的代码易受 XSS 攻击。事实上,让用户运行任意 javascript 几乎就是 XSS 漏洞的定义。它是故意而不是偶然的事实并没有减少它的脆弱性。

如果你想要的只是一个设置对象,那么当你可以使用 JSON 时,没有理由允许任意 javascript。 JSON.parse 将在 javascript 中将 JSON 字符串解析为 JS 对象(并且 JSON.stringify 会将对象序列化为字符串)。使用 JSON 方法将进行额外的验证,以确保对象是有效的 JSON 对象/字符串,而不是直接将其放入脚本标签(或使用 eval)中,从而防止(至少是这一场所)XSS。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多