Как восстановить XSS при записи потока файлов в выходной поток?

#java #xss #esapi

Вопрос:

Veracode сообщает, что мое приложение подвергается риску XXS при записи потока файлов в выходной поток. Я пытаюсь использовать ESAPI для решения этой проблемы, но по-прежнему сообщается о той же проблеме. Что я должен для этого сделать?

 public static int copyStream(InputStream in, OutputStream out, int buffer)
        throws IOException {
    
    byte buf[] = new byte[buffer];
    int len;
    int ttl = 0;
    while ((len = in.read(buf)) != -1) {
        try {
            buf = ESAPI.validator().getValidFileContent(IOUtil.class.getName(), buf, 50000000, false);
            out.write(buf, 0, len);
            ttl  = len;
        } catch (IntrusionException e) {
            e.printStackTrace();
        } catch (ValidationException e) {
            e.printStackTrace();
        }
    }
    out.flush();
    in.close();
    out.close();
    return ttl;
}
 

Ответ №1:

Если этот валидатор совпадает с валидатором по умолчанию, то он проверяет только размер файла. Но он проверяет размер буфера, а не файла, так что, вероятно, ничего не сделает.

При отправке файла в браузер, если тип содержимого не является типом html, то никаких проблем с XSS не возникнет. Если вы установите для типа содержимого application/octet-stream значение, он будет загружен без каких-либо действий.