Standard / korrekter Kontext für HTML-href-Attribute in Sightly

8

Ich benutze Sightly und während ich einen Fehler in meiner Anwendung untersuchte, bemerkte ich ein Verhalten, das ich nicht erwartet hatte.

Einige der Links würden mit kaufmännischen Und-Zeichen in der Query-Zeichenkette zweimal maskiert werden. Beispiel:

%Vor%

Bei genauerer Betrachtung stellte sich heraus, dass eine org.apache.sling.rewriter.Transformer -Implementierung in allen href -Attributen, die in AEM ausgeführt werden, Sonderzeichen löscht.

Zusammen mit Sightseel XSS-Schutz führte dies zu doppelten Fluchten.

Während ich dies weiter untersuchte, deaktivierte ich den Transformator und bemerkte ein merkwürdiges Verhalten in Sichtweise selbst.

Der Attributkontext und der Standardkontext in href-Attributen stimmen nicht mit

überein

Angesichts der folgenden drei Elemente würde ich erwarten, dass sie den href -Wert auf die gleiche Weise darstellen (wobei die Abfragezeichenfolge mit den W3C-Standards übereinstimmt)

%Vor%

Allerdings führt nur der letzte die Flucht aus und ich bekomme

%Vor%

Aus irgendeinem Grund gibt der letzte, der context='attribute' verwendet (der einzige, der etwas mit den & -Zeichen macht), die Ampersands zweimal aus und führt zu ungültigen Links.

Dies kann mit beliebigen Element- und Attributnamen erreicht werden. Ich denke also, ich kann davon ausgehen, dass dies kein Rewriter ist.

%Vor%

Ausgaben:

%Vor%

Außerdem die Anzeigekontextspezifikation gab mir den Eindruck, dass der Kontext beim Rendern eines Attributs automatisch als attribute

aufgenommen würde
  

Zum Schutz vor Cross-Site-Scripting (XSS) -V Schwachstellen erkennt Sightly automatisch den Kontext, in dem eine Ausgabezeichenfolge innerhalb der endgültigen HTML-Ausgabe angezeigt werden soll, und entkommt diese Zeichenfolge entsprechend.

Ist das beobachtete Verhalten hier zu erwarten oder schaue ich auf einen möglichen Bug in Sightly?

Welchen Kontext sollte ich hier verwenden? Alle Kontexte abgesehen von attribute ignorieren die Tatsache, dass Abfragezeichenfolgen in href maskiert werden sollten. attribute dagegen scheint dies zweimal zu tun. Was ist los?

Ich benutze Adobe Granite Sightless Template Engine (Kompatibilität) io.sightly.bundle 1.1.72

Der Uri-Kontext gibt Abfragezeichenfolgen nicht wie erwartet in HTML5-href-Attributen

zurück

Ich habe es auch mit

versucht %Vor%

Aber die & -Zeichen können nicht entfernt werden, was zu ungültigem HTML5 führt.

%Vor%

Ergebnis der Validierung als HTML5:

  

Fehlerzeile 70, Spalte 35: & amp; hat keine Zeichenreferenz gestartet. (& amp; wahrscheinlich hätte als & amp; amp ;. entkommen)

     

<a href="http://www.google.com?a=1&b=2&c=3">explicit uri context</a>

Der HTML-Kontext stellt Links mit mehreren Abfrageparametern in href-Attributen

korrekt dar

Es scheint, als wäre der einzige Kontext, den ich hier verwenden könnte, html ( text entkommt & zweimal, genau wie attribute )

%Vor%

ergibt

%Vor%

Wenn ich in diesen Kontext wechsle, würde ich den richtigen Wert im href erhalten, wie er vom Browser dargestellt wird. Es scheint jedoch nicht die richtige Semantik zu haben.

Um die Beschreibung von html zu zitieren Kontext von der Sicht Spec :

  

Verwenden Sie dies, wenn Sie HTML ausgeben möchten - Entfernt Markup, das XSS-Risiken enthalten kann

    
toniedzwiedz 11.03.2016, 11:15
quelle

3 Antworten

2

Für src und href attributes verwendet den uri XSS-Escapekontext 1 , 2 .

Darüber hinaus ist das folgende Markup HTML5-gültig unter Verwendung des Validators von 3 :

%Vor%

Können Sie mich bitte auf die Spezifikation verweisen, die HTML 5-Abfragezeichenfolgen für HTML-Attribute enthält?

    
Radu Cotescu 14.03.2016, 11:06
quelle
3

Das Attribut href verwendet den Kontext uri und nicht den Kontext attribute . Der attribute -Kontext soll für HTML-Attribute wie title , id , data-* usw. verwendet werden. Zu Ihren drei Beispielen:

%Vor%

Der erste verwendet den uri -Kontext. Die Sekunden verwenden überhaupt keine Sicht. Die dritte ist der Missbrauch des attribute -Kontextes.

Der unsafe -Kontext sollte möglichst vermieden werden.

Sightly entgeht zurzeit nicht dem kaufmännischen Und-Zeichen im uri -Kontext, wie Sie möchten. Sie sollten ein Adobe Daycare-Ticket einreichen oder die Apache Sling-Verteilerliste mit Ihrer Anfrage kontaktieren.

    
nateyolles 11.03.2016 20:36
quelle
0

Sie können den 'unsicheren' Kontext verwenden, wenn alles andere fehlschlägt.

    
Danil Gaponov 11.03.2016 14:35
quelle

Tags und Links