ক্রোমিয়াম ক্রনিকল #15: লক্ষ্য দৃশ্যমানতা সীমাবদ্ধ করা

পর্ব 15: মন্ট্রিলে জো ম্যাসন দ্বারা, PQ (নভেম্বর, 2020)
আগের পর্বগুলো

ক্রোম অনেক সাব-সিস্টেম সহ একটি বড় প্রকল্প। একটি উপাদানের জন্য লিখিত কোড খুঁজে পাওয়া সাধারণ যেটি অন্যত্র উপযোগী হবে, কিন্তু লুকানো সীমাবদ্ধতা থাকতে পারে। নিরাপত্তার জন্য, বিপজ্জনক কার্যকারিতায় বাহ্যিক অ্যাক্সেস সীমিত করুন । উদাহরণস্বরূপ, নির্দিষ্ট কর্মক্ষমতা প্রয়োজনের জন্য একটি কাস্টম ফাংশন টিউন করা হয়েছে:

// 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 presubmit দ্বারা চেক করা হয় , তাই আপনি একটি পরিবর্তন আপলোড করার চেষ্টা না করা পর্যন্ত কোনো ত্রুটি দেখতে পাবেন না। আপলোড না করে include_rules পরীক্ষা করতে, buildtools/checkdeps/checkdeps.py <directory> চালান।

সম্পদ