ADNKRONOS

Tecnologia

Amazon Books

WallPapers

Driver Image Banner 728 x 90

Indice articoli

 

 

Sicurezza del Filesystem

Il PHP è soggetto alle misure di sicurezza implicite nella maggior parte dei server basate sul rispetto dei permessi per i files e le directory.

Questo consente di controllare quali file del filesystem possono essere letti.

Occorre porre attenzione che tutti i file disponibili in lettura sul web siano in lettura anche per tutti gli user che hanno accesso al file system.

Poiché il PHP è stato progettato per consentire l'accesso al filesystem a livello di user, è possibile scrivere in PHP degli script che consentono di leggere i system files come /etc/passwd oppure che modificano le connessioni ethernet, inviano pesanti job di stampa, etc

Le implicazioni di questo debbono far si che noi ci assicuriamo che i files che ciascuno legge e scrive siano quelli corretti.

Considerate il seguente script, dove uno user indica che desidererebbe cancellare un file nella sua home directory. Questo assume una situazione dove il PHP è usato per gestire i file per mezzo di un interfaccia web, questo significa che l'utente Apache è abilitato a cancellare file nella sua home directory.

Esempio 1. Un controllo scarso sulle variabili in input porta a...

<?php

// cancella un file dalla home dello user

$username = $_POST['user_submitted_name'];

$homedir = "/home/$username";

$file_to_delete = "$userfile";

unlink ($homedir/$userfile);

echo "$file_to_delete è stato cancellato!";

?>

 

Poiché lo username è inseribile da un form, è possibile richiedere la cancellazione del file con lo username di un altro. In questo caso è opportuno utilizzare una qualche forma di autenticazione.

Considerate cosa può succedere se il file di cui si richiede la cancellazione è /etc/passwd.

Esempio 2. ...attacco al filesystem

<?php

// cancella ida qualche parte del disco fisso

// a cui ha accesso lo user PHP. Se PHP ha accesso come root :

$username = "../etc/";

$homedir = "/home/../etc/";

$file_to_delete = "passwd";

unlink ("/home/../etc/passwd");

echo "/home/../etc/passwd has been deleted!";

?>

ecco un esempio di script più sicuro

Esempio 3. controllo più sicuro sul file name

<?php

// cancella un file dal disco fisso

// in cui il PHP ha accesso.

$username = $_SERVER['REMOTE_USER']; // using an authentication mechanisim

$homedir = "/home/$username";

$file_to_delete = basename("$userfile"); // strip paths

unlink ($homedir/$file_to_delete);

$fp = fopen("/home/logging/filedelete.log","+a"); //log the deletion

$logstring = "$username $homedir $file_to_delete";

fputs ($fp, $logstring);

fclose ($fp);

echo "$file_to_delete has been deleted!";

?>

Comunque anche questo script non è esente da problemi. Se il vostro sistema di autenticazione consente, agli user, di creare i propri login di user e un user sceglie il login "../etc/", il sistema è nuovamente esposto. per questa ragione è meglio realizzare un sistema di controllo più raffinato:

 

Esempio 4. un controllo ancora più sicuro sul file name

<? php

$username = $_SERVER['REMOTE_USER']; // using an authentication mechanisim

$homedir = "/home/$username";

if (!ereg('^[^./][^/]*$', $userfile))

die('bad filename'); //die, do not process

if (!ereg('^[^./][^/]*$', $username))

die('bad username'); //die, do not process

//etc...

?>

A seconda del vostro sistema operativo, c'è una gran varietà di files a cui prestare attenzione inclusi i file di descrizione dei devices (/dev/ o COM1), i file di configurazione (i file contenuti in /etc/ e .ini), e aree di memorizzazione dati (/home, My Documents), etc. Per questa ragione è meglio adottare una politica di sicurezza in cui è proibito tutto ciò che non è esplicitamente ammesso.

Sicurezza per i database

Oggigiorno, i database sono il componente cardine di qualsiasi applicazione web che voglia fornire contenuti dinamici.

Poiché nei database possono essere contenuti dati molto sensibili e/o riservati bisogna considerare attentamente la loro protezione.

Per cercare o memorizzare qualsiasi informazione, occorre connettersi al database, sottomettere un query appropriata, prendere i risultati e chiudere la connessione.

Attualmente il linguaggio più comunemente usato per interagire con i database e l' SQL (Structured Query Language).

Vediamo ora come un attaccante possa infiltrarsi nel nostro database con una query SQL.

Come avrete compreso, il PHP non può proteggere il vostro database da solo.

Qui di seguito vi introdurremo alle tecniche di base su come manipolare database con gli script PHP.

Tenete in mente questa regola semplice: difesa profonda.

Inserite in più punti le azioni per aumentare la protezione e più sarà difficile per un attaccante raggiungere il suo scopo.

Un buon design dello schema del database e delle applicazioni è il trattamento per i vostri timori.