我的 PHP 代码容易受到 XSS 攻击吗?

Is my PHP code vulnerable to XSS?

本网站的用户使用一种工具来构建具有自定义设置的 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 攻击?如果是,我该如何预防?

是的,您的代码容易受到 XSS 攻击。事实上,让用户 运行 任意 javascript 几乎就是 XSS 漏洞的定义。它是有意而不是意外的事实并不能降低它的脆弱性。

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