Jump to content
Sign in to follow this  
tecnolive

Script SH per limitare l'upload di files con una certa estensione

Recommended Posts

Buonasera a tutti,

 

 

Mentre state ancora piangendo perchè l'Italia ha perso di brutto contro la Spagna, io scrivo questo post per condividere la mia piccola chicca riguardante il tema SICUREZZA (che non è mai poca!)...

 

 

Il problema si è presentato qualche giorno fa con uno dei nostri server... molti clienti hanno diversi script che permettono l'upload di files, ma ci siamo accorti che alcuni script erano scoperti e accessibili senza login.... nonostante questo non facevano alcun controllo sulla tipologia del file che veniva uploadato, compromettendo quindi la sicurezza degli account e anche del server... (immaginate un file php che cancella tutto :))

 

 

Ok, dopo aver valutato diverse soluzioni (disabilitare il PHP engine sulle cartelle dove venivano caricati i files, ecc) volevo risolvere il problema alla radice (ovvero fare un controllo prima che venisse caricato il file).

 

 

Ringrazio GUEST che mi ha fatto scoprire la direttiva (che comunque era obsoleta, ma è partito tutto da lì) e GRG che mi ha dato delle dritte e dei consigli che mi hanno permesso di sbloccarmi un pò (Qui il post relativo alla discussione -> http://www.hostingtalk.it/forum/gestione-server-windows-e-server-linux/26014-limitare-da-server-upload-di-certi-files.html)...

 

 

Ma partiamo subito!

 

 

Dopo aver installato il MOD_SECURITY (che non sto qui a dire come si fa) sono passato direttamente alla configurazione scrivendo queste poche righe:

 

SecRequestBodyAccess On
SecUploadFileMode 0644
SecRule FILES "@inspectFile /custom/checkFileExt.sh" "log,auditlog,deny,severity:2,id:'1010101'"

 

Poi ho creato il file checkFileExt.sh in una cartella che ho chiamato custom (nella radice root del server), e infine ecco il codice del file:

 

#!/bin/sh


############################################################
################## CHECK UPLOADER 1.0 ###############
## RELASE DATE: 01/07/2012 - Giuseppe Branchina ##############
############################################################


##CONFIGURAZIONE_______________________________________________________________
ExtNonPermesse=(php cgi sh pl perl);               #Array delle estensioni non concesse


NotificaEmail=1;                                            #0 = disabilita; 1=abilita;


EmailOggetto="Avviso di sicurezza UPLOAD";    #Oggetto
EmailTo="vostroindirizzo@email.it";                     #Email di notifica (destinatario)
EmailFrom="security@MIOSERVER.IT";             #Email mittente
NomeServer="MIOSERVER.IT";                        #Nome del server


#______________________________________________________________________________




################## NON TOCCARE NULLA ###################
nomeFile=$1;
estensione=${nomeFile##*.};
FilePermesso=1;


for i in "${ExtNonPermesse[@]}"
do
   if [ "$i" == "$estensione" ]; then
       FilePermesso=0;
   fi
done


if [ $FilePermesso = 1 ]; then
  echo "1";
else
  if [ $NotificaEmail = 1 ]; then
       DataOra=`date '+%d/%m/%Y %H:%M'`;
       mail -s $EmailOggetto $EmailTo -- -f $EmailFrom -F $NomeServer <<< "In data $DataOra, Il file $nomeFile è stato rigettato dal sistema di sicurezza del server $NomeServer";
  fi
  echo "0";
fi

 

 

 

Come vedete lo script di per se è molto semplice, ma anche molto efficace.... in pratica ogni volta che viene fatto un upload del file lui controlla se l'estensione è permessa e restituisce "0" (se non permessa), e "1" (se permessa), se restituisce 0 allora lo script verrà bloccato generando un HTTP ERROR e il file non sarà copiato nel server.

 

Questa cosa ci ha risolto finalmente il problema, perchè non dobbiamo più preoccuparci che i clienti fanno gli script che non fanno controlli, ecc ecc.......

 

Spero che sia utile a qualcuno.

 

PS. Qualcuno con più fantasia più rinominare il titolo di questo post che non mi piace? io non ho molta fantasia :D

 

Saluti =)

Edited by Antonio

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×