Sterke parameters
Veilige parameters
Sterke parameters is een gratis Ruby Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Ruby Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Ruby Academy bevat in totaal 4 lessen.
Het probleem van massale toewijzing
Formulieren sturen veel velden tegelijk. Als je ze allemaal zonder controle aan een model doorgeeft, kan een aanvaller velden toevoegen die je nooit hebt bedoeld, zoals admin: true. Dit is het beveiligingsprobleem van massale toewijzing.
- Gebruikersinvoer is nooit betrouwbaar.
- Je moet toegestane velden op een lijst zetten.
- Rails dwingt dit af met sterke parameters.
Wat zijn sterke parameters?
Sterke parameters vereisen dat je expliciet opgeeft welke parameters een model mag accepteren. Rails werpt een fout op als je parameters massaal probeert toe te wijzen die niet zijn toegestaan.
Zo wordt een stil beveiligingslek vervangen door een expliciete, gecontroleerde lijst met velden.
require en permit
Het patroon gebruikt twee methoden:
require(:model)zorgt ervoor dat de sleutel op het hoogste niveau bestaat.permit(:field, ...)zet de onderliggende velden op de lijst met toegestane velden.
def article_params
params.require(:article).permit(:title, :body)
endDe helper gebruiken
Definieer een privé-methode model_params en roep die aan wanneer je iets maakt of bijwerkt. Geef nooit onbewerkte params door aan een model.
def create
@article = Article.new(article_params)
@article.save
redirect_to @article
end
private
def article_params
params.require(:article).permit(:title, :body)
endWaarom een privémethode?
Als je de lijst met toegestane velden in één privémethode bijhoudt:
- Gebruiken
createenupdatedezelfde regels. - Zijn de toegestane velden eenvoudig te vinden en te controleren.
- Wordt de methode niet als controlleractie aangeboden (privémethoden kunnen niet aan routes worden gekoppeld).
Wat wordt eruit gefilterd?
Elke ingediende sleutel die niet in de lijst van permit staat, wordt verwijderd voordat deze het model bereikt. Als een formulier bijvoorbeeld admin bevat, maar je alleen title en body toestaat, wordt de waarde van admin stil genegeerd en blijft het record veilig.
Arrays toestaan
Voor lijsten met selectievakjes of meervoudige selecties die arrays versturen, sta je arrays toe door een lege array als waarde door te geven. Zo zijn meerdere waarden voor die sleutel toegestaan.
params.require(:article).permit(:title, tag_ids: [])Geneste hashes toestaan
Voor geneste attributen (een formulier waarmee je een bovenliggend object en de bijbehorende onderliggende objecten tegelijk bewerkt) sta je de geneste sleutels toe met een hash die de onderliggende velden beschrijft.
params.require(:order).permit(
:customer_name,
items_attributes: [:product_id, :quantity]
)Ontbrekende parameters afhandelen
Als de vereiste sleutel ontbreekt, werpt require ParameterMissing op. Rails geeft dit weer als een 400 Bad Request. Zo worden acties automatisch beschermd tegen verkeerd opgemaakte verzoeken.
# Missing :article key raises:
# ActionController::ParameterMissingpermit! is gevaarlijk
Je kunt params.permit! aanroepen om alles toe te staan, maar daarmee zet je het beveiligingslek voor massatoewijzing opnieuw open. Vermijd dit, behalve in vertrouwde interne contexten. Geef altijd de voorkeur aan een expliciete witte lijst.
Beste werkwijzen
Houd params veilig:
- Zet de minimale verzameling velden op een witte lijst.
- Sta nooit gevoelige opties zoals
roleofadmintoe vanuit een openbaar formulier. - Stel zulke velden expliciet in de controller in op basis van logica aan de serverkant.
Korte controle
Test je begrip van sterke parameters.
Samenvatting: sterke parameters
Je hebt geleerd hoe je invoer veilig filtert:
- Massatoewijzing is een reëel beveiligingsrisico.
requirevereist de bovenste sleutel;permitzet velden op een witte lijst.- Houd de witte lijst in een gedeelde privémethode.
- Sta arrays en geneste hashes toe wanneer dat nodig is.
- Vermijd
permit!en sta nooit gevoelige opties toe.
Vervolgens geven we antwoorden terug met weergaven en renderen.
Leer Ruby met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 29
- Lessen
- 109
Veelgestelde vragen
Is de les “Sterke parameters” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Ruby Academy, waaronder “Sterke parameters”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Ruby Academy bevat in totaal 4 lessen.
Wat leer ik in “Sterke parameters”?
Veilige parameters Je oefent met Ruby Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Ruby Academy te beginnen?
Ervaring vooraf is niet nodig. Ruby Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “Sterke parameters”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Ruby Academy?
Ja. Elke les over Ruby Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Routes en resources
- Controllers en acties
- Sterke parameters
- Views en rendering