Wie behandeln parser Ausnahmen beim unmarshalling von JSON-Daten?

Bin ich mit dem Trikot in meiner Web-Anwendung. Die an den server gesendeten Daten im JSON format, welche wiederum unmarshallt am server-Ende und dem Objekt erhalten wird, ist in der Weiterverarbeitung. Das security-audit-hob einige Schwachstellen dieses Ansatzes.

Meine Ruhe-Code:

@POST
@Path("/registerManga")
@Produces(MediaType.APPLICATION_JSON)
public Response registerManga(MangaBean mBean){
    System.out.println(mBean);
    return Response.status(200).build();
}

MangaBean:

public class MangaBean {
    public String title;
    public String author;

    @Override
    public String toString() {
        return "MangaBean [title=" + title + ", author=" + author + "]";
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }


}

Werden die Daten in diesem format:

["title":"Bleach","author":"kubo tite"]

Den oben genannten Daten erfolgreich unmarshallt in ein Objekt und dies bekomme ich als Ausgabe:

MangaBean [title=Bleach, author=kubo tite]

Aber wenn die Daten geändert:

["title":"<script>alert("123");</script>","author":"kubo tite"]

Einen 500 internal server error Auftritt, und dem Benutzer angezeigt wird:

javax.servlet.ServletException: org.codehaus.jackson.JsonParseException: Unexpected character ('1' (code 49)): was expecting comma to separate OBJECT entries
 at [Source: org.apache.catalina.connector.CoyoteInputStream@19bd1ca; line: 1, column: 28]
    com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:420)
    com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
    com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

Das unerwartete auftreten von "" verursacht Fehler im parser. Als unmarshalling erfolgt hinter den kulissen, und ich habe keine Kontrolle über Sie, ich bin nicht in der Lage zu handhaben, die Ausnahme, die ausgelöst wird.

Meine Frage ist, wie kann ich diese Ausnahme verarbeiten und eine angemessene Reaktion auf den Benutzer, anstatt einen stacktrace. Bitte um Rat.

InformationsquelleAutor Mono Jamoon | 2013-02-13
Schreibe einen Kommentar