Scannen von Dateianlagen in adaptiven Forms mit einem benutzerdefinierten Validator

Virenscanner/Validator-Pipeline für Dateianhänge: Eine Datei wird angehängt, Ihr FileAttachmentValidator wird ausgeführt und die Übermittlung wird entweder akzeptiert oder abgelehnt

[AEM Forms]{class="badge positive" title="Gilt für AEM Forms"}

Die Funktion „File Attachment Virus Scanner / Validator“ ist im Early-Adopter-Programm enthalten. Sie können von Ihrer offiziellen E-Mail-Adresse aus an aem-forms-ea@adobe.com schreiben, um dem Early-Adopter-Programm beizutreten und den Zugriff auf diese Funktion zu beantragen.

Adaptive Forms kann jede hochgeladene Anlage zum Zeitpunkt der Übermittlung an einen Validator Ihrer Wahl übergeben. Der Validator wird auf dem Server ausgeführt, empfängt die Datei im Speicher und entscheidet, ob die Übermittlung akzeptiert oder abgelehnt wird, sodass eine bösartige oder nicht konforme Datei nie persistent gespeichert wird. Da Sie den Validator bereitstellen, können Sie jede Antiviren-Engine, jeden Malware-Scanner oder jede benutzerdefinierte Validierungslogik verbinden, die Sie bereits verwenden.

Dieser Artikel erläutert die Funktion, dokumentiert die FileAttachmentValidator, die Sie implementieren, und führt Sie durch den Aufbau eines Antiviren-agnostischen Validators. Ein vollständiges, Engine-spezifisches Beispiel finden Sie im begleitenden Tutorial Scannen von Dateianlagen mit ClamAV.

Funktionsweise how-it-works

Wenn ein(e) Benutzende® ein adaptives Formular sendet, für das ein Validator ausgewählt wurde, ruft AEM den Validator für den hochgeladenen Anhang auf, bevor die Übermittlung verarbeitet wird:

  1. Der/die Benutzende hängt eine Datei an und wählt Senden.
  2. Auf dem Server ruft AEM die validateFileAttachment des Validators auf und übergibt die Anlage (einschließlich ihrer Rohbytes) als FileAttachmentWrapper.
  3. Ihr Validator überprüft die Datei, indem er eine Antiviren-Engine aufruft, Validierungsregeln anwendet oder beides, und gibt dann einen FileAttachmentValidationResult zurück.
  4. Wenn das Ergebnis gültig ist, wird die Übermittlung fortgesetzt. Wenn es ungültig ist, blockiert AEM die Übermittlung, zeigt dem Benutzer die Nachricht aus dem Ergebnis an und markiert das Anlagenfeld.

Zwei Eigenschaften dieses Modells sind für die Sicherheit von Bedeutung:

  • Server-seitig. Die Prüfung wird auf dem Server ausgeführt und kann daher im Browser nicht umgangen werden.
  • Vor dem Beibehalten scannen. Die Datei wird aus dem Speicher ausgewertet, bevor sie gespeichert wird, sodass eine zurückgewiesene Datei nie in das Repository geschrieben wird.

Verfügbarkeit und Voraussetzungen prerequisites

  • Ein adaptives Formular, das auf Kernkomponenten basiert.
  • Ein Maven-Projekt, das zum Erstellen und Bereitstellen eines AEM-Bundles eingerichtet ist.
  • Eine Kompilierungszeitabhängigkeit, die die com.adobe.forms.common.service Schnittstellen (FileAttachmentValidator, FileAttachmentWrapper, FileAttachmentValidationResult, FileAttachmentValidatorManager) bereitstellt: com.adobe.forms.foundation:adobe-xfaforms-common, die im AEM Forms-Add-on SDK gebündelt sind. Unter Schritt 3 des ClamAV-Tutorials finden Sie Informationen dazu, wo Sie sie erhalten und wie sie lokal installiert wird.
  • Ein Container für adaptive Formulare Proxy-Komponente in Ihrem Projekt (das Standardmuster für die Erweiterung von Kernkomponenten), sodass Sie irgendwo das Feld für die Registerkarte „Übermittlung“ hinzufügen können, das unter Hinzufügen des Validierungsfelds zum Formulardialogfeld beschrieben ist. Dies gilt nur für Formulare, die auf Kernkomponenten basieren.
