2009-11-27 49 views
2

我想让我的webapp用户通过文本字段保存自定义CSS来修改其GUI的外观。检查/验证用户提供的CSS是不是邪恶

我想有一些邪恶的CSS黑客在那里。我应该关心什么?

+2

我不确定是否有任何CSS黑客(邪恶品种),我知道这不是你问的,但你有没有考虑创建一个选项页面,他们可以改变颜色等? – 2009-11-27 14:26:33

+1

@ILMV在Internet Explorer中,CSS可以运行Javascript“表达式”。我不知道它有多邪恶,但比对不起更安全:) – 2009-11-27 14:57:47

回答

7

一个解决方案是让你通过一些编辑器提供用户选项,允许他们选择各种元素的颜色/大小。然后根据用户提供的选项自行生成CSS。

这可以防止任何非标准的CSS,或者你不希望用来保存的CSS。

+0

+1,正是我在想的:) – 2009-11-27 14:27:28

+1

好的答案。不要忘记你仍然需要验证所有的输入!如果它是一种颜色,请确保它是3或6个十六进制数字,而不是'fff; font-size:500px' – DisgruntledGoat 2009-11-27 14:35:40

+0

或者,如果将它嵌入到HTML页面中,#fff;}'。 – Boldewyn 2009-11-27 14:44:23

0

如果您的用户只能修改他们自己的CSS而不是其他用户,那么风险是什么? CSS只会送给他们,所以在最坏的情况下,他们可以自己破解,不是?

+0

好吧,如果他的网站面向普通人群,而不仅仅是程序员/设计人员,那么非专家用户可能会从网络上下载一些免费的CSS模板,从而使机器处于风险之中。 – 2011-05-09 03:14:03

2

如果允许用户直接在网站上使用定制CSS,你所要求的黑客接管。你实际上使主题系统不太可用,因为只有知道CSS的人才能做到这一点。除非您的网站专门针对基于网络的程序员,否则最好制作一组用户可以选择的主题。

您还可以在您的网站上制作一组工具,允许用户通过用户界面而不是直接通过CSS更改页面上的特定样式。这将允许更多的用户更灵活地设置他们的页面风格,但通常需要花费更多的开发时间 - 除非您使用CMS,并且您的特定CMS允许在核心或插件中轻松实现此功能。

希望这会有所帮助。

+0

我不太清楚,为什么它会成为饼干的邀请。如果您将CSS存储在数据库中(正确引用)并将其嵌入到HTML中(正确编码),*和*仅将其发送给上传的人,那么安全漏洞是什么? – Boldewyn 2009-11-27 14:43:13

+0

首先,如果其他用户访问他们的页面,安全漏洞就会发挥作用。例如,MySpace上的钓鱼攻击要求输入一个人的密码,然后将他们的页面变成一个巨大的div,在点击后重定向到钓鱼页面。这个页面稍后变成了一个重定向,通过人们的myspace销售另一个页面。 其次,你会有人搞砸他们的网页(可能是一个div占据整个页面大小?),并希望你修复它。 但是,如果没有人看到他们的页面 - 出现错误的可能性很小。我是那种不会冒险的类型 – monokrome 2009-11-27 15:12:13

1

虽然我会去Zeus的答案,你可以使用CSS解析器(搜索SO,有各种问题)并检查所有输入与核准属性列表(color,background等)。

3

只有一件事,我可以想到:CSS表达式(但是,只在IE中计算)。这些允许CSS文件中的JavaScript,所以我会去除任何类似于

property: expression(...); 

或者只是抛出“不允许”错误。但是,如果您将CSS提供给完全放置在首位的用户,那么他负责,如果他自己引入了XSS漏洞。

在任何其他情况下:使用Zeus的解决方案。

+0

还有一个额外的漏洞,那就是为背景图片引用文件等等。我知道有人使用CSS技巧来绕过XHR的相同域限制,背景图像或其他。所以如果你要走这条路线,你可能会想排除任何CSS规则,比如“url()”。 我同意最好的解决方案是不要使它成为自由形式,让用户根据每个选择器/样式指定输入。这不是编码,但更安全。 – Bialecki 2009-11-27 15:20:06