J'ai hérité mon fichier .emacs d'un ami il y a environ 18 ans. Enterré au milieu se trouve l'avertissement inquiétant suivant sur les implications de sécurité de la enable-local-variables
fonctionnalité:
;; Date: Wed, 7 Dec 1994 11:57:50 -0600
;; From: [email protected] (David Blob)
;; Subject: Self-extracting emacs elisp code
;;
;; With all this talk about self extracting mail "viruses", a friend
;; showed me that in emacs (which I use to read mail, along with vm)
;; has the ability to self-extract elisp code. This feature seems to
;; be turned on by default, and it not only applies to mail read with
;; emacs, but rather every file visited (when the feature is on, of
;; course).
;;
;; The way it works is by having a line which reads "Local Variables:"
;; followed by the lisp variables you would like to set...well, it may
;; seem petty, but you can execute programs, make connections and much
;; more through cleverly written elisp code contained within.
;;
;; It's simple to turn off, at any rate...
;;
;; (setq enable-local-variables f) ;; turns off feature (in emacs 19)
;; (setq enable-local-variables 1) ;; makes it ask first (in emacs 19)
;; (setq inhibit-local-variables t) ;; turns off feature (in emacs 18)
;;
;; Anyhow, I think the risks here speak for themselves...
;;
(setq enable-local-variables '())
Je n'ai donc jamais réellement utilisé la local-variables
fonctionnalité même si elle semble être très utile. Existe-t-il un moyen de faire enable-local-variables
quelque chose d'utile sans m'exposer à des attaques arbitraires par injection de code?
la source
Emacs est assez sûr en ce qui concerne les variables locales. Il n'évalue en fait rien pour les variables locales de fichier ou de répertoire, il analyse uniquement la syntaxe Lisp. De plus, une variable doit être déclarée "sûre" avant d'être définie par Emacs, et cette déclaration inclut également un prédicat. Ainsi, une variable peut dire "un fichier peut définir cela, mais seulement s'il s'agit d'une chaîne".
Cela signifie que vous pouvez activer en toute sécurité les variables locales. Vous pouvez en fait simplement laisser la valeur par défaut de
t
- Emacs vous demandera s'il doit définir des variables qu'il ne juge pas sûres, et vous pouvez les examiner en premier.Assurez-vous de ne pas définir cette variable
:all
, et faire examiner les valeurs des variables avant de les mettre si Emacs vous demande. Vous pouvez utiliser:safe
uniquement pour définir des variables qu'Emacs juge sûres et ignorer le reste, mais vous pouvez passer à côté de certaines choses de cette façon.la source