NOTE
Das Feld File Attachment Virus Scanner / Validator ist nicht vorkonfiguriert. Sie fügen sie selbst mit einer kleinen Dialogfelderweiterung in der Komponente Container für adaptive Formulare Ihres Projekts hinzu. Dies ist ein einmaliger Schritt pro Projekt (nicht pro Validator). Siehe Hinzufügen des Validierungsfelds zum Dialogfeld „Formular“.

Die FileAttachmentValidator-Schnittstelle interface-reference

Sie können einen Validator hinzufügen, indem Sie com.adobe.forms.common.service.FileAttachmentValidator implementieren und als OSGi-Dienst registrieren. Die Schnittstelle definiert zwei Methoden.

FileAnhangValidator fileattachmentvalidator

Methode
Rückgabe
Beschreibung
validateFileAttachment(FileAttachmentWrapper fileAttachmentWrapper)
FileAttachmentValidationResult
Wird vom Framework für eine hochgeladene Anlage aufgerufen. Überprüfen Sie den Anhang und geben Sie ein Ergebnis zurück, das angibt, ob er akzeptiert wird.
getFileAttachmentValidatorName()
String
Gibt den Namen zurück, der diesen Validator identifiziert. Mit diesem Namen wird der Validator in einem Formular ausgewählt.

FileAttachmentWrapper fileattachmentwrapper

Der -Wrapper gewährt dem Code Zugriff auf die hochgeladene Datei und deren Metadaten. Die in einem typischen Validator verwendeten Accessoren sind:

Methode
Rückgabe
Beschreibung
getFileNameV2()
String
Der Name der hochgeladenen Datei, z. B. invoice.pdf.
getContentType()
String
Der für die Datei gemeldete MIME-Typ, z. B. application/pdf.
getValue()
byte[]
Der rohe Inhalt der Datei, gespeichert im Speicher. Das geben Sie an Ihre Scan Engine weiter.
NOTE
In der folgenden Tabelle sind die in einem Validator häufig verwendeten Accessoren aufgeführt. Die SDK-Version, für die Sie erstellen, kann zusätzliche Methoden für FileAttachmentWrapper verfügbar machen. Überprüfen Sie die -Schnittstelle in Ihrer Abhängigkeit für den vollständigen Satz.

FileAttachmentValidationResult fileattachmentvalidationresult

Ihr Validator gibt eine FileAttachmentValidationResult zurück, die dem Framework mitteilt, ob der Anhang akzeptiert werden soll. Erstellen Sie sie mit den folgenden Parametern:

Parameter
Typ
Beschreibung
isValid
boolean
true den Anhang anzunehmen, false ihn abzulehnen und die Übermittlung zu blockieren.
message
String
Eine für Menschen lesbare Nachricht. Bei Ablehnung erklärt dies, warum die Akte nicht angenommen wurde.
fileAttachmentWrapper
FileAttachmentWrapper
Der validierte Wrapper.

Beispiel: new FileAttachmentValidationResult(false, "The attached file failed the security scan.", wrapper).

NOTE
Wenn Sie ein FileAttachmentValidationResult zurücklesen müssen (z. B. in einem Test oder in Code, der einen Validator direkt aufruft), verwenden Sie isFileAttachmentValid() und getResponseString()/setResponseString(). Die Klasse stellt keine isValid() oder getMessage() Methoden bereit. Diese Namen beschreiben die obigen Konstruktorparameter, nicht die Getter.

FileAttachmentValidatorManager fileattachmentvalidatormanager

