Funzione di sicurezza PHP: strip_tags, filter_var, Md5 e sha1
Potenziali minacce alla sicurezza
Sono 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
- Utenti: possono inserire in modo innocuo parametri errati nei moduli che possono avere effetti negativi su 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 SQL dichiarazioni.
Questa operazione viene eseguita utilizzando moduli di input dell'utente o URL che utilizzano variabili.
Il codice aggiunto 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.
Cross Site Scripting - questo tipo di attacco solitamente inserisce codice dannoso JavaScript. Questo viene fatto usando moduli di input utente come i moduli di contatto e commenti. Questo viene fatto per;
- Recuperare informazioni sensibili come dati dei cookie
- Reindirizzare l'utente a un URL diverso.
- Altre minacce possono includere: iniezione di codice PHP, iniezione di shell, iniezione di email, divulgazione del codice sorgente dello script, ecc.
PHP Application Security migliori pratiche
Diamo ora un'occhiata ad alcune delle migliori pratiche di sicurezza PHP che dobbiamo considerare quando sviluppiamo le nostre applicazioni.
strip_tag PHP
Le funzioni strip_tags rimuovono HTML, JavaCopione o 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, cerca l'URLhttp://localhost/phptuts/comments.php
Supponiamo che tu riceva quanto segue come input utente alert(‘Your site sucks!’);
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Passare all'URL http://localhost/phptuts/comments.php
Proteggiamo ora la nostra applicazione da tali attacchi utilizzando la funzione strip_tags.
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo strip_tags($user_input); ?>
Passare all'URL http://localhost/phptuts/comments.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.
Controllare questo collegamento per il riferimento completo filtro_var
Il codice è per il sistema di commenti.
Utilizza la funzione filter_var e la costante FILTER_SANITIZE_STRIPPED per rimuovere i tag.
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo filter_var($user_input, FILTER_SANITIZE_STRIPPED); ?>
Produzione:
alert('Your site sucks!');
Funzione mysqli_real_escape_string Questa funzione viene utilizzata per proteggere un'applicazione dall'SQL injection.
Supponiamo di avere la seguente istruzione SQL per convalidare l'ID utente e la password.
<?php SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass'; ?>
Un utente malintenzionato può immettere il seguente codice nella casella di testo dell'ID utente. ' O 1 = 1 — E 1234 nella casella di testo della password Codifichiamo il modulo di autenticazione
<?php $uid = "' OR 1 = 1 -- "; $pwd = "1234"; $sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';"; echo $sql; ?>
Il risultato finale sarà
SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';
QUI,
- “SELECT * FROM users WHERE user_id = ”” verifica un ID utente vuoto
- “' OR 1 = 1 “ è una condizione che sarà sempre vera
- "-" commenta la parte che verifica la password.
La query precedente restituirà tutti gli utenti. Usiamo ora la funzione mysqli_real_escape_string per proteggere il nostro modulo di accesso.
<?php $uid = mysqli_real_escape_string("' OR 1 = 1 -- "); $pwd = mysqli_real_escape_string("1234"); $sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';"; echo $sql; ?>
Verrà visualizzato il codice precedente
SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';
Note: per noi è stato eseguito l'escape della seconda virgoletta singola, verrà trattata come parte dell'ID utente e la password non verrà commentata.
PHP Md5 e PHP sha1
Md5 è l'acronimo di Message Digest 5 e sha1 è l'acronimo di Secure Hash Algorithm 1.
Entrambi sono usati per crittografare le stringhe.
Una volta che una stringa è stata crittografata, è noioso decrittografarla.
Md5 e sha1 sono molto utili quando si memorizzano le password nel database.
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 hash.php nella cartella phptuts, cerca l'URL
Come puoi vedere dagli hash sopra, se un utente malintenzionato avesse accesso al tuo database, non conoscerebbe comunque le password per accedere.
Sommario
- La sicurezza si riferisce alle misure messe in atto per proteggere un'applicazione da attacchi accidentali e dannosi.
- La funzione strip_tags viene utilizzata per rimuovere tag come dai dati di input
- La funzione filter_var convalida e php disinfetta i dati di input
- mysqli_real_escape_string viene utilizzato per disinfettare l'istruzione SQL. Rimuove i caratteri dannosi dalle dichiarazioni
- sia MD5 che SHA1 vengono utilizzati per crittografare la password.