Het negeren van de 'Withdrawal' permissies op je API keys (Gevaarlijk!)
Je API key is je digitale sleutel naar de beurs, en de 'Withdrawal' permissie is de sleutel van je kluis. Als je die niet uitschakelt, geef je elke hacker of buggy script direct toegang tot je geld.
Geen wachtwoord, geen extra check, gewoon weg. In de wereld van algoritmische trading bots en Python scripts is dit een veelvoorkomende, maar dodelijke fout. Je bouwt een mooie backtest, je script draait soepel, maar één verkeerde log lijn of een compromised key en je portfolio is leeg. Dit is geen theorie; het gebeurt wekelijks op grote en kleine schaal.
Wat zijn API keys en waarom zijn de permissies zo cruciaal?
Een API key is een unieke code die je aanmaakt bij je broker, bijvoorbeeld Binance, Bybit of Kraken. Deze key geeft je Python script toegang tot je account om data op te halen en orders te plaatsen.
Het is als een robot die je opdrachten geeft. Zonder deze key kan je bot niets doen.
Elke broker, van de groten tot de kleinere niche aanbieders, biedt je de mogelijkheid om permissies in te stellen. Dit zijn de regels voor je robot. De permissies zijn meestal onderverdeeld in drie hoofdgebieden: lezen (read), handelen (trade) en opnemen (withdraw).
Lezen is onschuldig; je haakt er data mee op voor je backtesting in Python. Handelen is nodig voor je bot om orders te plaatsen op de markt. Maar opnemen, dat is de gevaarlijke. Opnemen betekent dat de key geld van je account naar een extern adres kan sturen.
Stel je voor: je script heeft een bug. In plaats van een limit order van €100 te plaatsen, stuurt het per ongeluk €10.000 naar een random wallet adres. Zonder withdrawal-permissie kan dit simpelweg niet gebeuren. Met de permissie aan is het geld direct weg en onherroepelijk.
Zonder dat jij er persoonlijk bij bent. Als je een key aanmaakt en alle vakjes aanvinkt, geef je je script dus de volledige macht over je kapitaal.
Veel traders denken dat hun script veilig is omdat het op hun eigen computer draait. Maar een Python script kan geïnfecteerd raken met malware, of je kunt per ongeluk je key delen in een logbestand dat naar een public repo gaat op GitHub.
De withdrawal-permissie is de laatste verdedigingslinie. Zonder die linie ben je geen trader, je bent een wandelende geldautomaat voor iedereen die toegang heeft.
Hoe werkt het in de praktijk: de gevaarlijke scenario’s
Stel je gebruikt een populaire Python bibliotheek zoals ccxt om te handelen.
Je maakt een key aan op Bybit. Je wilt je bot laten handelen, dus je vinkt ‘Trade’ aan.
Maar je vergeet de ‘Withdraw’ optie uit te laten. Je script draait op een VPS van €5 per maand. Die VPS is verder prima beveiligd, maar je hebt één keer een verkeerd commando uitgevoerd en je key per ongeluk in een logbestand geprint. Een scraper bot op internet vindt die key binnen minuten.
Het proces is simpel en angstaanjagend snel. De hacker gebruikt je key via de API.
Hij kijkt eerst naar je account saldo. Ziet hij €5.000 in stablecoins? Hij stuurt een API-opdracht om het naar zijn eigen wallet te sturen.
Omdat de withdrawal-permissie aan staat, keurt de broker dit direct goed. Geen e-mail bevestiging, geen 2FA op dit specifieke moment.
Het geld is weg binnen seconden. Je krijgt pas een melding als het te laat is.
Een ander scenario is een bug in je eigen code. Je bouwt een bot die dynamisch in- en uitstapt. Je script bevat een fout in de logica van het opnemen van funds.
Je wilt misschien je winst naar een cold wallet verplaatsen, maar je script maakt een verkeerde berekening. In plaats van 1% van je winst, stuurt het 100% van je hoofdbalans.
Als de withdrawal-permissie aan staat, bevestigt de API dit direct. Je bent je hele trading kapitaal kwijt door een simpele typo in Python. Vergeet ook niet om belastingrapportages te genereren voor je crypto trades met Python om achteraf niet voor verrassingen te staan.
Broker APIs zoals die van Kraken of Coinbase Pro hebben veiligheidsmaatregelen, maar die zijn niet waterdicht als je de permissies verkeerd instelt. Bij Binance kun je bijvoorbeeld IP-restricties instellen, maar als je key lekt, helpt dat niet tegen withdrawal requests vanaf een andere IP. De enige echte bescherming is het uitschakelen van de withdrawal permissie op het niveau van de key zelf.
Modellen voor veilige API sleutels en kosten van fouten
Er zijn verschillende manieren om je API sleutels te beheren, en niet alle zijn even veilig. De basis is een ‘Read & Trade’ key.
Dit is de standaard voor algoritmische trading bots. Je betaalt hier niets extra voor; het is een instelling die je zelf maakt bij je broker.
Deze key kan marktdata ophalen en orders plaatsen, maar geen geld opnemen. Dit is de enige optie die je moet gebruiken voor je live trading bot. Voor de serieuze Python trader is er een model met twee keys.
Eén key voor de live omgeving (Trade only) en één voor de testomgeving (Read only). Je backtesting script gebruikt de read-only key om historische data te halen via de API. Je live bot gebruikt de trade-only key. Dit scheelt risico’s. Sommige brokers rekenen kosten voor het aanmaken van extra keys, maar meestal is het gratis.
Bij kleinere brokers kan het €0-€5 per maand kosten voor premium API-toegang, maar de key aanmaak zelf is kosteloos.
Er is ook een model met een ‘multi-sig’ of time-locked wallet, maar dat is vaak complexer voor retail traders. Je kunt bijvoorbeeld een wallet gebruiken die alleen geld vrijgeeft na een handmatige confirmatie via een hardware wallet.
Dit kost je wel tijd en soms transactiekosten (gas fees op Ethereum kunnen oplopen tot €10-€20 per transactie). Voor snelle algoritmische trading in crypto is dit niet praktisch, maar het is wel veilig voor het stallen van grote bedragen na het handelen. De kosten van een fout zijn extreem hoog.
Als je €10.000 verliest door een withdrawal bug, is dat 100% verlies. Geen terugbetaling.
Als je €100.000 beheert voor anderen en dit gebeurt, ben je persoonlijk aansprakelijk. De broker zal niet tussenkomen. Zelfs verzekeringen voor crypto trading bots dekken dit vaak niet, omdat het gezien wordt als eigen fout. De prijs van veiligheid is nul; de prijs van onveiligheid is je hele portfolio.
Praktische tips voor het instellen van je API keys
Check altijd de permissies voordat je een key opslaat. Ga naar je broker dashboard, bijvoorbeeld bij Binance of Bybit, en maak een nieuwe key aan. Schakel ‘Withdraw’ uit.
Vink alleen ‘Read’ en ‘Trade’ aan. Kopieer de key direct naar een veilige plek, zoals een password manager (bijv.
Bitwarden of 1Password, kost €0-€3 per maand). Bewaar nooit je key in een plain text bestand op je computer. Gebruik IP-restricties als je broker dit ondersteunt. Bij Binance kun je je VPS IP-adres vastzetten.
Als je bot op een vaste VPS draait (bijv. DigitalOcean van €5-€10 per maand), vul je dat IP in.
Als je key toch lekt, kan de hacker alleen vanaf die IP handelen. Dit is een extra laag, maar niet perfect. Combineer dit met het uitschakelen van withdrawal.
Test je script eerst op een testnet of demo account. Gebruik een paper trading key als je broker dat biedt.
Voor Python bots kun je libraries zoals ccxt gebruiken om een testnet key te testen.
Zorg dat je geen echte funds gebruikt totdat je zeker bent dat je code geen withdrawal calls maakt. Check je code op zoekwoorden zoals ‘withdraw’, ‘create_withdrawal’, of ‘transfer’. Monitor je API logs regelmatig.
De meeste brokers bieden een API log waar je alle verzoeken kunt zien. Controleer wekelijks of er onverwachte withdrawal verzoeken staan.
Als je een vermoeden hebt, schakel de key direct uit en maak een nieuwe aan.
Tot slot, gebruik een hardware wallet voor je grote bedragen. Verhandel alleen wat je nodig hebt en neem de juiste veiligheidsmaatregelen voor je crypto trading bot. Laat nooit je volledige portfolio aan je trading bot koppelen.