AEM registriert einen einzelnen FileAttachmentValidatorManager-Service, der sich zwischen dem Framework und jedem von Ihnen bereitgestellten Validator befindet. Normalerweise müssen Sie es nicht selbst aufrufen: AEM verwendet es, um den für ein Formular ausgewählten Validator zu suchen und aufzurufen. Es ist nützlich, zu wissen, wann eine Fehlerbehebung erfolgt, da beides vom Dropdown-Menü der Registerkarte „Übermittlung“ und der Pipeline für die Kernübermittlung durchlaufen wird.

Methode
Rückgabe
Beschreibung
getValidators()
List<FileAttachmentValidator>
Alle derzeit registrierten FileAttachmentValidator OSGi-Dienste.
getFileAttachmentValidator(String name)
FileAttachmentValidator
Der Validator, dessen getFileAttachmentValidatorName() mit name übereinstimmt oder ausgibt, wenn keine übereinstimmt.
validateFileAttachment(String name, List<FileAttachmentWrapper> attachments)
List<FileAttachmentValidationResult>
Führt den benannten Validator für mehrere Anlagen gleichzeitig aus. Wird intern verwendet, wenn eine Übermittlung mehr als eine Datei enthält.

Registrieren des OSGi-Dienstes register-service

Kommentieren Sie die Implementierung, damit sie unter der FileAttachmentValidator registriert wird. Nach der Bereitstellung kann der Validator auf den Formularen ausgewählt werden.

NOTE
In diesem Artikel werden die modernen OSGi Declarative Services-Anmerkungen (org.osgi.service.component.annotations) verwendet. Ältere Beispiele, die Sie anderswo finden, verwenden möglicherweise die Apache Felix SCR-Anmerkungen (org.apache.felix.scr.annotations). Diese sind veraltet und sollten nicht für neue Validatoren verwendet werden.

Erstellen eines Antiviren-agnostischen Validators build-validator

Die folgende Implementierung zeigt die Struktur eines Validators, ohne ihn an eine bestimmte Engine zu binden. Ersetzen Sie die scanWithYourEngine Methode durch einen Aufruf an Ihre Antiviren-, Scan-API oder Ihren Validierungs-Service.

package com.example.forms.security;

import com.adobe.forms.common.service.FileAttachmentValidator;
import com.adobe.forms.common.service.FileAttachmentValidationResult;
import com.adobe.forms.common.service.FileAttachmentWrapper;
import org.osgi.service.component.annotations.Component;

@Component(service = FileAttachmentValidator.class)
public class CustomFileAttachmentValidator implements FileAttachmentValidator {

    private static final String VALIDATOR_NAME = "Custom Antivirus Scanner";

    @Override
    public FileAttachmentValidationResult validateFileAttachment(FileAttachmentWrapper wrapper) {

        if (wrapper == null) {
            return new FileAttachmentValidationResult(false, "No attachment was received.", wrapper);
        }

        byte[] content = wrapper.getValue();
        if (content == null || content.length == 0) {
            return new FileAttachmentValidationResult(false, "The attached file is empty.", wrapper);
        }

        try {
            boolean clean = scanWithYourEngine(content);
            if (clean) {
                return new FileAttachmentValidationResult(true, "File passed the security scan.", wrapper);
            }
            return new FileAttachmentValidationResult(false,
                    "The attached file failed the security scan and was rejected.", wrapper);

        } catch (Exception e) {
            // Fail closed: if the scanner cannot be reached, reject rather than let an
            // unscanned file through. See Best practices for the fail-open alternative.
            return new FileAttachmentValidationResult(false,
                    "The file could not be scanned at this time. Please try again later.", wrapper);
        }
    }

    @Override
    public String getFileAttachmentValidatorName() {
        return VALIDATOR_NAME;
    }

    /**
     * Integrate your antivirus or validation engine here.
     * Return true if the file is safe to accept, false if it should be rejected.
     */
    private boolean scanWithYourEngine(byte[] content) {
        // TODO: call a local scanning daemon (for example over a socket)
        // or a remote scanning API, and interpret its verdict.
        return true;
    }
}

