en deze tekens dan:
|| ook wel OR
Dan ken je nog steeds user 1 tot en met oneindig tonen
Als ie dan in een while lus staat natuurlijk
GR. mebus!
Link gekopieerd
o oké dommu dommu ik dan toch:p
Na dan weet ik dat ook weer:)
Dankje!
GR. mebus!
Link gekopieerd
Striptags haalt niks weg, het zorgt er alleen voor dat gevaarlijke tekens geescaped (\) worden.
|| en OR heeft vervolgens weinig nut want je kan de query niet meer afkappen.
Link gekopieerd
Databas in:
<?php
$email = mysql_real_escape_string($_POST["email"]);
$naam = mysql_real_escape_string($_POST["naam"]);
$onderwerp = mysql_real_escape_string($_POST["onderwerp"]);
$bericht = mysql_real_escape_string($_POST["bericht"]);
?>
database uit:
<?php
$row['onderwerp'] = stripslashes(htmlentities(strip_tags($row['onderwerp'])));
$row['naam'] = stripslashes(htmlentities(strip_tags($row['naam'])));
$row['datum'] = stripslashes(htmlentities(strip_tags($row['datum'])));
$row['email'] = stripslashes(htmlentities(strip_tags($row['email'])));
$row['onderwerp'] = stripslashes(htmlentities(strip_tags($row['onderwerp'])));
?>
Goed of fout?
Link gekopieerd
Arjan Kapteijn schreef op 18.08.2006 16:09
Striptags haalt niks weg, het zorgt er alleen voor dat gevaarlijke tekens geescaped () worden.
Dat is toch niet waar? striptags stipt toch gewoon html en php tags?
jij bedoeld mysql_real_escape_string ?
Edit:
@PHP newbie ik zou die strip_tags weglaten, htmlentities() lijkt me voldoende.
Link gekopieerd
Arjan Kapteijn schreef op 18.08.2006 16:09
(...)
|| en OR heeft vervolgens weinig nut want je kan de query niet meer afkappen.
Wat nou als ik mijn query zo opstel:
<?php
$query= "SELECT wachtwoord FROM tabel WHERE gebruikersnaam = " .$gebruikersnaam;
?>
en er voor '$gebruikersnaam' is ingevuld 'Jan OR 1 = 1' (zonder de enkele quotes)? Dan kun je dat lezen als:
<?php
$query = "SELECT wachtwoord FROM tabel WHERE gebruikersnaam = Jan OR 1 = 1";
?>
Het gevolg is, dat
alle wachtwoorden worden geselecteerd. . .
Daarom moet je eigenlijk in je query altijd quotes gebruiken. Zelfs bij integers...
<?php
$query = "SELECT wachtwoord FROM tabel WHERE gebruikersnaam = '" .$gebruikersnaam. "'";
?>
Als er nu 'Jan OR 1 = 1' is ingevuld voor '$gebruikersnaam', zal er (waarschijnlijk) een fout worden weergeven:
<?php
$query = "SELECT wachtwoord FROM tabel WHERE gebruikersnaam = 'Jan OR 1 = 1'";
?>
Edit: UBB-fix :c)
Link gekopieerd
bij een integer moet je gewoon altijd controleren in PHP of het wel een integer is.
In een query zal je bij een string altijd quotes moeten gebruiken anders loopt het weer in de soep bij spaties.
Link gekopieerd
mysql_real_escape_string vereist geen stripslashes bij het uitlezen!
fiets' --> fiets\' in de query, maar in de database komt --> fiets'
Link gekopieerd
Maar WAT is MySQL injection nu precies.
Klopt het dat daarmee mijn hele database leeg gegooit kan worden, en klopt het dat men daarmee dan ook wachtwoorden kan achterhalen.
En HOE gebeurd dit dan.
Link gekopieerd
klopt het dat men daarmee dan ook wachtwoorden kan achterhalen Wanneer jij md5 of sha1 gebruikt (met een salt) dan is dit vrijwel onmogelijk. Doe je dat niet, dan ben je stom bezig en moet je niet zeuren dat de boel gejat is...
SQL-injection betekent dat er stukken SQL in jouw database worden geinjecteerd die er niet thuis horen. Het wordt dus door de gebruiker in de query gezet en niet door de programmeur.
DELETE FROM tabelnaam WHERE id = $_POST['id'];
Jij verwacht dat $_POST['id'] bv. de waarde 23 heeft, maar wat als een grappenmaker daar van maakt:
23 or id > 0
De query die naar de database wordt gestuurd, komt er dan alsvolgt uit te zien:
DELETE FROM tabelnaam WHERE id = 23 or id > 0;
1x raden wat er gebeurd... Alle records in de tabel 'tabelnaam' worden weggegooid!
Link gekopieerd