HTL имеет встроенную защиту XSS
.
Когда вы используете context = 'unsafe'
, он полностью отключает экранирование и защиту XSS.Когда защита XSS отключена, ваш сайт может стать уязвимым для межсайтовых скриптов.Это одна из причин, по которой HTL предпочтительнее традиционного JSP.
Сказав это, бывают случаи, когда ни один из других контекстов, предоставляемых HTL, не будет соответствовать вашим потребностям и использование контекста unsafe
быть последним средством.Отправленный вами фрагмент - один из таких примеров.Вы передаете аргументы (категории и режим) в java-класс (ClientLibUseObject.java), который инициализирует BINDINGS_CATEGORIES
и BINDINGS_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();
}
}
Список доступных контекстов отображения .
Подробнее о XSS и различных способах использования XSS для атак на сайты здесь