Bundle erstellen und bereitstellen build-deploy

Kompilieren Sie Ihr Projekt und installieren Sie das Bundle, damit der Validator auf der AEM-Instanz registriert ist.

Bereitstellung in einer lokalen Instanz während der Entwicklung. Erstellen Sie im Projektstammverzeichnis das Bundle und installieren Sie es in der laufenden Autoreninstanz:

mvn clean install -PautoInstallBundle

Das autoInstallBundle überträgt das kompilierte Bundle an eine lokale AEM-Instanz (standardmäßig http://localhost:4502). Wenn Ihre Instanz auf einem anderen Host, Port oder mit anderen Anmeldeinformationen ausgeführt wird, übergeben Sie diese an den Build, z. B.:

mvn clean install -PautoInstallBundle -Daem.host=localhost -Daem.port=4502 -Dvault.user=admin -Dvault.password=admin

Bereitstellung in höheren Umgebungen. Installieren Sie für die Staging- und Produktionsumgebung das Paket nicht von Hand. Stellen Sie sie als Teil des all Inhaltspakets Ihres Projekts über Ihre CI/CD-Pipeline bereit. Eine vollständige Anleitung finden Sie unter Bereitstellen in AEM as a Cloud Service.

Bestätigen Sie, dass der Dienst registriert ist. Öffnen Sie die Komponentenkonsole und suchen Sie nach der Validator-Klasse:

http://localhost:4502/system/console/components

Die Komponente sollte mit ihrem Status als aktiv (oder zufrieden) aufgelistet und unter dem FileAttachmentValidator-Service registriert werden. Wenn er nicht zufrieden ist, lesen Sie Überprüfen Sie, ob der Validator geladen und ausgeführt wird.

Komponentenkonsole mit einem benutzerdefinierten Validator und seinem Datenquellen-Servlet als aktiv

Hinzufügen des Validierungsfelds zum Dialogfeld „Formular“ add-dialog-field

Dieser Abschnitt gilt für adaptive Forms, die auf Kernkomponenten“. Das Feld Dateianhang-Virenscanner/) ist im vorkonfigurierten Dialogfeld Container für adaptive Formulare nicht vorhanden. Sie fügen sie einmal in Ihrem eigenen Projekt als kleine Erweiterung hinzu. Jeder Validator, den Sie anschließend bereitstellen (siehe Erstellen eines Antiviren-agnostischen Validators), wird dann automatisch als Option angezeigt. Sie wiederholen diesen Schritt nicht pro Validator.

Der Container für das adaptive Formular Ihres Projekts ist eine Proxy-Komponente eine Komponente unter /apps, die auf die echte Kernkomponente zeigt, indem sling:resourceSuperType verwendet wird, z. B.:

<!-- /apps/<project>/components/adaptiveForm/formcontainer/.content.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:jcr="http://www.jcp.org/jcr/1.0"
    jcr:primaryType="cq:Component"
    jcr:title="Form Container"
    sling:resourceSuperType="core/fd/components/form/container/v2/container"
    xmlns:sling="http://sling.apache.org/jcr/sling/1.0"/>

Aus sling:resourceSuperType Grund können Sie der Registerkarte Übermittlungseinstellungen“ ein neues Feld hinzufügen, ohne das gesamte Dialogfeld zu kopieren. Der Sling Resource Merger benötigt nur den Knotennamenpfad, der bis zur Einfügemarke neu erstellt wird. Siehe Erweitern von Komponentendialogfeldern für den allgemeinen Mechanismus. Die echte Registerkarte OOTB-Übermittlung behält ihre Felder unter content/items/tabs/items/submitActions/items/columns/items/, das ist der Weg zur Spiegelung:

