Toon MeerUit een eerder fragment van jou:
PHP$sql = "SELECT username, password, admin, gebruiker FROM inlog WHERE username='$username' AND password='$password'"; $query = mysqli_query($conn, $sql); // etc.
Waar komen in dit geval $username en $password vandaan en hoe zien deze er uit?
Een systeem kan simpel zijn en nog steeds veilig, hier hoef je niet veel voor te doen maar je moet de onderliggende principes wel een beetje begrijpen.
Ik kan wel toelichting geven op je code maar ik kan je niet in 2 zinnen overdragen wat belangrijk is. Dat is toch meer leren door het te doen. Een vuistregel die je wel altijd kunt hanteren of in je achterhoofd zou moeten houden is de volgende:
filter input, escape output
filter input houdt in: controleer je invoer - dit kan van alles zijn (formulier, URL variabelen etc.). Als je verwacht dat bepaalde invoer een bepaalde vorm moet hebben, controleer hier dan op. Bijvoorbeeld: als je verwacht dat $_GET['id'] een getal bevat, controleer dit!
escape output betekent: ontdoe data (waar nodig) binnen een bepaalde context van haar speciale betekenis. Bijvoorbeeld: de karakters < en > in de tekst '<b>dikgedrukt</b>' hebben in de HTML-context eem speciale betekenis: deze duiden (mogelijk) de begrenzingen aan van HTML tags. Om deze karakters binnen HTML van hun speciale betekenis te ontdoen zijn hier escape-functies voor zoals htmlentities() en htmlspecialchars().
Zo zijn er ook escape-functies voor andere contexten, zoals de _real_escape_string() functies voor MySQLi om de DATA delen in je SQL van mogelijk speciale betekenis te ontdoen.
Dat is namelijk precies wat een SQL-injectie is: je voegt een stuk tekst (DATA) in in je query die vervolgens als SQL geinterpreteerd wordt terwijl dit eigenlijk enkel als DATA gebruikt mocht worden. Met een SQL-injectie wordt meestal de werking van de query gemanipuleerd zodat deze een andere betekenis krijgt / iets anders doet dan eigenlijk de bedoeling.
Hmm dankjewel voor je uitleg, ik zou er mee aan de gang proberen te gaan!