Cách an toàn để `enable-local-biến`?


13

Tôi đã thừa hưởng tệp .emacs của mình từ một người bạn khoảng 18 năm trước. Chôn ở giữa là cảnh báo bình luận đáng ngại sau đây về ý nghĩa bảo mật của enable-local-variablestính năng:

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

Vì vậy, tôi chưa bao giờ thực sự sử dụng local-variablestính năng này mặc dù có vẻ như nó có thể khá hữu ích. Có cách nào để enable-local-variableslàm điều gì đó hữu ích mà không khiến tôi bị tấn công bằng cách tiêm mã tùy ý không?

Câu trả lời:


13

18 năm trước, bạn đã đúng khi lo lắng. Nhưng thời gian đã trôi qua. Kể từ Emacs 22, có một cơ chế tích hợp khá để liệt kê các biến cục bộ an toàn. Các chi tiết được ghi lại trong hướng dẫn sử dụng Emacs Lisp . Các khía cạnh quan trọng nhất là:

  • Tác giả Lisp có thể khai báo các giá trị an toàn cho mỗi biến. Đây là một danh sách trắng: nếu lập trình viên Lisp không làm gì đặc biệt, tất cả các giá trị được coi là không an toàn.
  • Nếu enable-local-variablesđược đặt thành t(mặc định), Emacs sẽ tự động đặt các giá trị an toàn và lời nhắc xác nhận nếu một tệp cố gắng đặt giá trị không an toàn. Khi người dùng đã phê duyệt một giá trị cho một biến nhất định, điều này sẽ tự động được ghi lại và Emacs sẽ không hỏi lại về cùng một giá trị cho cùng một biến.
  • Nếu enable-local-variablesđược đặt thành :safe, Emacs sẽ tự động đặt các giá trị an toàn và bỏ qua các giá trị khác.

Vì vậy, bạn có thể giữ cài đặt mặc định nếu bạn không bị nhắc nhở hoặc sử dụng (setq enable-local-variables :safe)để nhận các lợi ích chung (kiểu thụt lề, định dạng dấu thời gian, v.v.) không có rủi ro và không bị lấn chiếm giao diện người dùng.


(Để hoàn thiện / trong trường hợp bất kỳ ai cũng tò mò: Emacs 22 đã được phát hành vào năm 2007)
ShreevatsaR

9

Emacs khá an toàn khi nói đến các biến cục bộ. Nó không thực sự đánh giá bất cứ điều gì cho các biến tệp-thư mục hoặc cục bộ, nó chỉ phân tích cú pháp Lisp. Ngoài ra, một biến phải được khai báo là "an toàn" trước khi nó được đặt bởi Emacs và khai báo đó cũng bao gồm một biến vị ngữ. Vì vậy, một biến có thể nói "một tệp có thể đặt điều này, nhưng chỉ khi đó là một chuỗi".

Điều này có nghĩa là bạn có thể kích hoạt các biến cục bộ một cách an toàn. Bạn thực sự có thể để lại giá trị mặc định của t- Emacs sẽ hỏi bạn về việc liệu nó có nên đặt các biến mà nó không cho là an toàn hay không và bạn có thể kiểm tra các biến đó trước.

Hãy chắc chắn rằng bạn không đặt biến này đến :all, và làm nhìn vào giá trị của các biến đầu tiên trước khi thiết lập chúng nếu Emacs yêu cầu bạn. Bạn có thể sử dụng :safeđể chỉ đặt các biến mà Emacs thấy an toàn và bỏ qua phần còn lại, nhưng bạn có thể bỏ lỡ một số nội dung theo cách này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.