【问题标题】:Push CSS (Path) over a Parameter in URL通过 URL 中的参数推送 CSS(路径)
【发布时间】:2020-05-17 07:41:31
【问题描述】:

我想为客户提供一种将 CSS 插入 Iframe 以更改颜色等的可能性。

我的代码是这样做的好方法吗?我已经用 htmlspecialchars 包装了“GET”,以防止注入或关闭标签,即 ?> 在 URL 中运行随机新代码。

<?
$css_url = null;
if ( isset($_GET["css_url"]) ) {
	$css_url = "". htmlspecialchars($_GET["css_url"]);
}
if ($css-url != null && strlen($css_url) > 0) {
	echo('<link href="'.$css_url.'" rel="stylesheet" type="text/css"  />');
}
?>

运行它是否不安全?任何建议和解释为什么?

【问题讨论】:

标签: php css security


【解决方案1】:

首先,要明确一点,您在这里注入的不是 CSS 规则,而是一个指向必须托管在某处的外部 CSS 文件的链接。 这真的是你想要的吗?

  • 关于 XSS 注入的风险,您可以使用 htmlspecialchars(),只要您提供正确的页面编码作为第三个参数即可;
  • 但是,您至少应该对 URL 进行完整性检查(检查它是否以 http://https:// 开头,并且在语法上是有效的;
  • 如果您的网站位于https,您必须只接受以https 开头的网址,否则您会在浏览器中收到不安全内容警告;

除此之外,风险应该非常有限。如果链接没有指向有效的 CSS 文件,它很可能会被忽略。唯一真正令人烦恼的是攻击者能够让您网站的访问者在他们想要的任何 URL 上触发GET 请求。


话虽如此,我建议您允许用户提供 CSS 规则,即 &lt;style&gt; 标记内的内容。现在,如果您这样做,情况就不同了:您必须确保提供的 CSS 代码不包含 &lt;/style&gt;,否则这将为 XSS 注入打开大门。

如果您遵循这条路线,我建议您解析 CSS 解析器提供的 CSS 规则,例如 this one。这样,您可以确保只能给出有效的 CSS,这对安全性和质量都有好处。

【讨论】:

  • 您好,谢谢!是的,它是关于通过参数解析 CSS 文件(完整 URL)。不仅仅是一些参数。
【解决方案2】:

@Benjamin 我和朋友一起编辑了代码。 对此有什么想法吗?我们尝试插入您的建议:

$cssurl = null;
if ( isset($_GET["cssurl"]) ) {
    $cssurl = "". htmlspecialchars($_GET["cssurl"], ENT_COMPAT, "UTF-8");
}
if ($cssurl != null && strlen($cssurl) > 0) {
    if (strpos($cssurl, "https://") === 0) {
        if (strrpos($cssurl, ".css") === strlen($cssurl)-4) {
            echo('<link href="'.$cssurl.'" rel="stylesheet" type="text/css"  />');
        }
    }
}

【讨论】:

    猜你喜欢
    • 2017-01-24
    • 1970-01-01
    • 2017-12-05
    • 2017-03-19
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 2018-11-24
    • 2019-07-20
    相关资源
    最近更新 更多