...
Um das Laden von Dateien aus dem Dateisystem des Applikationsservers zu unterbinden, kann die übermittelte URL serverseitig geprüft werden. Falls das Format der URL nicht der Erwartung entspricht, wird der Ladevorgang abgebrochen.
...
Codestelle
Eine angepasste Implementierung für die Klasse UrlDocumentDataProvider UrlRelativeDocumentDataProvider könnte folgendermaßen aussehen. Analog dazu könnte auch ein Fix für die Klasse UrlDocumentDataProvider aussehen:
Codeblock |
---|
.../** public* <pre> class UrlDocumentDataProvider* extendsCopyright SimpleDocumentDataProvider<UrlSource(c), UrlHandle>levigo {holding gmbh. * ... * This file protectedis Provider<InputStream,subject IOException>to get(finalthe Stringterms url)and {conditions defined in * return new Provider<InputStream, IOException>() { @Override public InputStream get() throws IOException { URL u = new URL(url); check(url); return u.openStream(); } }; } /** * Checks if the input is being abused by replacing the scheme. * * @param url the url to be checked * @throws RuntimeException if the input was poisoned */ protected void check(String urlfile 'LICENSE.txt', which is part of this source code package. * </pre> */ package com.levigo.jadice.web.demo.common.server; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.Objects; import com.levigo.jadice.web.demo.common.server.dataprovider.SimpleDocumentDataProvider; import com.levigo.jadice.web.demo.common.shared.service.sources.RemoteIDHandle; import com.levigo.jadice.web.demo.common.shared.service.sources.RemoteIDSource; import com.levigo.util.base.Provider; public class UrlRelativeDataProvider extends SimpleDocumentDataProvider<RemoteIDSource, RemoteIDHandle> { private final URL baseURL; public UrlRelativeDataProvider(URL baseURL) { Objects.requireNonNull(baseURL, "baseURL"); check(baseURL); this.baseURL = baseURL; } @Override public RemoteIDHandle createSourceHandle(RemoteIDSource source) { Patternreturn p = Pattern.compile("^\\w*:"); new RemoteIDHandle(source.getId()); } Matcher m@Override = p.matcher(url); public Provider<InputStream, IOException> getStream(final if (m.find())RemoteIDSource source) { return if (!(url.startsWith("http") || url.startsWith("https") || url.startsWith("ftp"))) { get(source.getId()); } @Override public throwProvider<InputStream, newIOException> RuntimeExceptiongetRecoveryStream("Inputforgery: A poisoned request was received: " + url); } } } } |
Eine angepasste Implementierung für die Klasse UrlRelativeDocumentDataProvider könnte folgendermaßen aussehen:
Codeblock |
---|
... public class UrlRelativeDataProvider extends SimpleDocumentDataProvider<RemoteIDSource, RemoteIDHandle> { ...RemoteIDHandle sourceHandle) { return get(sourceHandle.getId()); } protected Provider<InputStream, IOException> get(final String id) { return new Provider<InputStream, IOException>() { @Override public InputStream get() throws IOException { URL uurl; tryurl {= // Avoids poisioning the URI checkForInputPoisoning(id); u = baseURL.toURI().resolve(id).toURL(); new URL(baseURL + id); return uurl.openStream(); } catch (URISyntaxException e) { throw new IOException(e); } } }; } /** * Checks if the input is being abused by replacing the scheme. * * @param input the input poisoned * @throws RuntimeException if the input was poisoned */ private void checkForInputPoisoning(String input) throws RuntimeException { Pattern p = Pattern.compile("^\\w*:"protected void check(URL url) { final String protocol = url.getProtocol(); Matcher m = p.matcher(input); if (m.find(if (!(protocol.equals("http") || protocol.equals("https"))) throw new RuntimeException("Inputforgery: A poisoned request was received:An invalid protocol was specified: " + protocol + " - " + inputurl.toString()); } } |
Die beiden oben aufgeführten Fixes sind Der oben aufgeführte Fix ist ab jadice web toolkit Version 5.6.0.0 Teil der Distribution. Die Klasse UrlRelativeDocumentDataProvider wurde mit jadice web toolkit Version 5.6.0.0 aus der Distribution gelöscht.
Nach Stichwort filtern (Inhalt nach Stichwort) | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|