JSON Исправление инъекции фортификации в java - PullRequest
5 голосов
/ 19 июня 2020

Я использую приведенный ниже код для очистки JSON, но все же я получаю инъекцию JSON при сканировании из Fortify, не могли бы вы помочь мне, в чем проблема, или это не проблема, возможно, подавите. Я тоже искал тот же вопрос, но это не решает мою проблему. Моя проблема в том, что я дезинфицирую свой JSON перед преобразованием его в java объект, но все же получаю JSON ошибку инъекции в fortify

public String handleEventMessage(String jsonRequest) {
    MonerisPaymentDetailsObject paymentObject = null;
        if(null!=jsonRequest && jsonRequest.length()>0){
            try{
                paymentObject = mapper.readValue(JsonSanitizer.sanitize(jsonRequest), MonerisPaymentDetailsObject.class);
            }catch(Exception ex){
                logger.error("Error occured while converting MonerisPaymentDetailsObject json to Object :" , ex);
          }
            
      return "abc";
   } 

Fortify, давая ниже описание этой ошибки

 1. Data enters a program from an untrusted source.
    
    In this case the data enters at readLine() in EPWFPaymentServicesServlet.java at line 49.
    
    
    2. The data is written to a JSON stream.
    
    In this case the JSON is written by readValue() in EPWFMonerisPaymentsServiceHandler.java at line 46.

EPWFPaymentServicesServlet. java код, в который вводятся данные

 @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        CodeTimer timer = new CodeTimer("EPWFPaymentServicesServlet.doPost()", true);
       
        response.setContentType("text/xml");

        BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
        StringBuffer requestBuffer = new StringBuffer(request.getContentLength());
        String line = null;
        while ((line = reader.readLine()) != null) {
            requestBuffer.append(line).append('\n');
        }
        
        // read the POST request contents
        String requestString = requestBuffer.toString();
        if (logger.isDebugEnabled()) {
            logger.debug("EPWF Payment Service POST Request: \n" + ((requestString == null) ? "Null" : requestString.substring(0, 9)));
         }   
        
        PaymentServiceHandlerComposit paySvcHandler = new PaymentServiceHandlerComposit();
        String responseString =paySvcHandler.handleEventMessage(requestString);//line no 49 where fortify is giving description for class where i am sanitizing  the data
        
        if (logger.isDebugEnabled()) {
            logger.debug("EPWF Payment Service POST Response: \n" + ((responseString == null) ? "Null" : requestString));
         }   
        response.getOutputStream().print(responseString);
        timer.stopAndLogTiming("");
    }

1 Ответ

0 голосов
/ 30 июня 2020

Учитывая, что вы используете новую обновленную версию jackson , не должно быть необходимости в предварительной дезинфекции или изменении ваших данных перед передачей их Джексону.

Джексон будет принимать и анализировать только действительные JSON, поскольку обнаруживаются новые эксплойты и уязвимости, сопровождающие Джексона исправляют и выпускают новые версии. и лучшее, что вы можете сделать, - это следить за этими версиями.

Если вышеуказанные условия выполнены, вы можете безопасно подавить эту ошибку из fortify, вероятность того, что есть ошибка в вашем пользовательском дезинфицирующем средстве, намного выше, чем вероятность того, что он будет в Джексоне

...