<!-- /apps/<project>/components/adaptiveForm/formcontainer/_cq_dialog/.content.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:sling="http://sling.apache.org/jcr/sling/1.0"
    jcr:primaryType="nt:unstructured">
  <content jcr:primaryType="nt:unstructured">
    <items jcr:primaryType="nt:unstructured">
      <tabs jcr:primaryType="nt:unstructured">
        <items jcr:primaryType="nt:unstructured">
          <submitActions jcr:primaryType="nt:unstructured">
            <items jcr:primaryType="nt:unstructured">
              <columns jcr:primaryType="nt:unstructured">
                <items jcr:primaryType="nt:unstructured">
                  <fileAttachmentValidator
                      jcr:primaryType="nt:unstructured"
                      sling:resourceType="granite/ui/components/coral/foundation/form/select"
                      fieldLabel="File Attachment Virus Scanner/Validator"
                      fieldDescription="Select a registered validator configuration to scan submitted file attachments. Select None to disable validation for this form."
                      emptyText="None"
                      name="./fileAttachmentValidator">
                    <datasource
                        jcr:primaryType="nt:unstructured"
                        sling:resourceType="<project>/datasources/fileattachmentvalidators"/>
                  </fileAttachmentValidator>
                </items>
              </columns>
            </items>
          </submitActions>
        </items>
      </tabs>
    </items>
  </content>
</jcr:root>

Zwei Details sind erwähnenswert:

  • emptyText="None" wird dem Feld ein nicht ausgewählter Standardstatus zugewiesen, sodass auf ein Formular ohne Auswahl einfach ein Validator angewendet wird. Sie müssen keinen gefälschten Eintrag „Keine“ zur unten stehenden Datenquelle hinzufügen.
  • Es werden mehrere Konfigurationen erwartet. Sie können mehr als einen Validator registrieren, z. B. einen pro Antiviren-Engine, oder mehrere unterschiedlich konfigurierte Instanzen derselben Engine. Jedes registrierte FileAttachmentValidator verfügt über eine eigene getFileAttachmentValidatorName(), sodass jedes automatisch als separate Option angezeigt wird. An diesem Dialogfeldfragment ändert sich nichts, je nachdem, wie viele Sie sich registrieren.

Der datasource untergeordnete Knoten verweist auf ein kleines Sling-Servlet, das Sie auch schreiben. Er hat nur eine Aufgabe: FileAttachmentValidatorManager nach getValidators() fragen und die getFileAttachmentValidatorName() jedes Validators in eine Dropdown-Option umwandeln. Die vollständige, einsatzbereite Implementierung finden Sie unter Schritt 7 des ClamAV-Tutorials: Das Servlet ist unabhängig von der verwendeten Validator-Engine identisch, sodass Sie es unverändert in Ihr Projekt kopieren können.

Stellen Sie beide Dateien als Teil des ui.apps Inhaltspakets Ihres Projekts und core Bundle bereit (siehe Erstellen und Bereitstellen des Bundles). Nach der Bereitstellung ist die Funktionsfähigkeit dieser Dialogfelderweiterung überprüft: Das Feld wird auf der Registerkarte Übermittlung neben den vorhandenen vorkonfigurierten Feldern angezeigt (ersetzt sie nicht), und wenn Sie darauf festlegen, bleibt eine reine fileAttachmentValidator-Eigenschaft auf dem Guide-Container-Knoten erhalten, die von der AEM-Übermittlungs-Pipeline über FileAttachmentValidatorManager.getFileAttachmentValidator(name) gelesen wird.

Wählen Sie den Validator auf Ihrem Formular aus select-validator

  1. Öffnen Sie Ihr adaptives Formular zur Bearbeitung und wählen Sie den Guide-Container aus, um die Eigenschaften Container für adaptive Formulare zu öffnen.
  2. Navigieren Sie zur Registerkarte Übermittlung .
  3. Wählen Sie in Dropdown-Liste Dateianhang-Virenscanner/ Ihren Validator aus. Angenommen, Sie haben das Feld Validator zum Formulardialogfeld hinzufügen ausgefüllt, dann wird diese Liste mit den von getFileAttachmentValidatorName() für jeden derzeit registrierten Validator zurückgegebenen Namen gefüllt. Wählen Sie Keine (Standard) aus, um die Validierung für dieses Formular zu deaktivieren.
  4. Wählen Sie Fertig und speichern Sie das Formular.

