Strong parameters
Sikre parametre
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)
endBrug 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)
endHvorfor en privat metode?
Når tilladelseslisten holdes i én privat metode:
createogupdatedeler 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::ParameterMissingpermit! 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
roleelleradminfra 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.
requirekræver topnøglen, ogpermitopretter 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.
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
- Routes og resources
- Controllere og actions
- Strong parameters
- Views og rendering