Kobako:為什麼沙盒裡刻意沒有時間?
當我們把 RPC、Handle、Block 等機制完成後,已經是一個很好用的 mruby 腳本環境,但是作為沙盒(Sandbox)最關鍵的能力就是「安全性」也就是執行任意腳本時,都當作有危險去看待,那麼就需要有各種防禦情境。
當我們把 RPC、Handle、Block 等機制完成後,已經是一個很好用的 mruby 腳本環境,但是作為沙盒(Sandbox)最關鍵的能力就是「安全性」也就是執行任意腳本時,都當作有危險去看待,那麼就需要有各種防禦情境。
Kobako:Handle 機制對許多支援腳本語言的專案並不算太特殊的機制,但是 Block 概念算是 Ruby 語言特有的能力,如果使用沙盒(Sandbox)時無法善用,那就太可惜。
然而,像這樣的寫法真的做得到嗎?
1sandbox.bind("Seq::Map", ->(items, &blk) { items.map(&blk) })
2sandbox.eval("Seq::Map.call([1, 2, 3]) { |x| x * 2 }").value
3
4# => [2, 4, 6]我們竟然可以在沙盒裡面用一個 Block 接收外部的呼叫。
最近因為工作的關係稍微回顧了一下 Open Policy Agent 而發現了 AWS 推出的 Cedar Language 更適合在軟體應用上實現類似 AWS IAM 的 Policy(政策)機制,因為是以 Rust 為基底,為了讓 Ruby 可以使用,就決定嘗試使用 Rust 來撰寫 Extension。