Migliora la sicurezza delle nostre applicazioni con PHP

Sommario
PHP emerso come un linguaggio versatile che ci permette di manipolare i dati inseriti attraverso un form HTMLOvviamente all'interno della sua costituzione ci sono più strumenti e capacità oltre a questo.
La versatilità e la semplicità di utilizzo ne fanno uno dei linguaggi più utilizzati a livello mondiale per progetti web che spaziano da semplici moduli di contatto, ad essere all'inizio la base di grandi applicazioni come Facebook.
Il problema con la versatilità e la facilità d'uso è che lo sviluppatore non è costretto a scrivere codice sicuro, ma con funzionalità molto insicure il codice funzionerà perfettamente, ed è qui che arrivano i problemi.
La sicurezza delle applicazioni Web è qualcosa che non hai fin dall'inizio in PHPTuttavia, questo non lo rende un linguaggio insicuro, poiché la sicurezza corrisponde a un insieme di tecniche e stili di lavoro che un programmatore deve conoscere per poterli applicare ai propri script.
QuadriÈ vero che con la comparsa di quadri Molte funzionalità di sicurezza sono incluse per impostazione predefinita, tuttavia non tutti gli sviluppatori hanno utilizzato un struttura nelle applicazioni più vecchie ed è possibile che per alcune funzioni utilizzi a struttura essere un eccesso.
Le chiavi per raggiungere la sicurezza nelle nostre applicazioni con PHP Sono: controllare e perfezionare i dati che l'utente inserisce nel form, verificare l'origine delle richieste HTTP che la nostra applicazione riceve, e infine evitare l'esecuzione diretta di istruzioni tramite moduli.
C'è una regola nella programmazione ed è universale, cioè non si applica solo a PHPÈ che tutti i dati che non vengono generati dall'applicazione sono potenzialmente dannosi, questo significa che se non è qualcosa che è un risultato che abbiamo programmato non possiamo fidarci.
Questo principio si applica ai valori del modulo, ai file, Banche dati, quindi un primo passo per migliorare la nostra sicurezza è filtrare i dati se dobbiamo interagire con questi elementi.
Elencheremo alcune delle migliori pratiche che possiamo applicare quando filtriamo i dati che vengono inseriti nel nostro modulo:
Usa elenchi di valori consentitiCon questa pratica sappiamo che se i dati che arrivano attraverso il form non passano attraverso la nostra lista di valori consentiti e sicuri, non dovrebbe andare in elaborazione, a questo punto deve essere inviato un messaggio all'utente per correggere i propri dati.
Non correggere mai i dati non validiPuò sembrare allettante creare un sistema molto intelligente che corregga i dati con incongruenze, ma a lungo termine questo può portarci problemi e vulnerabilità, ecco perché se rileviamo qualcosa di irregolare non dovremmo elaborarlo.
Usa la convenzione di denominazioneCon questa pratica possiamo distinguere i dati e i valori sicuri da quei dati e valori inseriti dall'utente, con questo rafforzeremo all'interno della programmazione l'uso dei primi per l'elaborazione.
C'è due tipi di filtraggio che possiamo fare, il primo è di valori che conosciamo e il secondo di valori che non conosciamo.
Il primo È molto facile da fare, dobbiamo solo eseguire routine con elenchi di elementi noti e confrontarli, tuttavia questo è ingombrante e difficile da eseguire in applicazioni più grandi. Il secondo Implica la creazione di routine che valutino la struttura del valore e se corrisponde a quello che consideriamo sicuro, lo lasciamo andare in elaborazione, altrimenti lanciamo un errore, essendo di natura dinamica questo è il formato consigliato.
Vediamo di seguito un codice di esempio del primo tipo di filtraggio:
Nel codice seguente vedremo come creiamo un form che ha un elemento Selezionare Affinché l'utente selezioni un colore, poiché l'utente non deve scrivere i dati per entrare direttamente, possiamo cadere nell'errore di non convalidare le informazioni, ma questo significa solo che abbiamo una lacuna di sicurezza poiché con un modulo che si applica gli stessi nomi possiamo ricevere informazioni potenzialmente pericolose.
Ecco perché una volta inviato il valore del modulo INVIARE, il nostro script valuta i valori possibili e, nel caso sia uno di quelli previsti, lo passiamo al nostro array di valori sicuri come vediamo di seguito.

Con questo abbiamo risolto il problema in modo semplice, tuttavia se la lista invece di avere tre colori avesse avuto cento, la storia della semplicità sarebbe stata diversa.
Nel seguente esempio convalideremo dinamicamente un campo inserito dall'utente in modo appropriato, per questo dobbiamo usare espressioni regolari ed in questo modo evitiamo l'inserimento di caratteri che mettano a rischio la nostra elaborazione, valutiamo anche la grandezza dell'inserimento ed evitiamo così a straripamento o sovraccarico del nostro tipo di dati nell'elaborazione del programma. Vediamo il codice nell'immagine:

INGRANDIRE

Qui la chiave per ottenere la convalida è sapere correttamente cosa vogliamo elaborare, ad esempio nel caso di un nome utente, ciò che normalmente chiediamo sono caratteri alfanumerici e trattini, ecco perché nel frase normale Convalidiamo questo, abbiamo anche bisogno che sia maggiore di 0 caratteri e un massimo di 32, se ciò che viene inserito dall'utente soddisfa tutto questo, passa la convalida, la cosa migliore è che funziona con un valore come cento, poiché è totalmente dinamico.
Un'altra minaccia contro la quale dobbiamo proteggerci è l'esecuzione di script da altri siti, grazie a AJAX Possiamo inviare moduli dal cliente a un percorso, incluso il tipo di richiesta e i valori che desideriamo.
Punto morbidoQuesto tipo di debolezza rende molto facile per qualcuno ispezionare il nostro modulo e controllare i nostri campi, dove possedendo questi nomi e il metodo HTTP Prova a inviare valori non sicuri, per evitare ciò dobbiamo applicare tecniche che ci permettano di convalidare da dove proviene la richiesta e se è sicuro consentirne l'esecuzione, altrimenti evita di continuare il percorso all'interno del nostro programma.
Per evitare questo problema, un sistema di gettonisessioni, in modo che all'invio del form valutiamo se la sessione è uguale a quella stabilita in modo sicuro, e quindi l'utente malintenzionato non può continuare.
Un obiettivo chiave di un utente malintenzionato è quello di poter inserire il suo codice nel nostro ambiente, per questo usano le iniezioni di codice SQL, questo attacco è noto come SQL Injection, dove con moduli non protetti e trattamento improprio, potremmo ricevere istruzioni SQL direttamente senza limiti. Ad esempio se la nostra valutazione SQL è il seguente nel nostro script PHP:

Possiamo utilizzare qualsiasi utente del sistema come nome utente e per il parola d'ordine usiamo due script “--” con questo possiamo passare la sicurezza senza problemi, poiché due script sono un commento SQL e quindi la password non verrà valutata.
Il modo corretto per valutare un SQL che proviene dall'utente, rimuove i caratteri speciali e pericolosi, valutando solo le espressioni sicure. Vediamo un esempio di seguito di come evitare il caso precedente:
La prima cosa che dobbiamo fare è un sanificazione dei dati, cioè impedirgli di arrivare puro dalla forma al nostro SQL; La seconda cosa che dobbiamo valutare è che se i due valori corrispondono per dare accesso, ma quest'ultimo corrisponde alla logica di ciascuno, vediamo nell'immagine come raggiungiamo l'obiettivo:

INGRANDIRE

Qui quello che abbiamo fatto è usare lo strumento dichiarazioni preparate cosa ci permette la libreria DOP per il collegamento a Banca dati, con ciò otteniamo che ciò che viene inserito non viene mai portato in un altro contesto che non siano i dati, vediamo anche che invece di utilizzare il metodo INVIARE Abbiamo utilizzato il nostro array sicuro, questo significa che i nostri dati sono già verificati, quindi il rischio è inferiore.
Con questo abbiamo terminato questo tutorial, poiché vediamo che le azioni che possiamo intraprendere per rendere la nostra applicazione più sicura sono semplici, non richiedono uno sforzo umano, tuttavia ci aiutano a evitare gli attacchi più comuni e forse quelli più frequenti .sono dati. C'è una cattiva percezione su PHP di chi dice che è un linguaggio insicuro, ma la realtà è che l'insicurezza è prodotta dal programmatore, poiché il linguaggio ha solo strumenti che possiamo utilizzare per migliorare e prevenire attacchi alle nostre applicazioni attraverso i dati inseriti dall'utente.
wave wave wave wave wave