使用Java清理CSS
Java中是否有一个好的库用于清理CSS样式表?我们希望允许管理员用户上传CSS样式表,以控制他们管理的网站部分的外观。当然,我们不希望允许诸如background:url(javascript:)之类的XSS攻击,因此我们正在寻找一个好的清理解决方案
到目前为止,我唯一喜欢的是使用Google Caja CssTree parser从CSS中排除危险的标记。我可能最终会使用类似的东西,但如果有人知道一个库,我不必为它删除太多依赖项并进行提取,那将是很有帮助的
解决方案:建议使用Vineet Reynolds等反艾米库
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);
# 1 楼答案
OWASP AntiSamy可以执行CSS样式表验证;不过,我还没有特别尝试过这个功能。另外,我不确定它是否符合你的要求,因为它是一个依赖性太多的项目。它在内部依赖apachebatik来执行样式表的解析
如果我有安全意识,我就不会被下游依赖所困扰;我会为这项任务选择合适的工具
# 2 楼答案
Java的内置StyleSheet和CSS类支持解析样式表并允许您与它们交互(删除某些属性、强制执行某些属性等)。我不确定它们是否完全是最新的,是否对每个可用的属性都进行了建模,但这是值得研究的(少了一个库!)
# 3 楼答案
您可能可以从Flying saucer project中使用^{}
您仍然需要迭代所有规则,并确定它们是否危险
# 4 楼答案
OWASP Top Ten代表了关于什么是最关键的web应用程序安全缺陷以及防范这些缺陷的最佳实践的广泛共识。它建议使用OWASP's ESAPI Project来构建针对XSS的防御。这个ESAPI项目创建了一个编码库,它有多种语言,包括Java、。NET、PHP、经典ASP、Cold Fusion、Python和Haskell。它具有针对您正在处理的上下文对不可信数据进行编码的工具:
它还有一个验证器,用于验证输入所属的上下文:
<一些>使用ESAPI的组织包括美国运通、Apache基金会、Booz Allen Hamilton、Advices安全、Foundstone(McAfee)、哈特福德、无限校园、洛克希德马丁、MITRE、美国海军- SPAWAR、世界银行、SANS研究所。p>boolean isValidURL = ESAPI.validator().isValidInput("URLContext", userURL, "URL", 255, false);
我还建议阅读他们的XSS Prevention Cheat Sheet,其中描述了针对XSS构建防御的最佳实践(基本上可以归结为,您必须对将不可信数据放入的HTML文档部分使用转义语法)