ruby元編程——編寫代碼的代碼

Kernel#eval()方法,能夠直接執行ruby代碼字符串安全

(1)Kernel#binding()方法用來捕獲當前做用域返回一個Binding對象,Binding對象表示一個完整的做用域ruby

(2)eval()能夠接受兩個參數,第一個是代碼字符串,第二個是Binding對象,代碼會在傳入的做用域中執行(*eval()家族均可以)spa

(3)Ruby還提供了一個名爲TOPLEVEL_BINDING的預約義常量,他表示頂級做用域的Binding對象。能夠在程序的任何地方訪問這個頂級做用域命令行

(4) eval()方法會有兩個可選參數file和line,傳入文件路徑以及當前執行代碼行號,用於在在代碼異常時,打印出堆棧信息對象

(5)因爲代碼字符串和快很是類似,在不少狀況下,能夠選擇使用任意一種,但能用塊儘可能用塊。作用域

(6)eval()方法有代碼注入攻擊的風險,慎用字符串

(7)污染對象和安全級別:it

        污染對象包括程序從Web表單、文件盒命令行讀入的字符串,甚至包括系統變量,每次從污染字符串運算而來的新字符串,也是被污染的,能夠經過調用tainted?()方法判斷是否是被污染變量

        ruby安全級別,能夠經過修改$SAFE全局標量修改,分爲0-4,5個級別表單

        0--徹底不受約束,大於0,Ruby會拒絕執行污染的字符串,大於2,會禁止巨大部分文件相關工做

        能夠經過Object#untaint()方法去除污染

相關文章
相關標籤/搜索