Rust Security
前因: Java Security
之前看 Java Security, 在想 像 現代語言 Rust, 是否也有類似 C++
的 arbitrary casting 所產生的問題, 做了實驗如下:
Rust 的 Visibility and Privacy 可以參考這份 Rust 官網文件
https://doc.rust-lang.org/nightly/reference/visibility-and-privacy.html
1. 如果都寫在同一個 main.rs, 在 struct 內的 private data (非宣告 pub)
也都是可以 access 的, 所以必須搬到 lib.rs 才能有 private
2. 直接引用同樣的會出現 compiler error, 這點 c++ 也是可以產生 error
Rust 相對 C 有較嚴格的型態判斷, 當型別有定義時, 型別並不會被偷偷轉換,
甚至都是整數, 只是 i8 和 i32 差異, 也都需要特別寫.
所以一般狀況在 Rust 是不大可能直接把 private data 取出來.
但如果真要做, Rust 也保留了這個彈性,
可以在同個 main 檔案下定義 structure, 在要擷取出來的 同個位置的 private data
取一個 欄位名稱.
接著用 unsafe 這個 keyword, 用 std::mem::transmute()將該 structure mapping 過來.
關於 unsafe, 可以進一步參考底下的文件.
如果進一步了解 Rust 為什麼要有這麼嚴格的型態規定, 和為何會有 unsafe 這個 keyword.
可以稍稍了解型態轉換對安全性的重要.
留言
張貼留言