让用户添加自己的样式表是一个坏主意吗?

时间:2009-10-07 20:30:54

标签: php security stylesheet

我是php的新手,我试图弄清楚这是一个坏主意或安全风险。

我有一个数据表,我提供给用户,它有一个默认的样式表加载,但如果用户想要包含他们自己的,我已经做到了,所以他们可以只指向他们的样式表:

http://www.mysite.com/info.php?css=http://www.someothersite.com/mystylesheet.css

我已尝试在css文件中添加结束样式标记和javascript,但DOM似乎只是将其加载为无法处理的CSS。

我从未见过任何其他网站允许这种添加样式表的方法,所以,这是一个好主意还是坏主意?我以为我可以让脚本加载文件并查找javascript中使用的关键词,但是通过我的测试,我不确定是否需要这样做。


更新:我按如下方式添加CSS:

<link href="<?php echo (isset($_GET['css'])) ? $_GET['css'] : 'default.css'; ?>" rel="stylesheet" type="text/css" />

4 个答案:

答案 0 :(得分:8)

只要样式表用于他们自己的帐户,而没有其他人使用,那么我会让他们这样做。但是,因为它可以用于会话劫持某人(如果他们没有注销),我会要求用户的密码来更改样式表。我也会强迫它存储在本地。

没有密码,劫机者需要做的就是:

#selector:before {
  content: expression(getCookie('phpsessid'));
}

显然,如果你没有一个名为getCookie的函数,那么他们需要做更多的工作,但是他们仍然很容易获得cookie数据。这就是自定义样式表的密码保护必需的原因。

如果您没有为每个用户添加字段,并使用$_GET['css']路由,请记住将用户从外部网站(例如MySpace)重定向到带有路由的页面是微不足道的用于劫持攻击的有害CSS文件。如果没有保护CSS文件更改的身份验证,即使登录也应该受密码保护,那么您的软件确实非常容易受到攻击。

答案 1 :(得分:3)

这是一个坏主意。

其他人所说的完全正确,但一个非常重要的附加点是,如果除了用户更新css EVER之外的任何人查看他们的css,那么该用户可以在用户查看他们的页面的上下文中执行他们想要的任何javascript。最糟糕的情况是用户使用恶意xss更新他们自己的页面,您查看他们的页面(以管理员身份登录),用户窃取您的密码并以您的身份登录并接管该网站。

根据您在网站中存储的其他安全问题存储的跨站点脚本,例如这可能导致像myspace samy蠕虫一样的xss蠕虫。

以下是关于基于CSS的xss http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/

的一些变体的正确链接

答案 2 :(得分:2)

似乎可以通过CSS完成XSS和大概点击劫持。您当然要小心,不能使用CSRF攻击设置CSS URL。

如果您的服务器正在请求加载原始CSS文件,那么您想要关注该传出(或可能是本地)连接。如果客户端正在这样做,那么您可能会担心URL中的信息泄露(幸运的是,URL重写的会话不再受欢迎)。

答案 3 :(得分:0)

这取决于它的使用方式。如果一个用户可以使用其他人的样式表来查看您的网站,那么您就是在为滥用行为做好准备。