将 CSS(路径)推到 URL 中的参数上



我想为客户提供将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"  />');
}
?>

运行这个不安全吗?有什么建议和解释吗?

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

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

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


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

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

@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"  />');
}
}
}

相关内容

  • 没有找到相关文章

最新更新