【问题标题】:Cross site scripting protection turned off跨站点脚本保护已关闭
【发布时间】:2018-10-22 19:55:59
【问题描述】:

我在演示 We.Retail AEM 项目中遇到了这个 sn-p 代码:

<template 
  data-sly-template.include="${@ categories='Client Library categories', mode='optional: JS or CSS, case-insensitve'}"
  data-sly-use.clientlib="${'libs.granite.sightly.templates.ClientLibUseObject' @ categories=categories, mode=mode}">
    ${clientlib.include @ context='unsafe'}
</template>

谁能帮我理解在这种情况下关闭 XSS 保护的目的是什么?

提前致谢!

【问题讨论】:

    标签: jsp aem htl


    【解决方案1】:

    HTL 内置了XSS 保护。

    当您使用context = 'unsafe' 时,它会完全禁用转义和 XSS 保护。一旦禁用“XSS”保护,您的站点可能容易受到跨站点脚本的攻击。 这也是 HTL 优于传统 JSP 的原因之一。


    话虽如此,有时 HTL 提供的其他上下文都不适合您的需求,因此使用 unsafe 上下文将是最后的手段。您发布的 sn-p 就是这样一个示例。 您将参数(类别和模式)传递给 java 类 (ClientLibUseObject.java),该类初始化 BINDINGS_CATEGORIESBINDINGS_MODE,然后调用 include 方法,将这些参数写入 com.adobe.granite.ui.clientlibs.HtmlLibraryManager 对象。

    HtmlLibraryManager 提供包含存储在存储库中的 js/css 文件并解析类别和依赖项的方法。在可用的上下文列表中,没有任何内容可以满足此用例,因此他们使用了unsafe

    public class ClientLibUseObject implements Use {
    
        private static final String BINDINGS_CATEGORIES = "categories";
        private static final String BINDINGS_MODE = "mode";
    
        private HtmlLibraryManager htmlLibraryManager = null;
        private String[] categories;
        private String mode;
        private SlingHttpServletRequest request;
        private PrintWriter out;
        private Logger log;
    
        public void init(Bindings bindings) {
            Object categoriesObject = bindings.get(BINDINGS_CATEGORIES);
            log = (Logger) bindings.get(SlingBindings.LOG);
            if (categoriesObject != null) {
                if (categoriesObject instanceof Object[]) {
                    Object[] categoriesArray = (Object[]) categoriesObject;
                    categories = new String[categoriesArray.length];
                    int i = 0;
                    for (Object o : categoriesArray) {
                        if (o instanceof String) {
                            categories[i++] = ((String) o).trim();
                        }
                    }
                } else if (categoriesObject instanceof String) {
                    categories = ((String) categoriesObject).split(",");
                    int i = 0;
                    for (String c : categories) {
                        categories[i++] = c.trim();
                    }
                }
                if (categories != null && categories.length > 0) {
                    mode = (String) bindings.get(BINDINGS_MODE);
                    request = (SlingHttpServletRequest) bindings.get(SlingBindings.REQUEST);
                    SlingScriptHelper sling = (SlingScriptHelper) bindings.get(SlingBindings.SLING);
                    htmlLibraryManager = sling.getService(HtmlLibraryManager.class);
                }
            }
        }
    
        public String include() {
            StringWriter sw = new StringWriter();
            try {
                if (categories == null || categories.length == 0)  {
                    log.error("'categories' option might be missing from the invocation of the /libs/granite/sightly/templates/clientlib.html" +
                            "client libraries template library. Please provide a CSV list or an array of categories to include.");
                } else {
                    PrintWriter out = new PrintWriter(sw);
                    if ("js".equalsIgnoreCase(mode)) {
                        htmlLibraryManager.writeJsInclude(request, out, categories);
                    } else if ("css".equalsIgnoreCase(mode)) {
                        htmlLibraryManager.writeCssInclude(request, out, categories);
                    } else {
                        htmlLibraryManager.writeIncludes(request, out, categories);
                    }
                }
            } catch (IOException e) {
                log.error("Failed to include client libraries {}", categories);
            }
            return sw.toString();
        }
    }
    

    可用display contexts列表。

    更多关于XSS and different ways XSS can be used to attack sites here

    【讨论】:

    • 非常感谢您的帮助!
    • 你知道为什么要关闭 XSS 吗?我发现演示代码中的这个实例很奇怪。
    • 惊人的!感谢您在回答我的问题时超越自我!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 2014-10-15
    相关资源
    最近更新 更多