代码之家  ›  专栏  ›  技术社区  ›  Mottie

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

  •  4
  • Mottie  · 技术社区  · 15 年前

    我是新来php的,我试图弄明白这是一个坏主意还是一个安全风险。

    我向用户提供了一个数据表,它有一个加载的默认样式表,但是如果用户想要包含他们自己的样式表,我制作了它,这样他们就可以直接指向他们的样式表:

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

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


    更新:我正在添加CSS,如下所示:

    <link href="<?php echo (isset($_GET['css'])) ? $_GET['css'] : 'default.css'; ?>" rel="stylesheet" type="text/css" />
    
    4 回复  |  直到 15 年前
        1
  •  8
  •   Robert K    15 年前

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

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

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

    本质的

    如果不包括每个用户的字段,请使用 $_GET['css'] 路由,然后记住,将用户从外部站点(比如MySpace)重定向到他们的页面,并通过一个指向有害CSS文件的路由进行劫持攻击,这是很简单的。如果没有身份验证来保护CSS文件的更改(即使在登录时也应该有密码保护),那么您的软件确实非常容易受到攻击。

        2
  •  3
  •   Collin    15 年前

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

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

    http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/

        3
  •  2
  •   Tom Hawtin - tackline    15 年前

    看来XSS和clickjacking都可以通过CSS实现。您当然应该小心CSS URL不能被CSRF攻击设置。

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

        4
  •  0
  •   BryanH Philipp Andreychev    15 年前

    这取决于它是如何使用的。如果一个用户可能看到您的站点使用了其他人的样式表,那么您就是在为自己设置滥用。