Registerkarte „Übermittlung“ im Dialogfeld „Container für adaptive Formulare“ mit einem im Feld „Virenscanner/Validator für Dateianhänge“ ausgewählten Validator

IMPORTANT
Wenn auf der Registerkarte „Übermittlung“ kein Feld Virenscanner für Dateianhänge / Validator angezeigt wird, haben Sie (oder Ihr Projekt) Das Validatorfeld zum Formulardialogfeld hinzufügen noch nicht ausgefüllt. Bei Formularen, die auf Kernkomponenten basieren, ist dieses Feld nie vorkonfiguriert vorhanden.

Laufzeitverhalten und Benutzererlebnis runtime-behavior

  • Datei akzeptiert. Wenn Ihr Validator ein gültiges Ergebnis zurückgibt, wird die Übermittlung wie gewohnt fortgesetzt.
  • Datei abgelehnt. Wenn Ihr Validator ein ungültiges Ergebnis zurückgibt, stoppt AEM die Übermittlung, zeigt die Meldung aus dem Ergebnis für den Benutzer an und markiert das Feld Dateianhang mit einem Validierungsfehler. Die Formulardaten werden nicht übermittelt.

Laden und Ausführen des Validators überprüfen verify

  1. Bestätigen Sie nach der Bereitstellung, dass das Bundle aktiv ist und die Komponente in der OSGi-Konsole (Status > Komponenten) erfüllt ist, die unter dem FileAttachmentValidator aufgeführt ist.
  2. Öffnen Sie die Übermittlungseinstellungen eines Formulars und bestätigen Sie, dass Ihr Validator in der Dropdown-Liste angezeigt wird.
  3. Senden Sie das Formular mit einer Testdatei und bestätigen Sie, dass Ihr Validator aufgerufen wird (fügen Sie während der Entwicklung eine Protokollanweisung hinzu).

Wenn das Virenscanner/Validator für Dateianhänge nicht auf der Registerkarte „Übermittlung“ angezeigt wird:

  • Bestätigen Sie, dass Ihr Projekt die Dialogfelderweiterung und das Datenquellen-Servlet von bereitgestellt hat Fügen Sie das Validierungsfeld zum Formulardialogfeld hinzu. Dieses Feld ist nicht vorkonfiguriert für Formulare, die auf Kernkomponenten basieren.
  • Bestätigen Sie, dass der Umschalter FT_FORMS-23497-Funktion für Ihr Programm aktiviert ist. Er prüft die zugrunde liegende FileAttachmentValidatorManager, von der das Datenquellen-Servlet abhängig ist.

Wenn das Feld angezeigt wird, Ihr Validator jedoch nicht in der Dropdown-Liste aufgeführt ist:

  • Vergewissern Sie sich, dass das Bundle installiert und aktiv ist und dass die Komponente unter FileAttachmentValidator registriert ist und sich nicht in einem nicht erfüllten Status befindet.
  • Bestätigen getFileAttachmentValidatorName() gibt einen nicht leeren, eindeutigen Namen zurück.
  • Laden Sie den Formular-Editor nach der Bereitstellung des Bundles neu.

Best Practices und Hinweise best-practices

Bestimmen, wo gescannt wird. Ihr Validator kann eine Scan-Engine aufrufen, die lokal (oder zusammen mit AEM) oder über eine Remote-Scan-API ausgeführt wird. Eine lokale oder am selben Standort befindliche Engine speichert Dateiinhalte in Ihrer Umgebung, wodurch die Anforderungen an die Datenresidenz und die Compliance erfüllt werden können. Eine Remote-API sendet Datei-Bytes außerhalb der Umgebung. Überprüfen Sie daher vor der Auswahl, ob dies für Ihre Daten akzeptabel ist.

