Folge 15: von Joe Mason in Montreal, PQ (November 2020)
Vorherige Folgen
Chrome ist ein großes Projekt mit vielen Subsystemen. Häufig wird Code die an anderer Stelle nützlich sein könnten, Einschränkungen. Aus Sicherheitsgründen sollten Sie den externen Zugriff auf gefährliche Funktionen einschränken. Zum Beispiel eine benutzerdefinierte Funktion, die auf bestimmte Leistungsanforderungen abgestimmt ist:
// Blazing fast for 2-char strings, O(n^3) otherwise.
std::string ConcatShortStringsFast(const std::string& a, const std::string& b);
Es gibt mehrere Möglichkeiten, den Zugriff einzuschränken. Stoppcode für die GN-Sichtbarkeitsregeln außerhalb der Komponente von einem Ziel abhängig ist. Standardmäßig sind die Ziele für alle sichtbar, aber Sie können dies ändern:
# 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" ]
}
Deklarationen zur Sichtbarkeit werden mit gn check
validiert, das als Teil
von jedem GN-Build.
Ein weiterer Mechanismus ist DEPS include_rules
, der den Zugriff auf Headerdateien begrenzt.
Jedes Verzeichnis übernimmt die include_rules
vom übergeordneten Verzeichnis und kann diese ändern
Regeln in einer eigenen DEPS
-Datei. Alle Headerdateien von außerhalb eingeschlossen
müssen von include_rules
zugelassen sein.
# 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",
]
Um sicherzustellen, dass diese Abhängigkeiten angemessen sind, Änderungen, durch die ein Verzeichnis hinzugefügt wird,
an include_rules
muss vom OWNERS
dieses Verzeichnisses genehmigt werden. Nein
Zum Einschränken eines Verzeichnisses mit include_rules
ist eine Genehmigung erforderlich. Sie können
dass alle, die Ihre Komponente ändern, daran erinnern, bestimmte
-Header, indem Sie eine include_rule
-Anweisung für die Gebotsabgabe hinzufügen.
include_rules
werden beim Vorabsenden geprüft. Daher sehen Sie keine
bis Sie versuchen, eine Änderung hochzuladen. Zum Testen von include_rules
ohne
wird hochgeladen, buildtools/checkdeps/checkdeps.py <directory>
ausführen.