Door
Marco Eilander
op 29-09-2014 20:40
gewijzigd op 29-09-2014 20:53
3.673 views
Hallo,
ik heb de volgende php error, maar weet niet hoe ik het kan oplossen.
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 'passwoord1'), (''' at line 1
Update ik weet inmiddels hoe het komt.
Mijn registratie pagina bugt, en krijg het niet in orde. Iemand had zich geregistreerd onder de naam : "Pietje Puk', 'passwoord1'), ('"
Helaas krijg ik het niet voor elkaar om ook gedeeltes te detecteren in gebruikersnamen.
Het is mij momenteel alleen gelukt om gebruikersnamen te detecteren die zich "(" of "?" noemen, maar niet "(&'karel?"
Als iemand mij daar bij kan helpen, zal erg fijn zijn.
Dit is wat ik momenteel gebruik:
//kijken of de gebruikersnaam is toegestaan
$badnames = array("bitch", "fuck", "cancer", ".net", ".nl", ".be", ".com", ".nu", ".tv", ".de", ".jp", ".ru", ".", "-", "_", "@", "?", "!","http","/","`","'",")","(","$","%","&");
if (in_array($gebruiker, $badnames)) {
$fm = 1;
$melding = 'This username is not allowed.';
}
if (preg_match('/'.$badnames.'/',$gebruiker)){
$fm = 1;
$melding = 'This username is not allowed.';
}
Zou je a.u.b voortaan relevante code willen tonen, i.p.v. > 2600 regels aan die bijna niemand zal lezen?
Dat maakt je topic ook meteen een stuk overzichtelijker. Ik heb je code voor nu even ingeknipt.
[quote="Marco Eilander op 29/09/2014 20:40:08"]
Mijn registratie pagina bugt, en krijg het niet in orde. Iemand had zich geregistreerd onder de naam : "Pietje Puk', 'passwoord1'), ('"
Hoezo bugt? Je hebt kennelijk je beveiliging bij het wegschrijven naar de database niet goed voor elkaar.
[/quote]
Ja klopt. Ik zat ook al te zoeken hoe ik het anders kan doen, maar kom enkel alleen maar uit om hele strings te controleren i.p.v. gedeeltes. Als jij een oplossing weet, zal ik het erg fijn vinden. :)
Er zijn verschillende soorten van escapen, maar gebruik die methode, die je nodig hebt en WAAR je hem nodig hebt.
Je moet de invoer escapen bij de query's.
Doe dat dan ook daar en niet even handig bovenaan je script.
a) je vergeet dat ooit in de toekomst een keertje
b) je kunt $gebruiker nu niet meer voor iets anders gebruiken, bijvoorbeeld weergeven op scherm
c) je kunt met $ww ook niets meer doen..
a) ok, jij niet natuurlijk, maar iemand anders zou het zo maar kunnen vergeten.
b) -
c) je doet ongemerkt kennelijk toch nog wat met je wachtwoord: md5($ww)
$ww is echter niet meer per se gelijk aan het ingevoerde ww. Bijvoorbeeld "foto's" is nu "foto\'s" geworden en de md5-hash daarvan is echt heel anders...
los daarvan:
$datum = date('H:i d-m-Y')
daar kun je echt in een database helemaal niets mee: sorteren werkt niet, filteren niet
statisieken als "hoeveel aanmeldingen op woensdagen?" gaan niet.
Gebruik een kolom van het type DATETIME en zet daar met NOW() de huidige tijd in
of desnoods met php: date('Y-m-d H:i')