Wählen Sie bewusst einen Fehlermodus. Wenn das Scan-Modul nicht erreichbar ist oder Fehler auftreten, können Sie beim Schließen (wie im Beispiel oben) oder beim Öffnen (Akzeptieren) einen Fehler verursachen. „Fehlgeschlagen“ ist der sicherere Standard für sicherheitsempfindliche Formulare. Öffnen Sie die Favoriten für die Verfügbarkeit nicht. Treffen Sie die Auswahl explizit, anstatt zufällig.

Konto für Latenz. Die Überprüfung erfolgt synchron während der Übermittlung, sodass die Überprüfungszeit zur Sendeerfahrung des Benutzers hinzugefügt wird. Legen Sie sinnvolle Zeitüberschreitungswerte für Aufrufe an Ihre Engine fest und definieren Sie Erwartungen mit einer Service-Level-Vereinbarung, wenn Sie von einem externen Service abhängig sind.

Gebundene Payload. getValue() gibt die Datei als speicherinternen byte[] zurück, sodass große Uploads Heap verbrauchen. Begrenzen Sie Uploads an der Quelle mithilfe der maximalen Dateigröße und der unterstützten Dateitypen der Dateianhangskomponente, sodass der Validator nur Dateien verarbeitet, die eine angemessene Größe aufweisen und von denen erwartet wird.

Überlagern der Steuerelemente. Ein Validator ist am stärksten als eine von mehreren Ebenen. Beschränken Sie Dateitypen und -größen auf der Dateianhang-Komponente, scannen Sie bei der Übermittlung mit Ihrem Validator und fügen Sie Bot-Schutz wie CAPTCHA hinzu. Allein ist keine einzelne Schicht ausreichend.

Zurückweisungsnachrichten löschen. Der message im Ergebnis wird dem Benutzer angezeigt, sodass er verwertbar ist, z. B. „Dieser Dateityp ist nicht zulässig. Laden Sie eine PDF hoch.“ Erwägen Sie die Lokalisierung, wenn Ihre Formulare in mehreren Sprachen vorliegen.

Sichern und Überwachen des Scan-Kanals. Verwenden Sie den sicheren Transport zu Ihrer Scan-Engine, halten Sie sie hoch verfügbar, da sie sich im Übermittlungspfad befindet, und protokollieren Sie die Scan-Ergebnisse für Auditing und Fehlerbehebung.

Häufig gestellte Fragen faq

Was ist ein Dateianhang-Validator in AEM Forms?
Es handelt sich dabei um einen Server-seitigen Service, den Sie in AEM registrieren. Dieser überprüft jede Datei, die über ein adaptives Formular zum Zeitpunkt der Übermittlung hochgeladen wurde, und teilt AEM mit, ob die Datei akzeptiert oder abgelehnt werden soll. Sie wählen es in einem Formular über die Einstellung Dateianhang-Virenscanner / -Validator aus.

Wann ruft AEM den Validator auf?
Beim Senden, bevor die Formulardaten und der Anhang beibehalten werden. AEM ruft Ihre validateFileAttachment mit dem Anhang auf und blockiert die Übermittlung, wenn das Ergebnis ungültig ist.

Kann die Validierung vor der Übermittlung ausgeführt werden, sobald die Datei angehängt ist?
Ja, als separater Mechanismus. Verwenden Sie den Service aufrufen-Vorgang im Regeleditor für adaptive Forms, um einen Scan-Service beim Änderungsereignis des Dateifelds aufzurufen, bevor der Benutzer die Nachrichten sendet. Dies ist unabhängig von der in diesem Artikel beschriebenen FileAttachmentValidator. Stattdessen wird ein Formulardatenmodell-Service (FDM) aufgerufen. Siehe Aufrufen von Service-Verbesserungen im Regeleditor.

Läuft der Validator im Browser oder auf dem Server?
Auf dem Server. Die Prüfung kann nicht umgangen werden, indem JavaScript deaktiviert oder die Seite im Browser bearbeitet wird.

