Waarschuwing: mijn reactie is vrij LAAANG en technisch van aard, met allerlei termen die sommige mensen wel, en anderen niet kennen. Excuus. Ik kan niet ruiken wat je allemaal wel en niet weet. Vraag maar rustig. En voel je vooral niet dom als je iets niet snapt :) Door terhack007: Hallo, ik heb zelf een site gemaakt. op de ze site kan je inloggen met een gebruikers nummer en wachtwoord. deze site draait op Java. Ik heb laatst gehoord dat hackers via MY SQL je wacht woord en gebruikers naam kunnen achterhalen. NU is mijn vraag kan dit ook met een java site? hoe heet dit bij java?
Alleen als je een MySQL database gebruikt (om bijv. je gebruikersnamen en wachtwoorden op te slaan) ben je evt. gevoelig voor MySQL-injection. Dit is onafhankelijk van de taal die je gebruikt (in jouw geval Java). Er zijn ook andere database-systemen dan MySQL (o.a. Oracle, Postgres, Sybase, Firebird) met ook elk hun eigen zwaktes, maar aangezien MySQL een van de meest gebruikte DBMS'en op het web is, hoor je daar het vaakst over.
is er een test/Tool voor?
Er zijn meerdere test tools/suites om te kijken of je website bestand is tegen (veelgebruikte) MySQL-injectie aanvallen. Helaas vereisen die tools vaak wel behoorlijk wat technische kennis en vaardigheden. Als je site echt heel erg gevoelige informatie bevat kan het nuttig zijn iemand in te huren (of lief aankijken) die je site kan penetration-testen en de eventuele kwetsbaarheden kan verhelpen.
Veder worden de gegevens niet beveiligt (Versleutelt) verstuurt kan je dit onderscheppen als hacken zo ja hoe? met welke tool of zo?
Ja dat kan. Om te beginnen kan (over het algemeen) iedereen die gebruik maakt van het netwerk waar je op zit met de juiste tools en vaardigheden die gegevens afluisteren en mogelijk misbruiken. Google maar naar het woord "wireshark" en/of "ettercap". Ik ga je helaas niet uitleggen hoe dat werkt, dat gaat me wat ver :)
------------------------------------------------------------------------------------------------------------------
Ik heb zo goed als geen ervaring met Java, dus ik weet niet in hoeverre Java je standaard beschermt tegen dit soort aanvallen.
Een aantal van mijn persoonlijke adviezen zijn in elk geval:*) Gebruik
altijd HTTPS (SSL/TLS) voor je gehele website, dus niet alleen voor de login procedure, maar voor elke byte die over wordt gestuurd. Als je het geld ervoor (over) hebt kun je ook een SSL/TLS-certificaat kopen bij een betrouwbare partij (CA) die ervoor zorgt dat gebruikers/klanten makkelijker zeker kunnen zijn dat de HTTPS-verbinding niet is gecompromitteerd, i.a.w. dat ze met
jouw site communiceren, en zonder afluisteraars ertussen. Maarja, dat is vaak niet goedkoop en wordt vooral gebruikt door banken en overheden.
*) Versleutel/hash voordat je het wachtwoord verstuurt in je login-formulier het wachtwoord, bij voorkeur met een CPU-intensieve methode als
bcrypt zodat aanvallers veel meer rekenkracht nodig hebben om de boel te kraken. Er zijn JavaScript libraries die je hiervoor kunt gebruiken. Op deze manier blijft je wachtwoord redelijk veilig, ook als je HTTPS-verbinding is gecompromitteerd, wat vooral op publieke/untrusted netwerken nogal eens voorkomt (vliegveld, McDonalds, camping wifi, hotels, pompstations noem maar op).
*) Als je wachtwoorden encrypted/hashed opslaat in een database (al dan niet MySQL),
salt ze. Ik kan niet in een paar woorden uitleggen waarom en hoe en wat, dus dat zul je moeten Googlen als je nog niet weet wat dat is.
*) Houd er rekening mee dat hoe veilig jij je gegevens en programmeercode ook behandelt, jij geen invloed hebt op een eventuele hack van de server waar alles is gehost (zelfs je eigen server zou kunnen worden gehacked, je weet maar nooit). In een database bankrekeningnummers met bijbehorende pincodes opslaan is dus wat dat betreft vragen om problemen (en rechtzaken, hehe).
*) Pas (mits praktisch haalbaar) IP-restrictie toe, oftewel dat slechts bekende hosts verbinding mogen maken met de website. Dit is niet praktisch als de website voortdurend vanaf verschillende plekken (IP's) beschikbaar moet zijn.
*) Als je een database gebruikt (zoals MySQL), zorg ervoor dat die niet direct van buitenaf benaderbaar is. Vaak draait de database op dezelfde machine als de website en is directe toegang van buitenaf onnodig en potentieel desastreus. Bij veel externe hosters is dit al standaard voor je afgeschermd, maar even controleren kan natuurlijk geen kwaad (meten is weten).
*) Als je een database gebruikt, zorg er dan voor dat je website slechts de rechten krijgt die het nodig heeft en gebruik die login niet voor andere sites (dus per site een eigen db-login). Ik zie regelmatig websites die met
root login de database gebruiken. Dat is oliedom. Mocht een aanvaller dan 1 gedeelte van je database compromitteren, dan kan hij ook direct OVERAL bij. Dit laatste is vooral van toepassing als je je database voor verscheidene sites gebruikt die dus allemaal dezelfde login gebruiken.
*) Controleer (en sanitize, escape, hoe je het ook noemt) automatisch
elke vorm van invoer van de gebruiker, vooral als die invoer wordt gebruikt om database-queries mee te vormen. Hier gaat het vaak fout bij SQL-injectie. Een veelgebruikt voorbeeld: tekens als
; (puntkomma) kunnen een SQL-query termineren, zodat een aanvaller erachter nieuwe queries kan uitvoeren, zoals bijv. het opvragen van de tabel met inloggegevens. Dat is 1 van de vele (en zeer veel gebruikte) voorbeelden.
Maar nu wordt het verhaal iets te technisch denk ik (en lang).
Als je goed Engels kunt lezen kan ik je absoluut deze site aanraden:
https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_SheetEcht de moeite waard als je wil leren hoe je veilige websites maakt. Verder kun je Googlen naar "
preventing MySQL injection" (link:
https://www.google.com/search?q=preventing+sql+injection )
Maarja nogmaals, dat is allemaal in het Engels en dat is niet altijd even simpel te begrijpen, alleen is er in het Nederlands helaas niet zo verschrikkelijk veel over te vinden ;)
Succes ermee in elk geval!
Groetjes
ernie