Heredé mi archivo .emacs de un amigo hace unos 18 años. Enterrado en el medio está el siguiente comentario ominoso que advierte sobre las implicaciones de seguridad de la enable-local-variables
función:
;; 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 '())
Por lo tanto, nunca he usado la local-variables
función, aunque parece que podría ser bastante útil. ¿Hay alguna manera de enable-local-variables
hacer algo útil sin exponerme a ataques arbitrarios de inyección de código?
fuente
Emacs es bastante seguro cuando se trata de variables locales. En realidad, no evalúa nada para las variables locales de archivo o directorio, solo analiza la sintaxis de Lisp. Además, una variable debe declararse "segura" antes de que Emacs la establezca, y esa declaración también incluye un predicado. Entonces, una variable puede decir "un archivo puede establecer esto, pero solo si es una cadena".
Esto significa que puede habilitar de forma segura las variables locales. En realidad, puede dejar el valor predeterminado de
t
: Emacs le preguntará si debe establecer variables que no considere seguras, y puede examinarlas primero.Asegúrese de que usted no se establece esta variable a
:all
, y hace vistazo a los valores de las variables antes de definir si Emacs le pide. Puede usar:safe
solo para establecer variables que Emacs considere seguras e ignorar el resto, pero puede perderse algunas cosas de esta manera.fuente