回答
一个解决方案是让你通过一些编辑器提供用户选项,允许他们选择各种元素的颜色/大小。然后根据用户提供的选项自行生成CSS。
这可以防止任何非标准的CSS,或者你不希望用来保存的CSS。
+1,正是我在想的:) – 2009-11-27 14:27:28
好的答案。不要忘记你仍然需要验证所有的输入!如果它是一种颜色,请确保它是3或6个十六进制数字,而不是'fff; font-size:500px' – DisgruntledGoat 2009-11-27 14:35:40
或者,如果将它嵌入到HTML页面中,#fff;}'。 – Boldewyn 2009-11-27 14:44:23
如果您的用户只能修改他们自己的CSS而不是其他用户,那么风险是什么? CSS只会送给他们,所以在最坏的情况下,他们可以自己破解,不是?
好吧,如果他的网站面向普通人群,而不仅仅是程序员/设计人员,那么非专家用户可能会从网络上下载一些免费的CSS模板,从而使机器处于风险之中。 – 2011-05-09 03:14:03
在别人的东西说,检查它们是否有效的CSS:http://jigsaw.w3.org/css-validator/
如果允许用户直接在网站上使用定制CSS,你所要求的黑客接管。你实际上使主题系统不太可用,因为只有知道CSS的人才能做到这一点。除非您的网站专门针对基于网络的程序员,否则最好制作一组用户可以选择的主题。
您还可以在您的网站上制作一组工具,允许用户通过用户界面而不是直接通过CSS更改页面上的特定样式。这将允许更多的用户更灵活地设置他们的页面风格,但通常需要花费更多的开发时间 - 除非您使用CMS,并且您的特定CMS允许在核心或插件中轻松实现此功能。
希望这会有所帮助。
我不太清楚,为什么它会成为饼干的邀请。如果您将CSS存储在数据库中(正确引用)并将其嵌入到HTML中(正确编码),*和*仅将其发送给上传的人,那么安全漏洞是什么? – Boldewyn 2009-11-27 14:43:13
首先,如果其他用户访问他们的页面,安全漏洞就会发挥作用。例如,MySpace上的钓鱼攻击要求输入一个人的密码,然后将他们的页面变成一个巨大的div,在点击后重定向到钓鱼页面。这个页面稍后变成了一个重定向,通过人们的myspace销售另一个页面。 其次,你会有人搞砸他们的网页(可能是一个div占据整个页面大小?),并希望你修复它。 但是,如果没有人看到他们的页面 - 出现错误的可能性很小。我是那种不会冒险的类型 – monokrome 2009-11-27 15:12:13
虽然我会去Zeus的答案,你可以使用CSS解析器(搜索SO,有各种问题)并检查所有输入与核准属性列表(color
,background
等)。
只有一件事,我可以想到:CSS表达式(但是,只在IE中计算)。这些允许CSS文件中的JavaScript,所以我会去除任何类似于
property: expression(...);
或者只是抛出“不允许”错误。但是,如果您将CSS提供给完全放置在首位的用户,那么他负责,如果他自己引入了XSS漏洞。
在任何其他情况下:使用Zeus的解决方案。
还有一个额外的漏洞,那就是为背景图片引用文件等等。我知道有人使用CSS技巧来绕过XHR的相同域限制,背景图像或其他。所以如果你要走这条路线,你可能会想排除任何CSS规则,比如“url()”。 我同意最好的解决方案是不要使它成为自由形式,让用户根据每个选择器/样式指定输入。这不是编码,但更安全。 – Bialecki 2009-11-27 15:20:06
- 1. AutoCompleteBox是邪恶的
- 2. 子查询是否是邪恶的?
- 3. 以上CSS是必要的邪恶?
- 4. Flurry User ID是否是邪恶的?
- 5. 许可证检查的电话之家被认为是邪恶的
- 6. Django包括 - 他们是邪恶的?
- 7. RJS是邪恶的,为什么?
- 8. 为什么JFormattedTextField是邪恶的?
- 9. 是否有具体的用户故事场景邪恶?
- 10. 什么时候(如果有的话)是eval不是邪恶的?
- 11. 邪恶的pdf css边界框?
- 12. 这不是验证用户
- 13. 如何检查用户ID是否验证或不图表api
- 14. 邪恶模式下的Smex
- 15. 检测Firebase用户身份验证提供程序
- 16. 检查用户是有效的Windows身份验证MVC3
- 17. 检查是否存在用户jQuery的验证,Ajax和codeigneter
- 18. 检查URL是通过身份验证的用户
- 19. 检查用户是否使用Cognito进行了身份验证
- 20. 检查用户是否使用Firebase验证android
- 21. 验证上传的.FLA不是恶意的
- 22. 为什么Class.newInstance()“邪恶”?
- 23. 检查用户是否在db中验证
- 24. 验证LDAP用户并检查它们是否属于组
- 25. 检查用户名是否存在与bvalidator(jQuery验证插件)
- 26. 心跳来检查用户是否通过身份验证?
- 27. 检查用户是否通过twitter api在twitter中验证
- 28. 检查Facebook用户是否已通过身份验证
- 29. Emacs的邪恶领袖和邪恶的书呆子,评议冲突
- 30. 为什么通过newCachedThreadPool创建的ExecutorService是邪恶的?
我不确定是否有任何CSS黑客(邪恶品种),我知道这不是你问的,但你有没有考虑创建一个选项页面,他们可以改变颜色等? – 2009-11-27 14:26:33
@ILMV在Internet Explorer中,CSS可以运行Javascript“表达式”。我不知道它有多邪恶,但比对不起更安全:) – 2009-11-27 14:57:47