0Pricing
Ruby Academy · Lekcja

Silne parametry

Bezpieczne parametry

Silne parametry to bezpłatna lekcja Ruby Academy na CoddyKit. To lekcja 3 z 4. 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 Ruby Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Ruby Academy zawiera 4 lekcji w sumie.

Problem masowego przypisywania

Formularze przesyłają wiele pól jednocześnie. Jeśli wszystkie zostaną bezrefleksyjnie przekazane do modelu, atakujący może dodać pola, których nie zamierzano udostępniać, na przykład ustawić admin: true. To podatność związana z masowym przypisywaniem.

  • Danym od użytkownika nigdy nie wolno ufać.
  • Należy jawnie określić dozwolone pola.
  • Rails wymusza to za pomocą strong parameters.

Czym są strong parameters

Strong parameters wymagają jawnego określenia parametrów, które model może przyjąć. Rails zgłasza błąd podczas próby masowego przypisania parametrów, na które nie wyrażono zgody.

W ten sposób niezauważona luka bezpieczeństwa zostaje zastąpiona jawną listą pól, na które trzeba wyrazić zgodę i którą można przejrzeć.

require i permit

Ten wzorzec korzysta z dwóch metod:

  • require(:model) sprawdza, czy istnieje klucz najwyższego poziomu.
  • permit(:field, ...) tworzy białą listę pól wewnętrznych.
def article_params
  params.require(:article).permit(:title, :body)
end

Korzystanie z pomocniczej metody

Należy zdefiniować prywatną metodę model_params i wywoływać ją podczas tworzenia lub aktualizowania rekordu. Nie wolno przekazywać surowego obiektu params do modelu.

def create
  @article = Article.new(article_params)
  @article.save
  redirect_to @article
end

private

def article_params
  params.require(:article).permit(:title, :body)
end

Dlaczego prywatna metoda

Umieszczenie białej listy w jednej prywatnej metodzie oznacza, że:

  • create i update korzystają z tych samych reguł.
  • Dozwolone pola można łatwo znaleźć i przejrzeć.
  • Metoda nie jest udostępniona jako akcja kontrolera (prywatnych metod nie można wywołać za pomocą routingu).

Co zostaje odfiltrowane

Każdy przesłany klucz, którego nie ma na liście permit, jest usuwany, zanim trafi do modelu. Jeśli formularz zawiera admin, ale dozwolone są tylko title i body, wartość admin zostanie po cichu zignorowana, dzięki czemu rekord pozostanie bezpieczny.

Dopuszczanie tablic

W przypadku list pól wyboru lub pól wielokrotnego wyboru, które wysyłają tablice, należy zezwolić na ich przesyłanie, przekazując pustą tablicę jako wartość. Umożliwia to przekazanie wielu wartości dla danego klucza.

params.require(:article).permit(:title, tag_ids: [])

Dopuszczanie zagnieżdżonych hashy

W przypadku zagnieżdżonych atrybutów (formularza, który jednocześnie edytuje obiekt nadrzędny i jego elementy podrzędne) należy zezwolić na zagnieżdżone klucze za pomocą hasha opisującego pola wewnętrzne.

params.require(:order).permit(
  :customer_name,
  items_attributes: [:product_id, :quantity]
)

Obsługa brakujących parametrów

Jeśli wymaganego klucza brakuje, require zgłasza ParameterMissing, które Rails renderuje jako 400 Bad Request. Dzięki temu akcje są automatycznie chronione przed nieprawidłowymi żądaniami.

# Missing :article key raises:
# ActionController::ParameterMissing

permit! jest niebezpieczne

Można wywołać params.permit!, aby zezwolić na wszystko, ale w ten sposób ponownie otwiera się luka związana z masowym przypisywaniem. Należy tego unikać, z wyjątkiem zaufanych kontekstów wewnętrznych. Zawsze należy preferować jawną białą listę.

Dobre praktyki

Należy dbać o bezpieczeństwo params:

  • Należy umieszczać na białej liście tylko minimalny zestaw pól.
  • Nie wolno zezwalać na przesyłanie poufnych flag, takich jak role czy admin, z publicznego formularza.

Szybki test

Proszę sprawdzić swoją znajomość silnych parametrów.

Podsumowanie: silne parametry

Nauczył się Pan/Pani bezpiecznie filtrować dane wejściowe:

  • Masowe przypisywanie stanowi rzeczywiste zagrożenie bezpieczeństwa.
  • require wymaga klucza najwyższego poziomu, a permit tworzy białą listę pól.
  • Białą listę należy przechowywać we wspólnej prywatnej metodzie.
  • W razie potrzeby należy zezwalać na tablice i zagnieżdżone hashe.
  • Należy unikać permit! i nigdy nie zezwalać na poufne flagi.

Następnie zajmiemy się zwracaniem odpowiedzi za pomocą widoków i renderowania.

Często zadawane pytania

Czy lekcja „Silne parametry” jest bezpłatna?

Tak — pełny tekst „Silne parametry” 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 Ruby Academy, przejdź na CoddyKit PRO. Kurs Ruby Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Silne parametry”?

Bezpieczne parametry Ćwiczysz Ruby 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ąć Ruby Academy?

Nie wymagamy żadnego doświadczenia. Ruby 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 3 z 4.

Ile czasu zajmuje lekcja „Silne parametry”?

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 Ruby Academy?

Tak. Każda lekcja Ruby 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. Trasy i zasoby
  2. Kontrolery i akcje
  3. Silne parametry
  4. Widoki i renderowanie
← Powrót do Ruby Academy