• Skip to primary navigation
  • Skip to main content
  • Skip to footer

Codemotion Magazine

We code the future. Together

  • Discover
    • Events
    • Community
    • Partners
    • Become a partner
    • Hackathons
  • Magazine
    • Backend
    • Dev community
    • Carriere tech
    • Intelligenza artificiale
    • Interviste
    • Frontend
    • DevOps/Cloud
    • Linguaggi di programmazione
    • Soft Skill
  • Talent
    • Discover Talent
    • Jobs
    • Manifesto
  • Companies
  • For Business
    • EN
    • IT
    • ES
  • Sign in
ads

peduz91Febbraio 10, 2025 3 min di lettura

Scrivere codice sicuro: la guida essenziale per gli sviluppatori java – Parte 2

Cybersecurity
facebooktwitterlinkedinreddit

Nel panorama della sicurezza informatica, il Cross-Site Scripting (XSS) è una delle vulnerabilità più comuni e pericolose che possono minare la sicurezza di un’applicazione web. Dopo aver esplorato il tema della SQL Injection nel primo articolo della nostra serie, ci concentriamo ora su XSS, esaminandone i rischi e le strategie per prevenirlo scrivendo codice sicuro in Java.

Che cos’è il Cross-Site Scripting (XSS)?

Il Cross-Site Scripting è una vulnerabilità che consente a un malintenzionato di iniettare codice malevolo (solitamente JavaScript) in una pagina web visualizzata da altri utenti. Questo codice viene eseguito nel contesto del browser della vittima, permettendo all’attaccante di:

Recommended article
Marzo 18, 2025

Scrivere codice sicuro: la guida essenziale per gli sviluppatori Java – Parte 3

peduz91

peduz91

Cybersecurity
  • Rubare cookie, token di sessione e altre informazioni sensibili.
  • Modificare dinamicamente il contenuto della pagina web.
  • Reindirizzare la vittima a siti malevoli.
  • Eseguire azioni dannose a nome della vittima.

Tipologie di XSS

  1. Stored XSS (Persistente): Il codice malevolo viene memorizzato sul server e consegnato a ogni utente che accede alla pagina.
  2. Reflected XSS: Il payload viene incluso nella risposta HTTP solo per l’utente che ha inviato la richiesta contenente il codice malevolo.
  3. DOM-Based XSS: Il codice viene iniettato direttamente nel DOM della pagina senza coinvolgere il server.

Potenziali rischi

Un attacco XSS può compromettere seriamente la sicurezza e l’integrità di un’applicazione. Tra le conseguenze più gravi troviamo:

  • Violazione dei dati: Gli attaccanti possono sottrarre informazioni sensibili come credenziali e dati personali.
  • Accesso non autorizzato: Gli attaccanti possono agire come utenti legittimi per compromettere ulteriormente il sistema.

Come scrivere codice sicuro in Java per prevenire XSS

La prevenzione del Cross-Site Scripting richiede una combinazione di sanitizzazione degli input, escaping dell’output e corretta configurazione delle applicazioni web. Vediamo alcune strategie pratiche con esempi di codice Java.

1. Sanitizzazione degli input

Sanitizzare gli input significa rimuovere o neutralizzare i caratteri potenzialmente pericolosi prima di utilizzarli. Ad esempio:

import org.apache.commons.text.StringEscapeUtils;

public String sanitizeInput(String userInput) {
    return StringEscapeUtils.escapeHtml4(userInput);
}Code language: JavaScript (javascript)

In questo esempio, utilizziamo la libreria Apache Commons Text per convertire i caratteri HTML pericolosi in entità sicure, come "<" in "&lt;".

2. Escaping dell’output

Per impedire l’esecuzione di codice iniettato, è essenziale eseguire l’escaping dei dati dinamici quando vengono inclusi in pagine HTML, JavaScript o attributi.
Esempio:

import org.owasp.encoder.Encode;

public String safeOutput(String userInput) {
    return Encode.forHtml(userInput);
}Code language: JavaScript (javascript)

La libreria OWASP Java Encoder è una scelta eccellente per l’escaping dell’output.

3. Validazione degli input

Un approccio preventivo consiste nel consentire solo input che rispettano un formato specifico:

import java.util.regex.Pattern;

public boolean isValidInput(String input) {
    String regex = "^[a-zA-Z0-9 ]*$"; // Solo lettere, numeri e spazi
    return Pattern.matches(regex, input);
}Code language: JavaScript (javascript)

4. Content Security Policy (CSP)

Configurare una Content Security Policy è un’altra linea di difesa efficace. CSP è un header HTTP che impedisce l’esecuzione di codice non autorizzato.
Esempio di configurazione in Spring Boot:

import org.springframework.context.annotation.Bean;
import org.springframework.security.web.header.writers.ContentSecurityPolicyHeaderWriter;
import org.springframework.security.web.server.header.HttpHeadersWriter;

@Bean
public HttpHeadersWriter contentSecurityPolicy() {
    return new ContentSecurityPolicyHeaderWriter("default-src 'self'; script-src 'self'");
}Code language: JavaScript (javascript)

5. Uso di framework sicuri

Framework come Spring e Thymeleaf offrono meccanismi integrati per proteggere contro XSS. Ad esempio, Thymeleaf esegue automaticamente l’escaping degli input dinamici:

<p th:text="${userInput}"></p>Code language: HTML, XML (xml)

In questo caso, userInput verrà automaticamente escapato per prevenire XSS.

Conclusioni

Il Cross-Site Scripting è una minaccia seria per la sicurezza delle applicazioni web, ma è possibile prevenirlo adottando buone pratiche di programmazione. Sanitizzare gli input, eseguire l’escaping dell’output e configurare adeguatamente l’applicazione sono misure fondamentali.

Scrivere codice sicuro non è solo una responsabilità tecnica, ma anche un impegno verso gli utenti e la loro fiducia.

Nel prossimo articolo della serie, esploreremo un’altra vulnerabilità critica e come affrontarla nel contesto dello sviluppo Java.

Codemotion Collection Background
Dalla community
Selezionati per te

Vuoi scoprire più articoli come questo? Dai un’occhiata alla collection Dalla community dove troverai sempre nuovi contenuti selezionati dal nostro team.

Share on:facebooktwitterlinkedinreddit

Tagged as:Backend Java

peduz91
Sono uno sviluppatore software con forte passione per lo sviluppo, la tecnologia, il calcio e gli scacchi. Mi piace mettermi sempre in gioco, provo spesso cose nuove. Credo che la cosa più importante sia lavorare bene con il team.
TechPills per tutti: Metti in moto il tuo primo progetto Django
Previous Post
Software Architect: figura mitologica?
Next Post

Footer

Discover

  • Events
  • Community
  • Partners
  • Become a partner
  • Hackathons

Magazine

  • Tech articles

Talent

  • Discover talent
  • Jobs

Companies

  • Discover companies

For Business

  • Codemotion for companies

About

  • About us
  • Become a contributor
  • Work with us
  • Contact us

Follow Us

© Copyright Codemotion srl Via Marsala, 29/H, 00185 Roma P.IVA 12392791005 | Privacy policy | Terms and conditions