• # Il y a deux notions de langage securise

    Posté par . En réponse au journal Qu'est-ce qu'un langage sécurisé ?. Évalué à 3.

    A ne pas confondre:

    Dans la premiere notion, on veut surtout dire que le langage ne permet pas de faire n'importe quoi avec la memoire. Ca
    comprend le bound-checks pour les tableaux, l'interdiction de faire des type casts sans verification, interdiction des unions etc.. etc.. Une autre caracteristique des langages securises est que leur execution ne peut pas s'arreter; ce qui ne veut pas dire qu'ils ne peuvent pas boucler sans rien faire, mais qu'il ne vont pas se retrouver dans des situations bloquantes du style devoir dereferencer un pointeur illegal, ou ajouter un entier et une chaine de charactere.

    On dit qu'ils sont securises, parce que si j'ai le code source d'un programme dans un tel language, et que je l'execute,
    je sais qu'il peut pas faire de dommage (a part boucler, mais c'est facile de s'en prevenir). C'est pour ca qu'ils sont souvent utilises comme moyen de faire des extensions securisees (par exemple, le noyau du systeme d'exploitation Spring comprend un compilateur pour un language securise, permettant l'ajout dynamique d'extensions).

    En resume, dans de tels langages on sait a la compilation que le programme va se comporter "correctement".

    Dans cette notion, des languages comme CaML ou Haskell sont securises par exemple, mais pas C ou Java (ce dernier ne l'est pas notamment a cause des NullPointerException)

    Dans la deuxieme notion, on bride en quelque sorte la bibliotheque pour empecher des interactions malencontreuses avec l'exterieur. Par exemple on interdit la destruction de fichiers, les requetes SQL non verifiees.. Dans cette notion, on empeche l'interaction malheureuse du programme avec le reste du systeme d'exploitation.

    Mais a mon avis pour cette derniere notion, il serait plus approprie de parler de "fonctionnalites de securite" du langage et de ses bibliotheques, plutot que de langage securise.