วิธีที่ปลอดภัยในการเปิดใช้งานตัวแปรในท้องถิ่น?


13

ฉันรับไฟล์. emacs ของฉันจากเพื่อนเมื่อประมาณ 18 ปีที่แล้ว ฝังอยู่ตรงกลางคือคำเตือนความคิดเห็นลางสังหรณ์ต่อไปนี้เกี่ยวกับผลกระทบด้านความปลอดภัยของ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 ไม่ได้ทำอะไรเป็นพิเศษค่าทั้งหมดจะถือว่าไม่ปลอดภัย
  • หากenable-local-variablesตั้งค่าเป็นt(ค่าเริ่มต้น) Emacs จะตั้งค่าที่ปลอดภัยและแจ้งให้ยืนยันโดยอัตโนมัติหากไฟล์พยายามตั้งค่าที่ไม่ปลอดภัย เมื่อผู้ใช้ได้อนุมัติค่าสำหรับตัวแปรที่กำหนดสิ่งนี้จะถูกบันทึกโดยอัตโนมัติและ Emacs จะไม่ถามอีกครั้งเกี่ยวกับค่าเดียวกันสำหรับตัวแปรเดียวกัน
  • หากenable-local-variablesตั้งค่าเป็น:safeEmacs จะตั้งค่าความปลอดภัยโดยอัตโนมัติและไม่สนใจค่าอื่น ๆ

ดังนั้นคุณสามารถคงการตั้งค่าเริ่มต้นไว้หากคุณไม่ได้รับแจ้งหรือใช้ (setq enable-local-variables :safe)เพื่อรับผลประโยชน์ร่วมกัน (สไตล์เยื้อง, รูปแบบเวลาประทับ ฯลฯ ) โดยไม่มีความเสี่ยงและไม่มีการบุกรุกส่วนต่อประสานกับผู้ใช้


(เพื่อความสมบูรณ์ / ในกรณีที่มีคนอยากรู้อยากเห็น: Emacs 22 เปิดตัวในปี 2007)
ShreevatsaR

9

Emacs ค่อนข้างปลอดภัยเมื่อพูดถึงตัวแปรท้องถิ่น มันไม่ได้ประเมินอะไรเลยสำหรับตัวแปรไฟล์ - หรือไดเรกทอรีไดเร็กตอรี่แยกวิเคราะห์เฉพาะไวยากรณ์ Lisp นอกจากนี้ตัวแปรจะต้องประกาศว่า "ปลอดภัย" ก่อนที่จะมีการตั้งค่าโดย Emacs และการประกาศนั้นยังรวมถึงภาคแสดงด้วย ดังนั้นตัวแปรสามารถพูดว่า "ไฟล์อาจตั้งค่านี้ แต่ถ้ามันเป็นสตริง"

ซึ่งหมายความว่าคุณสามารถเปิดใช้งานตัวแปรท้องถิ่นได้อย่างปลอดภัย คุณสามารถปล่อยให้เป็นค่าเริ่มต้นของt- Emacs จะถามคุณว่าควรจะตั้งค่าตัวแปรที่ไม่ปลอดภัยหรือไม่และคุณสามารถตรวจสอบได้ก่อน

ตรวจสอบให้แน่ใจว่าคุณไม่ได้ตั้งค่าตัวแปรนี้เป็น:allและอย่าลืมดูค่าของตัวแปรก่อนที่จะตั้งค่าหาก Emacs ถามคุณ คุณสามารถใช้:safeเพื่อตั้งค่าตัวแปรที่ Emacs เห็นว่าปลอดภัยและไม่สนใจส่วนที่เหลือ แต่คุณสามารถพลาดบางสิ่งด้วยวิธีนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.