如何确保用户输入是CSS而不是恶意代码?

时间:2012-12-14 10:35:08

标签: php css security input

在我的网站上,我想要包含一个文本框,允许成员在他们的个人资料中更改他们想要的任何内容......但我不想在一天早上醒来发现我的网站遭到黑客攻击或者某人打字并摧毁了一切或者他们不应该访问的东西。

有没有简单的方法来验证他们输入的文字只是css?我在这里看到了另一个类似的问题,它有XSS备忘单和禁用内容的提示(< and]]>和<![),但我不知道这是否足够。我肯定会使用那些信息。

基本上我想让PHP调用任何自定义css并将其插入用户配置文件的脚本标记之间。我想尽可能多地允许css。这是最好的方式吗?我不知道如何构建一个系统来生成安全文件,或者有耐心来构成一个带有选项的整个部分(特别是因为我想让成员更自由地使用他们的个人资料)。

任何建议都表示赞赏,如果有人知道某些脚本已经做到这一点,那将会摇滚,并帮助我弄清楚该怎么做:D。

3 个答案:

答案 0 :(得分:6)

当用户登录时,为该用户添加单独的<link>元素。 href可以指向为用户生成css的脚本,例如customcss.php?userid=1234&version=2 *)。该脚本只需要返回用户之前输入的所有内容。因为您将其作为单独的CSS文件包含在内,所以浏览器将始终将其视为此类文件,并且永远不会运行任何脚本。任何HTML或Javascript都被视为无效的CSS。

但请注意,无论如何包含脚本都没有什么害处,因为它们只会在登录用户的浏览器中运行,因此他们只能破解自己的网站视图。如果他们想要注入Javascript,他们仍然可以通过编写自己的浏览器插件来做到这一点,所以你不会打开以前不存在的可能性。

你需要担心的主要事情是

  • 可用性。如果用户犯了错误并意外隐藏了Body元素,该怎么办?他们将如何重置它?
  • SQL注入。无论您做什么或不允许,始终确保您的输入已经过保护。
  • PHP注入。不要执行(eval)用户内容。如初。
  • 隐藏用户信息。将代码添加到customcss.php网址,以防止其他用户猜测用户ID,深入了解其他用户的自定义设置。

*)我在CSS网址中添加了一个版本号,每次用户更新CSS时都应该在数据库中更新。如果你不这样做,浏览器将缓存旧的CSS,用户将开始向你抱怨,因为他们的更改将不会显示。

答案 1 :(得分:3)

我想这应该够了

$style = $_POST['style'];

$style = strip_tags($style);

    $forbiddenStuff = array(
        '-moz-binding',
        'expression',
        'javascript:',
        'behaviour:',
        'vbscript:',
        'mocha:',
        'livescript:',
    );

    $style = str_ireplace($forbiddenStuff, '', $style);

在db中存储$ style,并在用户配置文件上呈现。

请注意,此解决方案是从一个众所周知的软件复制而来,并且有一个很大的社区,所以我希望这应该是完美的。

答案 2 :(得分:-3)

O hai MySpace ......

只需让用户能够从Web表单中指定颜色和图像,并从中构建用户特定的样式表。允许用户完整地指定自己的CSS只会导致丑陋,丑陋的页面。请参阅:MySpace 1.0。