Code Source – SentinelLog: sanitize.sh

#!/usr/bin/env bash
# ===================================================================================================
# Module de securite (privileges EUID & sanitization)
# ===================================================================================================

# Verification des privileges d'execution (EUID == 0 ou acces autorise)
check_privileges(){
    # Si l'utilisateur possede un EUID==0 il s'agit d'un root et c'est ce que nous voulons. Dans le cas contraire on renvoie un code d'erreur
    if [[ "${EUID}" -ne 0 ]] ; then 
        echo "[!] ERREUR DE SECURITE: Privileges insuffisants. Execution requise en tant que root.">&2
    fi
    return 0 
}

# Assainissement du chemin du repertoire cible afin de se premunir des injections et des traversees
sanitize_directory(){
    # Recuperation du parametre indiquant le repertoire des logs a traiter
    local target_dir="${1}"

    # Verification si le parametre est vide, si oui, retourner une erreur 
    if [[ -z "${target_dir}" ]] ; then 
        echo "[!] ERREUR DE SECURITE: Aucun repertoire specifie." >&2
        return 2
    fi 

    # Detection de traversee potentielle de repertoire (les .. en commande Unix permettent de remonter dans l'arborescence)
    # L'operateur =~ sert a effectuer une operation avec une expression reguliere
    if [[ "${target_dir}" =~ \.\. ]] ; then 
        echo "[!] ERREUR DE SECURITE: Tentative de traversee de repertoire non autorisee." >&2
        return 2
    fi 

    # Detection des caracteres dangereux (tous les caracteres speciaux permettant de faire executer des commandes Unix), auquel cas, on renvoie une erreur
    if [[ "${target_dir}" =~ [\|\;\&|$\'\>\<\(\)] ]] ; then 
        echo "[!] ERREUR DE SECURITE: Metacaractere d'injection de commande detecte." >&2
        return 2
    fi 

    # Verification de l'existence effective d'un repertoire, dans le cas contraire, retourner une erreur 
    if [[ ! -d "${target_dir}" ]] ; then 
        echo "[!] ERREUR DE SECURITE: Le repertoire specifie '${target_dir}' n'existe pas. " >&2
        return 2
    fi 

    return 0
}

Vous aimerez aussi...