Kann ich mit dieser Schnittstelle ein Antivirenprogramm verwenden?
Ja. Die Schnittstelle hängt von keiner bestimmten Engine ab. Ihre Implementierung kann einen lokalen Scan-Daemon, ein kommerzielles Antiviren- oder Datenverlustpräventionsprodukt oder eine Remote-Scan-API aufrufen und das Ergebnis dann einem FileAttachmentValidationResult zuordnen.

Wird eine abgelehnte Datei in AEM gespeichert?
Anzahl Da die Datei vor dem Speichern ausgewertet wird, wird eine zurückgewiesene Datei nie in das Repository geschrieben.

Wie zeige ich eine benutzerdefinierte Nachricht, wenn eine Datei abgelehnt wird?
Legen Sie beim Erstellen der FileAttachmentValidationResult den message fest. AEM zeigt diese Meldung den Benutzenden an, wenn es die Datei ablehnt.

Beispielszenarien example-scenarios

  • Szenario: Jede Datei wird abgelehnt, einschließlich sauberer Dateien.
    Aktion: Überprüfen Sie, ob die Scan-Engine oder die Abhängigkeit, die Ihr Validator aufruft, erreichbar ist. Ein Validator, der beim Schließen fehlschlägt, lehnt alle Elemente ab, wenn keine Verbindung hergestellt werden kann. Bestätigen Sie daher zuerst die Verbindung und überprüfen Sie die Protokolle Ihres Validators auf Verbindungsfehler.

  • Szenario: Das Feld Virenscanner/Validator für Dateianhänge wird auf der Registerkarte Übermittlung überhaupt nicht angezeigt.
    Aktion Bestätigen Sie, dass Ihr Projekt die Dialogfelderweiterung und das Datenquellen-Servlet von bereitgestellt hat Fügen Sie das Validierungsfeld zum Formulardialogfeld hinzu und dass alle Funktionen, die die zugrunde liegende Manager-Funktion einblenden, für Ihr Programm aktiviert sind.

  • Szenario: Das Feld wird angezeigt, aber Ihr Validator wird nicht in der Dropdown-Liste aufgeführt.
    Aktion Bestätigen Sie, dass das Bundle aktiv und unter FileAttachmentValidator registriert ist (sich nicht in einem nicht erfüllten Status befindet), sodass getFileAttachmentValidatorName() einen nicht leeren, eindeutigen Namen zurückgibt, und laden Sie den Formular-Editor nach der Bereitstellung neu.

  • Szenario: Formularübermittlungen fühlen sich nach dem Hinzufügen des Validators merklich langsamer an.
    Aktion Die Überprüfung wird synchron während der Übermittlung ausgeführt, sodass die Überprüfungszeit zur Sendeerfahrung des Benutzers hinzugefügt wird. Überprüfen Sie die Latenz Ihrer Scan-Engine und legen Sie eine sinnvolle Zeitüberschreitung fest. Siehe Konto für Latenz.

  • Szenario: müssen mehr als eine Antiviren-Engine oder mehrere unterschiedlich konfigurierte Instanzen derselben Engine unterstützen.
    Aktion: jede als eigene FileAttachmentValidator Implementierung registrieren. Jeder registrierte Validator wird automatisch in der Dropdown-Liste der Übermittlungsregisterkarte über eine eigene getFileAttachmentValidatorName() angezeigt, sodass sich nichts an der Dialogfelderweiterung ändern muss.

  • Szenario: soll die Validierung vor der Benutzereingabe und nicht nur bei der Übermittlung ausgeführt werden.
    Aktion: Siehe Kann die Validierung früher als die Übermittlung ausgeführt werden? über. Verwenden Sie den Vorgang Service aufrufen im Regeleditor anstelle dieses Validators oder zusammen mit diesem Validator.

recommendation-more-help
experience-manager-cloud-service-help-main-toc