Я унаследовал свой файл .emacs от друга около 18 лет назад. Посередине находится зловещий комментарий, предупреждающий о последствиях безопасности для этой enable-local-variables
функции:
;; Date: Wed, 7 Dec 1994 11:57:50 -0600
;; From: blob@syl.dl.nec.com (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 '())
Так что я никогда не использовал эту local-variables
функцию, хотя кажется, что она может быть довольно полезной. Есть ли способ сделать enable-local-variables
что-то полезное, не подвергая меня произвольным атакам с использованием кода?
источник
Emacs довольно безопасен, когда дело доходит до локальных переменных. На самом деле он ничего не оценивает для локальных переменных файлов или каталогов, он только анализирует синтаксис Lisp. Кроме того, переменная должна быть объявлена «безопасной», прежде чем она будет установлена Emacs, и это объявление также включает предикат. Таким образом, переменная может сказать «файл может установить это, но только если это строка».
Это означает, что вы можете безопасно включить локальные переменные. На самом деле вы можете просто оставить значение по умолчанию
t
- Emacs спросит вас, следует ли ему устанавливать переменные, которые он не считает безопасными, и вы можете сначала проверить их.Убедитесь , что вы не установите эту переменную
:all
, и сделать взгляд на значения переменных , прежде чем устанавливать их , если Emacs спросит вас. Вы можете использовать:safe
только те переменные, которые Emacs считает безопасными, и игнорировать остальные, но вы можете пропустить некоторые вещи таким образом.источник