有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用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);

共 (4) 个答案

  1. # 1 楼答案

    OWASP AntiSamy可以执行CSS样式表验证;不过,我还没有特别尝试过这个功能。另外,我不确定它是否符合你的要求,因为它是一个依赖性太多的项目。它在内部依赖apachebatik来执行样式表的解析

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

  2. # 2 楼答案

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

  3. # 3 楼答案

    您可能可以从Flying saucer project中使用^{}

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

  4. # 4 楼答案

    OWASP Top Ten代表了关于什么是最关键的web应用程序安全缺陷以及防范这些缺陷的最佳实践的广泛共识。它建议使用OWASP's ESAPI Project来构建针对XSS的防御。这个ESAPI项目创建了一个编码库,它有多种语言,包括Java、。NET、PHP、经典ASP、Cold Fusion、Python和Haskell。它具有针对您正在处理的上下文对不可信数据进行编码的工具:

    encodeForHTML
    encodeForHTMLAttribute
    encodeForJavaScript
    encodeForCSS
    encodeForURL
    

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

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

    <一些>使用ESAPI的组织包括美国运通、Apache基金会、Booz Allen Hamilton、Advices安全、Foundstone(McAfee)、哈特福德、无限校园、洛克希德马丁、MITRE、美国海军- SPAWAR、世界银行、SANS研究所。p>

    我还建议阅读他们的XSS Prevention Cheat Sheet,其中描述了针对XSS构建防御的最佳实践(基本上可以归结为,您必须对将不可信数据放入的HTML文档部分使用转义语法)