0Pricing
JavaScript Academy · Lekcja

Bezpieczne scalanie obiektów; zamrażanie i uszczelnianie

Scalanie obiektów bez niespodzianek, unikanie prototype pollution oraz ochrona danych za pomocą Object.freeze i Object.seal

Bezpieczne scalanie obiektów; zamrażanie i uszczelnianie to bezpłatna lekcja JavaScript Academy na CoddyKit. To lekcja 2 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej JavaScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs JavaScript Academy zawiera 3 lekcji w sumie.

Dlaczego bezpieczne scalanie?

Cel: bezpiecznie scalać dane i chronić stan.

  • Płytkie scalanie za pomocą spread lub Object.assign
  • Unikanie prototype pollution przez filtrowanie kluczy
  • Używanie Object.create(null) jako bezpiecznego obiektu docelowego
  • Używanie freeze i seal do blokowania obiektów
Bezpieczne scalanie obiektów; zamrażanie i uszczelnianie — ilustracja 1

Płytkie scalanie (spread)

Należy używać spread (lub Object.assign({}, a, b)), aby utworzyć nowy obiekt; nie należy modyfikować danych wejściowych.

// Shallow merge with spread keeps sources unchanged
const a = { x: 1, y: 2 };
const b = { y: 9, z: 3 };

// Later keys win on conflicts
const merged1 = { ...a, ...b };

console.log("a:", a);
console.log("b:", b);
console.log("merged1:", merged1);
Bezpieczne scalanie obiektów; zamrażanie i uszczelnianie — ilustracja 2

Unikanie prototype pollution

Gdy klucze pochodzą z zewnątrz, należy utworzyć krótką allowlistę/denylistę i użyć Object.create(null) jako obiektu docelowego.

// Avoid prototype pollution: use a null-prototype target and skip special keys
function safeMergeUntrusted(pairs) {
  // target has no prototype
  const out = Object.create(null);

  // keys to skip
  const BLOCK = new Set(["__proto__", "prototype", "constructor"]);

  for (const [k, v] of pairs) {
    if (typeof k !== "string") continue;
    if (BLOCK.has(k)) continue;
    out[k] = v;
  }
  return out;
}

const inputPairs = [
  ["name", "Ayla"],
  ["__proto__", { hacked: true }],
  ["role", "user"]
];

const safe = safeMergeUntrusted(inputPairs);

console.log("safe.name:", safe.name);
console.log("safe.role:", safe.role);
console.log("safe.__proto__ is undefined?", safe.__proto__ === undefined);
Bezpieczne scalanie obiektów; zamrażanie i uszczelnianie — ilustracja 3

Klonowanie i przypisywanie

Object.assign({}, ...) to bezpieczny schemat, który początkujący mogą łatwo zrozumieć.

// Object.assign can also create a new object
const base = { a: 1, b: 2 };
const patch = { b: 5 };

// New object as first arg → sources untouched
const merged2 = Object.assign({}, base, patch);

console.log("base:", base);
console.log("patch:", patch);
console.log("merged2:", merged2);
Bezpieczne scalanie obiektów; zamrażanie i uszczelnianie — ilustracja 4

Freeze a seal

freeze blokuje wszystkie zmiany, a seal blokuje dodawanie i usuwanie właściwości, ale pozwala aktualizować istniejące właściwości.

// Freeze: no add/remove/change
const frozen = Object.freeze({ id: 1, tag: "locked" });
// Seal: no add/remove, but you may change existing values
const sealed = Object.seal({ id: 2, tag: "open" });

// Attempts (silently fail in non-strict mode)
frozen.tag = "new";
sealed.tag = "updated";
sealed.newKey = 123;

console.log("frozen:", frozen);
console.log("sealed:", sealed);
Bezpieczne scalanie obiektów; zamrażanie i uszczelnianie — ilustracja 5

Bezpieczne nawyki przy scalaniu

Wskazówki:

  • Należy preferować nowe obiekty: {...a, ...b} lub Object.assign({}, a, b).
  • W przypadku niezaufanych kluczy należy używać Object.create(null) oraz pomijać __proto__, prototype i constructor.
  • Object.freeze, a modele zabezpieczać za pomocą Object.seal.
Bezpieczne scalanie obiektów; zamrażanie i uszczelnianie — ilustracja 6

Quiz z podstaw prototype pollution

Szybkie sprawdzenie: najbezpieczniejszy obiekt docelowy dla niezaufanego scalania.

Bezpieczne scalanie obiektów; zamrażanie i uszczelnianie — ilustracja 7

Podsumowanie

Podsumowanie: należy scalać dane przez tworzenie nowych obiektów, filtrować niezaufane klucze oraz używać freeze/seal do ochrony ważnych struktur danych.

Bezpieczne scalanie obiektów; zamrażanie i uszczelnianie — ilustracja 8

Często zadawane pytania

Czy lekcja „Bezpieczne scalanie obiektów; zamrażanie i uszczelnianie” jest bezpłatna?

Tak — pełny tekst „Bezpieczne scalanie obiektów; zamrażanie i uszczelnianie” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu JavaScript Academy, przejdź na CoddyKit PRO. Kurs JavaScript Academy zawiera 3 lekcji w sumie.

Co nauczysz się w „Bezpieczne scalanie obiektów; zamrażanie i uszczelnianie”?

Scalanie obiektów bez niespodzianek, unikanie prototype pollution oraz ochrona danych za pomocą Object.freeze i Object.seal Ćwiczysz JavaScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć JavaScript Academy?

Nie wymagamy żadnego doświadczenia. JavaScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 3.

Ile czasu zajmuje lekcja „Bezpieczne scalanie obiektów; zamrażanie i uszczelnianie”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji JavaScript Academy?

Tak. Każda lekcja JavaScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Walidacja danych wejściowych i podstawy escapowania
  2. Bezpieczne scalanie obiektów; zamrażanie i uszczelnianie
  3. Granice błędów (koncepcyjnie) bez frameworków
← Powrót do JavaScript Academy