지역 변수를 활성화하는 안전한 방법?


13

약 18 년 전에 친구로부터 .emacs 파일을 물려 받았습니다. 이 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임의의 코드 주입 공격에 노출시키지 않고 유용한 방법이 있습니까?

답변:


13

18 년 전, 당신은 걱정할 권리가있었습니다. 그러나 시간이 걸렸다. Emacs 22부터 안전한 지역 변수를 허용하는 적절한 내장 메커니즘이 있습니다. 자세한 내용은 Emacs Lisp 매뉴얼에 설명되어 있습니다. 가장 중요한 측면은 다음과 같습니다.

  • Lisp 작성자는 각 변수에 안전한 값을 선언 할 수 있습니다. 이것은 화이트리스트입니다. Lisp 프로그래머가 특별한 작업을 수행하지 않으면 모든 값이 안전하지 않은 것으로 간주됩니다.
  • 경우 enable-local-variables로 설정 t(기본) 파일 시도가 안전하지 않은 값을 설정하면, 이맥스는 자동으로 확인을 위해 안전의 가치와 프롬프트를 설정합니다. 사용자가 주어진 변수에 대한 값을 승인하면이 변수가 자동으로 기록되며 Emacs는 동일한 변수에 대해 동일한 값에 대해 다시 묻지 않습니다.
  • 경우 enable-local-variables로 설정되어 :safe, 이맥스는 자동으로 안전한 값을 설정하고 다른 사람을 무시합니다.

따라서 메시지가 마음에 들지 않으면 기본 설정을 유지하거나 (setq enable-local-variables :safe)위험이없고 사용자 인터페이스 침해없이 일반적인 이점 (들여 쓰기 스타일, 타임 스탬프 형식 등)을 얻는 데 사용할 수 있습니다.


(완성도를 들어 / 경우에 사람이 호기심 : 이맥스 (22)는 2007 년에 발표 된)
ShreevatsaR

9

이맥스는 지역 변수와 관련하여 매우 안전합니다. 실제로 파일 또는 디렉토리 로컬 변수에 대해서는 아무것도 평가하지 않으며 Lisp 구문 만 구문 분석합니다. 또한 변수는 Emacs에 의해 설정되기 전에 "안전한"것으로 선언되어야하며, 그 선언에는 술어도 포함됩니다. 따라서 변수는 "파일이 이것을 설정할 수 있지만 문자열 인 경우에만"이라고 말할 수 있습니다.

이는 로컬 변수를 안전하게 활성화 할 수 있음을 의미합니다. 실제로는 기본값을 그대로 두어도 t됩니다. – Emacs는 안전하지 않은 변수를 설정해야하는지 묻고 먼저 검사 할 수 있습니다.

당신이 있는지 확인 하지 이 변수를 설정 :all하고, 첫번째 이맥스를 묻는 경우를 설정하기 전에 변수의 값에 모습을. :safeEmacs가 안전하다고 간주하고 나머지를 무시하는 변수 만 설정 하는 데 사용할 수 있지만 이런 식으로 몇 가지를 놓칠 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.