7

在我的网站上,我想包含一个文本框,允许成员在他们的个人资料中更改他们想要的任何内容。并破坏了一切或访问了他们不应该访问的东西。

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

本质上,我只想让 PHP 调用任何自定义 css 并将其插入用户配置文件的脚本标记之间。我想允许尽可能多的 CSS。这是最好的方法吗?我不知道如何组成一个系统来生成安全文件,也没有耐心用选项组成整个部分(特别是因为我想给成员更多的个人资料自由度)。

任何建议都值得赞赏,如果有人知道一些已经这样做的脚本,那也会摇滚并帮助我弄清楚该怎么做:D。

4

3 回答 3

6

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

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

需要担心的主要问题是

  • 可用性。如果用户犯了一个错误,不小心隐藏了 Body 元素怎么办。他们将如何重置它?
  • SQL注入。无论您做什么或不允许做什么,请始终确保您的输入是经过消毒的。
  • PHP 注入。不要执行(评估)用户内容。曾经。
  • 隐藏用户信息。将代码添加到 customcss.php url 以防止其他用户猜测用户 id,从而深入了解其他用户的自定义。

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

于 2012-12-14T10:42:34.950 回答
3

我想这应该足够了

$style = $_POST['style'];

$style = strip_tags($style);

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

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

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

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

于 2012-12-14T10:41:41.703 回答
-3

哦,我的空间…</p>

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

于 2012-12-14T11:27:50.870 回答