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
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.
}
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.