Funzione di sicurezza PHP: strip_tags, filter_var, Md5 e sha1

⚡ Riepilogo intelligente

PHP Security protegge le applicazioni web dagli aggressori e dagli input imprudenti convalidando, sanificando e archiviando i dati in modo sicuro. Questa guida illustra le principali minacce, quindi mostra strip_tags, filter_var, escapinge l'hashing moderno delle password con password_hash per difendersi da XSS, SQL injection e credenziali rubate.

  • 🛡️ Conosci le minacce: I rischi principali sono l'iniezione SQL, il cross-site scripting e l'iniezione di codice, solitamente tramite moduli o URL parametri.
  • 🧹 Etichette della striscia: strip_tags rimuove l'HTML, JavaScript e tag PHP dall'input, riducendo il rischio di cross-site scripting persistente.
  • Convalida input: La funzione filter_var convalida e sanifica i dati, verificando che un valore sia del tipo previsto prima che il codice lo consideri attendibile.
  • 🔒 Fuga o legame: La funzione `mysqli_real_escape_string` esegue l'escape dell'input della query, ma le istruzioni preparate parametrizzate rappresentano una difesa più efficace contro le iniezioni SQL.
  • 🔑 Hash delle password corretto: Non memorizzare mai le password con MD5 o SHA1; usa password_hash e password_verify, che applicano l'hashing bcrypt, più lento e con salt.
  • 💡 Difesa in profondità: Combina la convalida, escaping, HTTPS e account di database con privilegi minimi, anziché affidarsi a un singolo controllo.
  • 🤖 Assistenza AI: Gli strumenti di intelligenza artificiale possono analizzare il codice PHP alla ricerca di falle di sicurezza e contribuire a correggere in modo sicuro vulnerabilità come SQL injection o XSS.

Sicurezza PHP

Potenziali minacce alla sicurezza

Esistono fondamentalmente due gruppi di persone che possono attaccare il tuo sistema:

  • Hacker: con l'intento di ottenere l'accesso a dati non autorizzati o interrompere l'applicazione
  • Gli utenti potrebbero, involontariamente, inserire parametri errati nei moduli, con conseguenze negative per un sito web o un'applicazione web.

Di seguito sono elencati i tipi di attacchi a cui dobbiamo fare attenzione.

SQL Injection – questo tipo di attacco aggiunge codice dannoso a SQL dichiarazioni.

Ciò viene fatto utilizzando moduli di input dell'utente oppure URLche utilizzano variabili.

Il codice allegato commenta la condizione nella clausola WHERE di un'istruzione SQL. Il codice allegato può anche:

  • inserire una condizione che sarà sempre vera
  • eliminare i dati da una tabella
  • aggiornare i dati in una tabella

Questo tipo di attacco viene solitamente utilizzato per ottenere l'accesso non autorizzato a un'applicazione.

Scripting tra siti (XSS) – questo tipo di attacco inserisce codice dannoso, di solito JavaScript. Questo viene fatto utilizzando moduli di input utente come i moduli di contatto e di commento. Questo viene fatto per:

  • Recuperare informazioni sensibili come dati dei cookie
  • Reindirizzare l'utente a un altro URL.

Tra le altre minacce si possono includere l'iniezione di codice PHP, l'iniezione di shell, l'iniezione di email e la divulgazione del codice sorgente degli script.

PHP Application Security migliori pratiche

Analizziamo ora alcune delle migliori pratiche di sicurezza PHP che dobbiamo considerare durante lo sviluppo.ping le nostre applicazioni.

strip_tag PHP

La funzione strip_tags rimuove l'HTML, JavaCopione, oppure tag PHP da una stringa.

Questa funzione è utile quando dobbiamo proteggere la nostra applicazione da attacchi come il cross-site scripting.

Consideriamo un'applicazione che accetta commenti dagli utenti.

<?php
 
$user_input = "Your site rocks";
 
echo "<h4>My Commenting System</h4>";
 
echo $user_input;
 
?>

Supponendo che tu abbia salvato comments.php nella cartella phptuts, vai a URL http://localhost/phptuts/comments.php

strip_tag PHP

Supponiamo che tu riceva il seguente input dall'utente: alert(‘Your site sucks!’);

<?php
 
$user_input = "<script>alert(0);</script>";
 
echo "<h4>My Commenting System</h4>";
 
echo $user_input;
 
?>

Passare al URL http://localhost/phptuts/comments.php

strip_tag PHP

Procediamo ora a proteggere la nostra applicazione da tali attacchi utilizzando la funzione strip_tags.

<?php
 
$user_input = "<script>alert(0);</script>";
 
echo strip_tags($user_input);
 
?>

Passare al URL http://localhost/phptuts/comments.php

strip_tag PHP

Funzione PHP filter_var

La funzione filter_var viene utilizzata per convalidare e disinfettare i dati.

La convalida controlla se i dati sono del tipo corretto. Un controllo di convalida numerica su una stringa restituisce un risultato falso.

La sanificazione sta rimuovendo i caratteri illegali da a stringa.

Consulta questo link per il riferimento completo: filtro_var

Il codice seguente si riferisce al sistema di commenti. Utilizza la funzione filter_var e la costante FILTER_SANITIZE_STRIPPED per rimuovere i tag.

<?php
 
