Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
jstachio__jstachio_CVE-2023-33962_1-0-0 — Type-safe motore di templating Mustache per Java con validazione dei template in fase di compilazione, binding statico dei valori ed escaping estensibile per HTML e altri tipi di contenuto. | Kitploit
Strumenti/GitHubGitHub/shoucheng3/jstachio__jstachio_cve-2023-33962_1-0-0
Utilità GenericheAnalisi Statica del Codice (SAST)Analisi del CodiceSicurezza WebApprendimento e Formazione
GitHubshoucheng3/jstachio__jstachio_cve-2023-33962_1-0-0

jstachio__jstachio_CVE-2023-33962_1-0-0

Type-safe motore di templating Mustache per Java con validazione dei template in fase di compilazione, binding statico dei valori ed escaping estensibile per HTML e altri tipi di contenuto.

Vedi Repository
401 anno faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Maven Central Github

jstachio

Un motore di templating Java type-safe per Mustache.

I template vengono compilati in codice sorgente Java leggibile e i binding dei valori vengono controllati staticamente.

Documentazione

  • Ultima documentazione SNAPSHOT di JStachio
  • Documentazione corrente di JStachio rilasciata

La documentazione è disponibile anche su javadoc.io ma non è aggregata come quella sopra. La javadoc aggregata è la documentazione preferita e il resto di questo readme è principalmente a scopo propagandistico di marketing.

Per le versioni precedenti:

https://jstach.io/doc/jstachio/VERSION/apidocs

Dove VERSION è la versione che desideri.

Perché scegliere JStachio

Trattato in why_jstachio_is_better.md.

Caratteristiche

  • Sintassi Mustache (v 1.3) senza logica.

    • Supporto completo dei requisiti non opzionali della specifica Mustache v1.3.0 (incluso il whitespace)
    • Supporto opzionale all'ereditarietà con alcune avvertenze
    • Supporto opzionale alle lambda con alcune differenze dovute alla natura statica
  • Ottieni oggi un supporto simile a JEP 430, ma con ancora più potenza.

  • I template vengono compilati in codice Java

  • I binding dei valori vengono controllati staticamente.

  • Metodi, campi e metodi getter possono essere referenziati nei template.

  • Messaggi di errore amichevoli con contesto.

  • Zero configurazione. Non sono richiesti plugin o modifiche. Tutto viene fatto con javac standard con qualsiasi IDE e/o sistema di build.

  • Sono supportati template non-HTML. Il set di tipi di contenuto con escaping supportati è estensibile.

  • I layout sono supportati tramite la specifica di ereditarietà di Mustache.

  • Punto di estensione del servizio di rendering fallback tramite ServiceLoader

    • Fallback senza interruzioni al rendering runtime basato su reflection tramite JMustache e mustache.java (utile per lo sviluppo e per modificare i template in tempo reale)
    • Se non sei un fan del codice generato, puoi comunque usare JStachio per il type check dei tuoi template mustache.
  • Personalizza i tipi consentiti che possono essere emessi, altrimenti errore del compilatore (per evitare toString su classi che non hanno un toString leggibile).

  • Formatter per un toString personalizzato delle variabili a runtime.

  • Aggiungi ulteriori interfacce implements al codice generato per componenti aggiuntivi simili a trait (@JStacheInterfaces)

  • Potente supporto alle lambda

  • Supporto a Map<String, ?>

  • Supporto a Optional<?>

  • Compatibile con le estensioni degli indici di lista di JMustache e Handlebars (come -first, -last, -index)

  • È di gran lunga il motore di template Java simile a Mustache più veloce, nonché uno dei più veloci in generale.

  • Zero dipendenze oltre a JStachio stesso

  • È disponibile un'opzione con zero dipendenze runtime assolute (ovvero tutto il codice necessario viene generato e durante il runtime non serve nemmeno jstachio). Non c'è bisogno di usare Maven shade per gli annotation processor e altri progetti zero dipendenze. Utile anche per progetti native di Graal VM per un footprint il più minimo possibile.

  • Supporto di prima classe per Spring Framework (nel senso che il progetto stesso fornirà i plugin, a differenza di un progetto ausiliario)

Prestazioni

Non è un obiettivo di questo progetto essere il motore di template Java più veloce!

(tuttavia, al momento dell'ultimo aggiornamento di questo readme, è il più veloce che io conosca)

Non che le prestazioni contino molto con i linguaggi di templating (raramente sono il collo di bottiglia), ma JStachio è molto veloce:

https://github.com/agentgt/template-benchmark

Output di stringhe

Confronto Template

Output UTF-8 in byte con caratteri estesi

Confronto Template

Esempio rapido


@JStache(template = """
        {{#people}}
        {{message}} {{name}}! You are {{#ageInfo}}{{age}}{{/ageInfo}} years old!
        {{#-last}}
        That is all for now!
        {{/-last}}
        {{/people}}
        """)
public record HelloWorld(String message, List<Person> people) implements AgeLambdaSupport {
}

public record Person(String name, LocalDate birthday) {
}

public record AgeInfo(long age, String date) {
}

public interface AgeLambdaSupport {

    @JStacheLambda
    default AgeInfo ageInfo(Person person) {
        long age = ChronoUnit.YEARS.between(person.birthday(), LocalDate.now());
        String date = person.birthday().format(DateTimeFormatter.ISO_DATE);
        return new AgeInfo(age, date);
    }

}

@Test
public void testPerson() throws Exception {
    Person rick = new Person("Rick", LocalDate.now().minusYears(70));
    Person morty = new Person("Morty", LocalDate.now().minusYears(14));
    Person beth = new Person("Beth", LocalDate.now().minusYears(35));
    Person jerry = new Person("Jerry", LocalDate.now().minusYears(35));
    String actual = JStachio.render(new HelloWorld("Hello alien", List.of(rick, morty, beth, jerry)));
    String expected = """
            Hello alien Rick! You are 70 years old!
            Hello alien Morty! You are 14 years old!
            Hello alien Beth! You are 35 years old!
            Hello alien Jerry! You are 35 years old!
            That is all for now!
                            """;
    assertEquals(expected, actual);

}

Installazione

Maven

<properties>
    <io.jstach.version>0.6.0-SNAPSHOT</io.jstach.version>
</properties>
...
<dependencies>
    <dependency>
        <groupId>io.jstach</groupId>
        <artifactId>jstachio</artifactId>
        <version>${io.jstach.version}</version>
    </dependency>
</dependencies>
...
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>17</source> <!-- 17 is the minimum -->
                <target>17</target> <!-- 17 is the minimum -->
                <annotationProcessorPaths>
                    <path>
                        <groupId>io.jstach</groupId>
                        <artifactId>jstachio-apt</artifactId>
                        <version>${io.jstach.version}</version>
                    </path>
                    <!-- other annotation processors -->
                </annotationProcessorPaths>
            </configuration>
        </plugin>
    </plugins>
</build>

N.B. Il jar delle annotazioni (jstachio-annotation) viene incluso transitivamente

Gradle

dependencies {
 
    implementation 'io.jstach:jstachio:VERSION'
 
    annotationProcessor 'io.jstach:jstachio-apt:VERSION'
}

Esempi

user.mustache

{{#name}}
<p>Name: {{.}}, Name Length is {{length}}</p>
{{/name}}

<p>Age: {{  age  }}</p>

<p>Achievements:</p>
Scarica lo strumento