Mój plik .emacs odziedziczyłem około 18 lat temu od znajomego. Pośrodku znajduje się złowieszczy komentarz ostrzegający o konsekwencjach bezpieczeństwa dla tej enable-local-variables
funkcji:
;; 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 '())
Tak naprawdę nigdy nie korzystałem z tej local-variables
funkcji, chociaż wydaje się, że może być całkiem przydatna. Czy istnieje sposób na enable-local-variables
to, aby działał coś przydatnego bez narażania mnie na ataki polegające na wstrzykiwaniu kodu?
źródło
Emacs jest dość bezpieczny, jeśli chodzi o zmienne lokalne. W rzeczywistości nie ocenia niczego dla zmiennych lokalnych plików lub katalogów, analizuje tylko składnię Lisp. Ponadto zmienną należy określić jako „bezpieczną”, zanim zostanie ustawiona przez Emacsa, a deklaracja ta zawiera także predykat. Zmienna może więc powiedzieć „plik może to ustawić, ale tylko jeśli jest to ciąg znaków”.
Oznacza to, że możesz bezpiecznie włączyć zmienne lokalne. Możesz po prostu zostawić domyślną wartość
t
- Emacs zapyta cię, czy powinien ustawić zmienne, których nie uważa za bezpieczne, i możesz je najpierw sprawdzić.Upewnij się, czy nie ustawić tę zmienną
:all
, i zrobić spojrzeć na wartości zmiennych zanim ustawiając je jeśli Emacs poprosi. Możesz użyć:safe
tylko do ustawienia zmiennych, które Emacs uważa za bezpieczne, i zignoruj resztę, ale w ten sposób możesz przegapić pewne rzeczy.źródło