У меня есть требование предотвратить XSS. Я не знаю много о безопасности приложений, но я знаю, что вы можете использовать белые / черные списки и URL-кодирование / декодирование, чтобы предотвратить это. Я пытался реализовать белый список, но мне сказали, что все еще существует уязвимость XSS, потому что я не реализовал кодировку URL.
@GET
@Path("/somepath/{table}/file")
@Consumes("application/x-www-form-urlencoded")
@Produces({ "text/html" })
public Response getPage(@PathParam("table") String table, @QueryParam("file") String file) {
// test for invalid input
if (!MyUtil.isValidInput(table, file))
throw new IllegalArgumentException("Invalid table or file name");
Map<String, Object> model = new HashMap<>(); // to return data to front end
try {
useParameters(table, file);
model.put("tableName", table);
model.put("fileName", file);
} catch (Exception e) {
LOGGER.error("Error getting file page", e);
model.put("error", e.toString());
}
return new Viewable("/pathToJspFile", model);
}
В этом простом методе MyUtil.isValidInput () проверяет входные значения против белого списка персонажей. Если это хорошо, я продолжаю возвращать страницу jsp с этими значениями, в противном случае выдает ошибку.
Итак, я хочу знать, является ли это правильным способом реализации белого списка, если мне нужно (или должен) реализовать кодировку URL. И если мне нужно реализовать кодирование URL, где его нужно декодировать для использования?
Я тоже немного растерялся, потому что думал, что строка @Consumes ("application / x- www-form-urlencoded") автоматически кодирует URL. И Spring автоматически декодирует параметры формы для использования в соответствии с this