Yerel değişkenleri etkinleştirmenin güvenli bir yolu var mı?


13

.Emacs dosyamı yaklaşık 18 yıl önce bir arkadaşımdan miras aldım. Ortada gömülü olan, enable-local-variablesözelliğin güvenlik üzerindeki etkileri hakkında aşağıdaki uğursuz yorum uyarısıdır :

;; 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 '())

Bu yüzden, local-variablesözelliği oldukça kullanışlı gibi görünse bile aslında hiç kullanmadım . Bunun enable-local-variableskeyfi kod enjeksiyon saldırılarına maruz kalmadan faydalı bir şey yapmasının bir yolu var mı ?

Yanıtlar:


13

18 yıl önce endişelenmeye haklıydınız. Ama zaman ilerledi. Emacs 22'den bu yana, güvenli yerel değişkenleri beyaz listeye eklemek için iyi bir yerleşik mekanizma vardır. Ayrıntılar Emacs Lisp kılavuzunda belgelenmiştir . En önemli hususlar:

  • Lisp yazarları her değişken için güvenli değerler bildirebilir. Bu bir beyaz liste: Lisp programcısı özel bir şey yapmadıysa, tüm değerler güvensiz kabul edilir.
  • Eğer enable-local-variablesayarlanırsa t(varsayılan) bir dosya girişimleri güvenli olmayan bir değer ayarlamak için ise, Emacs otomatik onay için güvenli değerleri ve hızlı ayarlar. Kullanıcı belirli bir değişken için bir değer onayladığında, bu otomatik olarak kaydedilir ve Emacs aynı değişken için aynı değeri tekrar sormaz.
  • Eğer enable-local-variablesayarlandığında :safe, Emacs otomatik güvenli değerlerini ayarlamak ve diğerlerini göz ardı eder.

Böylece, sorulmasını sakıncası yoksa varsayılan ayarı koruyabilir veya (setq enable-local-variables :safe)risk almadan ve kullanıcı arabirimi ihlali olmadan ortak faydalar (girinti stili, zaman damgası biçimi vb.)


(
Tamlık

9

Yerel değişkenler söz konusu olduğunda Emacs oldukça güvenlidir. Aslında dosya veya dizin-yerel değişkenleri için hiçbir şey değerlendirmez, sadece Lisp sözdizimini ayrıştırır. Ayrıca, bir değişken Emacs tarafından belirlenmeden önce "güvenli" olarak bildirilmelidir ve bu bildirim de bir yüklem içerir. Yani bir değişken "bir dosya bunu ancak bir dize ise ayarlayabilir" diyebilir.

Bu, yerel değişkenleri güvenli bir şekilde etkinleştirebileceğiniz anlamına gelir. Aslında varsayılan değerini şu şekilde bırakabilirsiniz t- Emacs, güvenli olmadığını düşündüğü değişkenleri ayarlayıp ayarlamayacağını sorar ve önce bunları inceleyebilirsiniz.

Eğer emin olun değil bu değişkeni ayarlamak :allve bunu ilk Emacs istemesi durumunda onları ayarlamadan önce değişkenlerin değerlerinde göz. Sen kullanabilirsiniz :safeEmacs güvenli gördüğü tek set değişkenlere ve gerisini görmezden, ancak bazı şeyler üzerinde bu şekilde dışarı kaçırabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.