• 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

peduz91Marzo 18, 2025 3 min di lettura

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

Cybersecurity
facebooktwitterlinkedinreddit

La sicurezza di un’applicazione non dipende solo da password robuste e crittografia avanzata. Se un attacco avviene e non viene rilevato, può causare danni ingenti prima che qualcuno se ne accorga. Il logging e il monitoring sono essenziali per identificare e rispondere agli attacchi informatici.

1. Perché il logging e il monitoring sono fondamentali?

Senza un buon sistema di logging e monitoring, gli attacchi possono passare inosservati per settimane o mesi; alcuni casi in cui è imprescindibile loggare correttamente:

Recommended article
Febbraio 20, 2025

Hashing e sicurezza informatica

Fabrizio Tedeschi

Fabrizio Tedeschi

Cybersecurity
  • Tentativi di accesso falliti ripetuti: brute force attack su account utente
  • Anomalie nei privilegi: un utente ottiene accesso amministrativo in modo sospetto
  • Accesso da IP insoliti: un utente con sede in Italia che si collega dalla Cina senza VPN
  • Attacchi SQL Injection e XSS: attraverso pattern ricorrenti nei log di input utente

Un caso reale è quello di Equifax (2017), in cui un attacco non è stato rilevato per mesi a causa della mancanza di un sistema di logging e monitoring efficace.

2. Errori comuni nel logging e monitoring

2.1 Non loggare eventi critici

Un errore comune è non registrare eventi importanti, come login falliti ripetuti o modifiche di permessi.

Esempio di codice vulnerabile:
public void login(String username, String password) {
    User user = userService.authenticate(username, password);
    if (user == null) {
        // Nessun log sull'accesso fallito
        return;
    }
    // Login riuscito
}Code language: JavaScript (javascript)
Soluzione corretta con logging adeguato:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class AuthService {
    private static final Logger logger = LoggerFactory.getLogger(AuthService.class);

    public void login(String username, String password) {
        User user = userService.authenticate(username, password);
        if (user == null) {
            logger.warn("Tentativo di accesso fallito per l'utente: {}", username);
            return;
        }
        logger.info("Accesso riuscito per l'utente: {}", username);
    }
}Code language: JavaScript (javascript)

2.2 Loggare informazioni sensibili

Loggare con criterio significa registrare solo le informazioni necessarie per rilevare e diagnosticare anomalie di sicurezza senza compromettere la privacy degli utenti o esporre dati sensibili. Un logging eccessivo può portare a problemi di conformità (GDPR, PCI-DSS) e aumentare il rischio di violazioni dei dati, mentre un logging insufficiente può rendere difficile individuare attacchi o attività sospette. È fondamentale evitare di loggare informazioni come password, token di sessione, numeri di carte di credito o dati personali, limitandosi a identificatori non sensibili e dettagli utili per il debugging e l’audit della sicurezza.

Esempio di cattivo logging:
logger.info("Utente {} ha effettuato il login con password {}", username, password);Code language: CSS (css)
Soluzione sicura:
logger.info("Utente {} ha effettuato il login", username);Code language: CSS (css)

2.3 Log non protetti

I log non protetti possono essere un bersaglio per attaccanti che vogliono alterare o cancellare tracce di attività malevole. È essenziale archiviarli in percorsi sicuri, limitare gli accessi e utilizzare firme digitali o hashing per garantirne l’integrità, evitando così manipolazioni non autorizzate.

Best practices per la protezione dei log:
  • Salvare i log in directory protette con permessi adeguati.
  • Non archiviare i log localmente su macchine compromettibili, ma inviarli a un server centralizzato (ELK Stack, Splunk, Graylog).
  • Usare firme digitali per prevenire la modifica dei log.

2.4 Assenza di monitoraggio e alerting

L’assenza totale di monitoraggio dei log rende impossibile rilevare e rispondere tempestivamente a incidenti di sicurezza. Senza tracce delle attività o non monitorando i log, le intrusioni possono passare inosservate per mesi, compromettendo dati e sistemi senza possibilità di analisi forense o mitigazione efficace.

Strumenti consigliati:
  • SIEM (Security Information and Event Management) per analizzare i log in tempo reale.
  • Prometheus + Grafana per monitorare l’attività anomala.
  • Email/SMS Alerting per notificare i responsabili in caso di attività sospette.

3. Implementazione sicura del logging in java

Un’implementazione sicura del logging in Java richiede l’uso di framework affidabili come Logback o SLF4J, configurati per escludere dati sensibili e scrivere log in percorsi protetti. È consigliabile impostare livelli di log adeguati, utilizzare crittografia per dati sensibili quando necessario e applicare controlli di accesso per prevenire manipolazioni non autorizzate.

3.1 Configurare logback in modo sicuro

Nel file logback.xml evita di loggare dati sensibili e imposta livelli di severità adeguati:

<configuration>
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/security.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/security-%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} - %level - %msg%n</pattern>
        </encoder>
    </appender>
    
    <logger name="com.myapp.security" level="WARN" additivity="false">
        <appender-ref ref="FILE" />
    </logger>
</configuration>Code language: HTML, XML (xml)

3.2 Configurare alerting su eventi critici

Con Logback è possibile inviare notifiche email su eventi di sicurezza:

<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
    <SMTPHost>smtp.miodominio.com</SMTPHost>
    <To>security-team@miodominio.com</To>
    <From>no-reply@miodominio.com</From>
    <Subject>[ALERT] Evento di Sicurezza Rilevato</Subject>
    <layout class="ch.qos.logback.classic.PatternLayout">
        <pattern>%d{yyyy-MM-dd HH:mm:ss} - %level - %msg%n</pattern>
    </layout>
</appender>Code language: HTML, XML (xml)

4. Conclusione

Un buon sistema di logging e monitoring in Java può prevenire attacchi informatici e minimizzare i danni in caso di violazione. Per garantire la sicurezza della tua applicazione:

  • Logga gli eventi critici.
  • Proteggi i log da accessi non autorizzati.
  • Non registrare dati sensibili nei log.
  • Implementa alert e strumenti di monitoring.

Seguendo queste best practices, sarai in grado di identificare e rispondere rapidamente a eventuali minacce, proteggendo i tuoi utenti e la tua infrastruttura.

Codemotion Collection Background
cybersecurity
Selezionati per te

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

Share on:facebooktwitterlinkedinreddit

Tagged as:Java Security

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.
Gestire le code senza una coda: Scopri fastq
Previous Post
Node.js: Guida per creare API e applicazioni in JavaScript. L’intervista di Alessandro Miliucci al DevsBookClub
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