「ローカル変数を有効にする」安全な方法は?


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-variablest(デフォルト)に設定されている場合、Emacsは自動的に安全な値を設定し、ファイルが安全でない値を設定しようとすると確認を求めます。ユーザーが特定の変数の値を承認すると、これは自動的に記録され、Emacsは同じ変数の同じ値について再度尋ねません。
  • enable-local-variablesがに設定されている場合:safe、Emacsは自動的に安全な値を設定し、他の値を無視します。

したがって、プロンプトが表示されても構わない場合はデフォルト設定を維持するか、または(setq enable-local-variables :safe)リスクやユーザーインターフェイスの侵害なしに共通の利点(インデントスタイル、タイムスタンプ形式など)を取得するために使用 できます。


(完全
ShreevatsaR

9

Emacsはローカル変数に関してはかなり安全です。実際には、ファイルまたはディレクトリのローカル変数については何も評価せず、Lisp構文のみを解析します。また、変数はEmacsによって設定される前に「安全」と宣言する必要があり、その宣言には述語も含まれます。したがって、変数は「ファイルはこれを設定できますが、文字列である場合のみ」と言うことができます。

これは、ローカル変数を安全に有効にできることを意味します。実際にはデフォルト値のままにしておくことができますt。Emacsは、安全とはみなさない変数を設定する必要があるかどうかを尋ねます。最初にそれらを調べることができます。

あなたがないことを確認しないと、この変数を設定:allし、行う最初のEmacsがあなたを尋ねられた場合、それらを設定する前に変数の値を見て。:safeEmacsが安全であるとみなし、残りを無視する変数のみを設定するために使用できますが、この方法でいくつかのことを逃すことができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.