$user_input = "<script>alert(0);</script>";
 
echo filter_var($user_input, FILTER_SANITIZE_STRIPPED);
 
?>

Produzione:

alert('Your site sucks!');

Nota: FILTER_SANITIZE_STRIPPED (alias di FILTER_SANITIZE_STRING) è obsoleto a partire da PHP 8.1. Per il nuovo codice, utilizzare strip_tags() o, per una visualizzazione sicura, htmlspecialchars().

PHP mysqli_real_escape_string

La funzione mysqli_real_escape_string viene utilizzata per proteggere un'applicazione dalle iniezioni SQL.

Supponiamo di avere la seguente istruzione SQL per la convalida dell'ID utente e della password.

<?php
SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass';
?>

Un utente malintenzionato può entrare ' OPPURE 1 = 1 — nel campo di testo dell'ID utente e 1234 nel campo di testo della password. Ora codifichiamo il modulo di autenticazione.

<?php
 
$uid = "0$uid1$pwd';";
 
echo $sql;
 
?>

Il risultato finale sarà:

SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';

QUI,

  • “WHERE uid = ”” verifica se l'ID utente è vuoto
  • “' O 1 = 1” è una condizione che sarà sempre vera
  • Il simbolo “–” commenta la parte che verifica la password.

La query precedente restituirà tutti gli utenti. Utilizziamo ora la funzione mysqli_real_escape_string per proteggere il nostro modulo di login. Si noti che nel codice reale questa funzione accetta la connessione al database come primo argomento.

<?php
 
$uid = mysqli_real_escape_string($conn, "0$uid1$pwd';";
 
echo $sql;
 
?>

Il codice sopra riportato produrrà il seguente output:

SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';

Nota: il secondo apice singolo è stato preceduto da un carattere di escape, quindi verrà trattato come parte dell'ID utente e la password non verrà commentata.

migliori pratiche: ESCAping Sebbene utili, le istruzioni preparate parametrizzate in mysqli o PDO sono la difesa consigliata contro le SQL injection, poiché i dati non vengono mai mescolati al testo della query.

PHP Md5 e PHP sha1

MD5 è l'acronimo di Message Digest 5, e SHA1 è l'acronimo di Secure Hash Algorithm 1. Entrambe sono funzioni di hashing unidirezionali.

Il codice seguente mostra l'implementazione di md5 e sha1.

<?php
echo "MD5 Hash: " . md5("password");
echo "SHA1 Hash: " . sha1("password");
?>

Supponendo che tu abbia salvato il file hashes.php nella cartella phptuts, vai al URL.

PHP Md5 e PHP sha1

Importante: MD5 e SHA1 sono hash veloci e non salati e sono non più considerato sicuro per la memorizzazione delle password, perché possono essere decifrati rapidamente con hardware moderno e tabelle rainbow. Utilizzateli solo per checksum non di sicurezza e usate il metodo descritto di seguito per le password.

Come crittografare le password in modo sicuro in PHP

Per la memorizzazione delle password, PHP offre le funzioni `password_hash` e `password_verify`. Queste applicano un algoritmo lento e con salt (bcrypt per impostazione predefinita), quindi ogni hash è univoco e costoso da decifrare, anche se il database viene rubato.

<?php
// Hash a password before storing it in the database
$hash = password_hash("mypassword", PASSWORD_DEFAULT);
 
// Verify the password when the user logs in
if (password_verify("mypassword", $hash)) {
    echo "Password is valid";
} else {
    echo "Invalid password";
}
?>
  • hash_password() genera un hash con salt da memorizzare nel database; PASSWORD_DEFAULT mantiene l'algoritmo attualmente consigliato.
  • verifica_password() Verifica il tentativo di accesso confrontandolo con l'hash memorizzato, senza mai decifrarlo.

Poiché il salt e l'algoritmo sono memorizzati all'interno dell'hash, non è necessario gestirli manualmente, il che rende questo il metodo corretto e a prova di futuro per la gestione delle password in PHP.

DOMANDE FREQUENTI

Utilizza istruzioni preparate con parametri associati in mysqli o PDO. Inviano la query e i dati separatamente, quindi l'input dell'utente non può mai modificare la struttura della query. Questo è più sicuro rispetto all'escalation manuale.ping ingresso.

strip_tags rimuove completamente i tag HTML e PHP, mentre htmlspecialchars li converte in entità sicure in modo che vengano visualizzati come testo. Per l'output escaping Contro gli attacchi XSS, htmlspecialchars è solitamente la scelta più sicura.

Genera un token CSRF univoco per ogni sessione, incorporalo come campo nascosto in ogni modulo e verificalo al momento dell'invio. Rifiuta qualsiasi richiesta il cui token sia mancante o non corrisponda al valore memorizzato.

Sì. L'IA può eseguire una scansione per rilevare SQL injection, XSS, hashing di password non sicuro e gestione di file non protetta, quindi spiegare ogni rischio e suggerire una soluzione. Consideratela una prima analisi utile, non un sostituto di una revisione della sicurezza.

Sì. Incolla il codice vulnerabile e l'IA può riscriverlo con istruzioni preparate, output escapinge convalida dell'input. Testa il codice corretto e conferma la correzione confrontandola con l'input di attacco originale.

Riassumi questo post con: