Skip to content

digipost/digipost-html-validator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Maven Central License

digipost-html-validator

Validering og sanitering av html sendt inn til digipost.

DigipostValidatingHtmlSanitizer vil sanitere html-dokumentet ditt. Vi anbefaler at du sjekker ditt dokument mot denne vaskingen og justerer ditt dokument til det er minimalt med forskjell (diff).

Digipost vil i alle tilfeller utføre samme sjekk og vask ved innsending og eventuelle videresendinger brevmottagere skulle ville gjøre.

Noen av kravene til html:

  • Ingen javascript.
  • Ingen eksterne avhengigheter som skal lastes ned (bilder, css, font-er etc.). Alt må inlines.
  • Lovlige html-tags og css-atributter er definert gjennom ApiHtmlValidatorPolicy (whitelist).

Se: ApiHtmlValidatorPolicy.java StyleElementPreprocessor.java

Eksempel

DigipostValidatingHtmlSanitizer.sanitize er en BiFunction som tar inn ditt html-dokument som string sammen med en PolicyFactory og returnerer den vaskede html-en.

Vi har en PolicyFactory-implementasjon i Digipost

  • PolicyFactoryProvider.API_HTML
String inputHtml = [...] // Ditt html-dokument

String sanitizedHtml = DigipostValidatingHtmlSanitizer.sanitize(
    inputHtml
    , PolicyFactoryProvider.API_HTML
);

Hvis din html har feil i html vil funksjonen kaste HTMLValidationException. Og CSSValidationException hvis det er feil i css. Begge exception-typene arver fra ValidationException som er en RuntimeException og har metoden getValidationErrors for å hente ut feilene i dokumentet. Se DigipostValidatingHtmlSanitizerTest for basic eksempel.

Det går også an bruke en instans av HtmlValidator.java:

HtmlValidationResult validationResult = new HtmlValidator().valider("<html></html>".getBytes());

if(validationResult.okForWeb){
    //Cool! Det kan sendes inn
} else {
    System.err.println(validationResult.toString()); // vil skrive ut meldingene fra exception
}

if(validationResult.hasDiffAfterSanitizing){ // Din html er endret på og er fremdele ok å sende inn.
    System.out.println(validationResult.toString()); // vil skrive ut den nye html-en som du så kan bruke til å endre din html.
}

Hvorfor vasker vi HTML-kode som blir sendt til Digipost

Generelt endrer vi ikke på innhold som blir sendt gjennom Digipost. Men HTML-validering er vanskelig. Å sørge for at HTML er vasket er mye enklere (se https://github.com/OWASP/java-html-sanitizer/blob/master/docs/html-validation.md.