使用Java清理CSS

时间:2011-06-13 16:28:54

标签: java css xss

Java中是否有用于清理CSS样式表的好库?我们希望允许管理员用户上传CSS样式表来控制他们管理的网站部分的外观。当然,我们不希望allox XSS攻击,例如background:url(javascript :),所以我们正在寻找一个很好的清理解决方案。

到目前为止,我发现我唯一喜欢使用Google Caja CssTree parser从CSS中排除危险标签。我可能最终会使用这样的东西,但是如果有人知道我不需要为了这么多的依赖关系,并提取,那将会有所帮助。

解决方案:使用像Vineet Reynolds建议的AntiSamy库

        Policy policy = Policy.getInstance("antisamy.xml");
        ResourceBundle messages = ResourceBundle.getBundle("AntiSamy", Locale.getDefault());

        CssScanner scanner = new CssScanner(policy, messages);
        CleanResults results = scanner.scanStyleSheet(stylesheet, Integer.MAX_VALUE);

4 个答案:

答案 0 :(得分:3)

OWASP AntiSamy可以执行CSS样式表验证;我没有特别尝试过这个功能。此外,我不确定它是否适合您作为一个具有太多依赖项的项目。它在内部依赖Apache Batik来执行样式表的解析。

如果我有安全意识,我不会被下游依赖所困扰;我会为这项任务选择合适的工具。

答案 1 :(得分:0)

Java的内置StyleSheetCSS类支持解析样式表并允许您与它们交互(删除某些属性,强制执行某些属性等)。我不确定它们是否完全是最新的并且为每个可用的属性建模,但这是值得研究的东西(少载一个库!)

答案 2 :(得分:0)

您可以使用CSSParser

中的Flying saucer project

您仍然需要迭代所有规则并确定它们是否有危险。

答案 3 :(得分:0)

OWASP Top Ten代表了对最关键的Web应用程序安全漏洞以及防御它们的最佳实践的广泛共识。它建议使用OWASP's ESAPI Project来构建针对XSS的防御。这个ESAPI项目创建了一个编码库,它有多种语言,包括Java,.NET,PHP,Classic ASP,Cold Fusion,Python和Haskell。它具有为您正在处理的上下文编码不受信任数据的工具:

encodeForHTML
encodeForHTMLAttribute
encodeForJavaScript
encodeForCSS
encodeForURL

它还有一个验证器,用于验证输入所属的上下文:

boolean isValidURL = ESAPI.validator().isValidInput("URLContext", userURL, "URL", 255, false);

一些使用ESAPI的组织包括American Express,Apache Foundation,Booz Allen Hamilton,Aspect Security,Foundstone(迈克菲),哈特福德,无限校园,洛克希德马丁,MITER,美国海军 - SPAWAR,世界银行,SANS研究所。 / p>

我还建议给他们的XSS Prevention Cheat Sheet一个阅读,其中描述了构建防御XSS的最佳实践(它实质上归结为你必须使用转义语法来放置你正在放置的HTML文档部分不可信的数据。)。