我的PHP代码易受XSS攻击吗


Is my PHP code vulnerable to XSS?

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

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

所以我在url中放了一个iframe来发送带有设置的请求。

<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对象/字符串,而不是直接将其放入脚本标记(或使用eval),从而防止(至少这是一个)XSS。