Rust Security

前因: Java Security


之前看 Java Security, 在想 像 現代語言 Rust,  是否也有類似 C++ 

的 arbitrary casting 所產生的問題, 做了實驗如下:

    Github - Rust 測試程式


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. 

可以稍稍了解型態轉換對安全性的重要. 



留言

熱門文章