Ruby Academy · Lektion

Strong parameters

Sikre parametre

Lektion 3 af 413 trin

Strong parameters er en gratis Ruby Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Ruby Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Ruby Academy-kurset indeholder 4 lektioner i alt.

Problemet med masseallokering

Formularer sender mange felter på én gang. Hvis du blindt sender dem alle til en model, kan en angriber tilføje felter, som du aldrig havde til hensigt at tillade, f.eks. ved at sætte admin: true. Det er sårbarheden ved masseallokering.

  • Input fra brugeren er aldrig pålideligt.
  • Du skal angive en tilladelsesliste over de tilladte felter.
  • Rails håndhæver dette med stærke parametre.

Hvad er stærke parametre?

Stærke parametre kræver, at du udtrykkeligt angiver, hvilke parametre en model må acceptere. Rails udløser en fejl, hvis du forsøger at masseallokere parametre, der ikke er tilladt.

Det omdanner et skjult sikkerhedshul til en liste over felter, der aktivt skal vælges og gennemgås.

require og permit

Mønsteret bruger to metoder:

  • require(:model) sikrer, at nøglen på øverste niveau findes.
  • permit(:field, ...) angiver de indre felter som tilladte.
def article_params
  params.require(:article).permit(:title, :body)
end

Brug af hjælperen

Definér en privat metode model_params, og kald den, når du opretter eller opdaterer. Send aldrig rå params til en model.

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

private

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

Hvorfor en privat metode?

Når tilladelseslisten holdes i én privat metode:

  • create og update deler de samme regler.
  • De tilladte felter er nemme at finde og gennemgå.
  • Den eksponeres ikke som en handling i styreenheden (private metoder kan ikke knyttes til ruter).

Hvad filtreres fra

Alle indsendte nøgler, der ikke står på permit-listen, fjernes, før de når modellen. Hvis en formular på en eller anden måde indeholder admin, men du kun tillader title og body, ignoreres værdien for admin lydløst, så posten forbliver sikker.

Tilladelse af lister

For afkrydsningslister eller flervalgslister, der sender lister, skal du tillade dem ved at angive en tom liste som værdi. Det tillader flere værdier for den pågældende nøgle.

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

Tilladelse af indlejrede hashtabeller

For indlejrede attributter (en formular, der redigerer en overordnet post og dens underordnede poster på én gang) skal du tillade de indlejrede nøgler med en hashtabel, der beskriver de indre felter.

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

Håndtering af manglende parametre

Hvis den påkrævede nøgle mangler, udløser require ParameterMissing, som Rails gengiver som en 400 Ugyldig forespørgsel. Det beskytter automatisk handlinger mod forkert udformede forespørgsler.

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

permit! er farligt

Du kan kalde params.permit! for at tillade alt, men så genåbner du sikkerhedshullet ved massetildeling. Undgå det, medmindre du arbejder i en betroet intern kontekst. Foretræk altid en eksplicit tilladelsesliste.

Bedste fremgangsmåder

Hold params sikre:

  • Oplist det mindst mulige sæt felter.
  • Tillad aldrig følsomme flag som role eller admin fra en offentlig formular.
  • Indstil sådanne felter eksplicit i controlleren ud fra logik på serveren.

Hurtigt tjek

Afprøv din forståelse af stærke parametre.

Opsummering: Stærke parametre

Du har lært at filtrere inddata sikkert:

  • Massetildeling er en reel sikkerhedsrisiko.
  • require kræver topnøglen, og permit opretter en tilladelsesliste over felter.
  • Hold tilladelseslisten i en fælles privat metode.
  • Tillad arrays og indlejrede hashes, når det er nødvendigt.
  • Undgå permit!, og tillad aldrig følsomme flag.

Dernæst returnerer vi svar med visninger og gengivelse.

Gratis at komme i gang

Lær Ruby med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
29
Lektioner
109

Ofte stillede spørgsmål

Er lektionen “Strong parameters” gratis?

Ja — alle 3 lektioner i læringssporet Ruby Academy, inklusive “Strong parameters”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Ruby Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Strong parameters”?

Sikre parametre Du øver dig i Ruby Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Ruby Academy?

Der kræves ingen tidligere erfaring. Ruby Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Strong parameters”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Ruby Academy-lektion?

Ja. Alle Ruby Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Routes og resources
  2. Controllere og actions
  3. Strong parameters
  4. Views og rendering
← Tilbage til Ruby Academy