第 15 集:作者:臺北市中正區的 Joe Mason (2020 年 11 月)
上一集
Chrome 是涵蓋許多子系統的大型專案,開發人員常會找到程式碼 為某個元件撰寫而成,在其他地方也很實用,但或許會隱藏 以及為了安全起見,請限制外部人士存取危險功能。 例如,根據特定效能需求調整的自訂函式:
// Blazing fast for 2-char strings, O(n^3) otherwise.
std::string ConcatShortStringsFast(const std::string& a, const std::string& b);
限制存取的方式有好幾種。GN 瀏覽權限規則停止程式碼 或排除在元件外。預設目標為 所有參與者都能看到,但您可以修改以下內容:
# In components/restricted_component/BUILD.gn
visibility = [
# Applies to all targets in this file.
# Only the given targets can depend on them.
"//components/restricted_component:*",
"//components/authorized_other_component:a_single_target",
]
source_set("internal") {
# This dangerous target should be locked down even more.
visibility = [ "//components/restricted_component:privileged_target" ]
}
瀏覽權限宣告會透過 gn check
進行驗證,而該宣告會做為
所有 GN 版本提供的容器
另一個機制是 DEPS include_rules
,這會限制標頭檔案的存取權。
每個目錄都會沿用父項的 include_rules
,而且可以修改這些目錄
寫入自己的 DEPS
檔案外部納入的所有標頭檔案
目錄必須套用 include_rules
的允許,
# In //components/authorized_other_component/DEPS
include_rules = [
# Common directories like //base are inherited from
# //components/DEPS or //DEPS. Also allow includes from
# restricted_component, but not restricted_component/internal.
"+components/restricted_component",
"-components/restricted_component/internal",
# But do allow a single header from internal, for testing.
"+components/restricted_component/internal/test_support.h",
]
為確保這些依附元件正常運作,請進行新增目錄的變更
「include_rules
」必須經過該目錄的 OWNERS
核准。否
必須獲得核准才能使用 include_rules
限制目錄!你可以
確保每次變更元件時
都記得不使用某些
加入 include_rule
標頭即可出價。
include_rules
會送交預先提交,因此您不會看到任何
錯誤。如要在不使用 的情況下測試 include_rules
上傳中,執行 buildtools/checkdeps/checkdeps.py <directory>