[SQL/PHP] Fout in query, ben ik gek?

Pagina: 1
Acties:
  • 1.180 views

Acties:
  • 0 Henk 'm!

  • Toppe
  • Registratie: Januari 2004
  • Laatst online: 12:04

Toppe

Oké ✅

Topicstarter
Hee,

Ik krijg constant de volgende error te zien:

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 'case='hp' Where id='2'' at line 23...

Nu heb ik echt de query 20x na gekeken en schiet mij maar lek, ik zie het niet...

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
                            $query = ("Update system Set name='".$_POST['name']."',
                            function='".$_POST['function']."',
                            powersupplies='".$_POST['power']."',
                            motherboard='".$_POST['mainboard']."',
                            cpu='".$_POST['cpu']."',
                            memory='".$_POST['memory']."',
                            videocard='".$_POST['videocard']."',
                            writers='".$_POST['writers']."',
                            opticaldrive='".$_POST['opticaldrive']."',
                            scsi='".$_POST['scsi']."',
                            soundcard='".$_POST['soundcard']."',
                            networkcard='".$_POST['networkcard']."',
                            videoio='".$_POST['videoio']."',
                            cpucooler='".$_POST['cpucpucooler']."',
                            casefan='".$_POST['casefan']."',
                            monitor='".$_POST['monitor']."',
                            speakers='".$_POST['speakers']."',
                            mouse='".$_POST['mouse']."',
                            keyboard='".$_POST['keyboard']."',
                            scanner='".$_POST['scanner']."',
                            printer='".$_POST['printer']."',
                            router='".$_POST['router']."',
                            internetconnection='".$_POST['internet']."',
                            case='".$_POST['case1']."'

                            Where id='".$_POST['id']."'");


PHP:
1
2
3
<?php
                                showinput('Behuizing', 'case1', $res['case']);
?>


Showinput geeft aan de hand van de ingevulde velden een input box weer, hier gaat niets fout want ik gebruik dit overal en overal werkt het...

Ben ik gek?

Donstil: Je moet kopen wat je wilt hebben. Niet wat je nodig hebt!


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Je zou kunnen beginnen met escapen van je variabelen, wellicht dat er een ' in een er van zit waardoor je uiteindelijk geen helemaal goede query meer produceert.

Het werkt dan ook het beste om de uiteindelijke geparste query naar je scherm af te drukken en die goed te bekijken, ipv hoe je hem opbouwt.

Acties:
  • 0 Henk 'm!

Verwijderd

Kan je eens de output van de query sturen? Misschien gebruik je daarin wel een hoog haakje waardoor je query niet goed loopt.

Misschien met de functie addslashes over je form-variable halen en daarna alsnog naar mysql sturen.

Acties:
  • 0 Henk 'm!

  • Nic
  • Registratie: April 2005
  • Laatst online: 21-09 11:10

Nic

Vrij

'case' is waarschijnlijk een reserved word, die kun je niet als veldnaam gebruiken.
Ik ken MySQL niet, maar in sql server kun je dan [case] tussen vierkante haken zetten.

Edit: En pas op voor sql injection. Door de argumenten niet te escapen kun je nu eenvoudig je database leeghalen met een klein beetje kennis.
Wikipedia: SQL-injectie

[ Voor 39% gewijzigd door Nic op 16-03-2009 14:35 ]


Acties:
  • 0 Henk 'm!

  • Toppe
  • Registratie: Januari 2004
  • Laatst online: 12:04

Toppe

Oké ✅

Topicstarter
Dit krijg je als ik de query een print_r command geeft, nergens haakjes of iets...

SQL:
1
Update system Set name='test', function='test', powersupplies='test', motherboard='1', cpu='AMD', memory='2', videocard='3', writers='4', opticaldrive='5', scsi='6', soundcard='7', networkcard='8', videoio='9', cpucooler='', casefan='10', monitor='11', speakers='12', mouse='13', keyboard='14', scanner='15', printer='16', router='17', case='hp' Where id='2'

Donstil: Je moet kopen wat je wilt hebben. Niet wat je nodig hebt!


Acties:
  • 0 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 09:55

Dido

heforshe

Is het niet (heel flauw) zo dat hij struikelt over het SQL keyword CASE?

edit: ik zie dat de codeparser hem ook als keyword ziet :)

[ Voor 30% gewijzigd door Dido op 16-03-2009 14:37 ]

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

  • EnigmA-X
  • Registratie: Februari 2002
  • Laatst online: 05-09 11:01
"case" is reserved in MySQL.

Zie: http://www.hockinson.com/index.php?s=147

Acties:
  • 0 Henk 'm!

  • winux
  • Registratie: April 2003
  • Laatst online: 18-09 22:18
Toppe schreef op maandag 16 maart 2009 @ 14:33:
Dit krijg je als ik de query een print_r command geeft, nergens haakjes of iets...

PHP:
1
Update system Set name='test', function='test', powersupplies='test', motherboard='1', cpu='AMD', memory='2', videocard='3', writers='4', opticaldrive='5', scsi='6', soundcard='7', networkcard='8', videoio='9', cpucooler='', casefan='10', monitor='11', speakers='12', mouse='13', keyboard='14', scanner='15', printer='16', router='17', case='hp' Where id='2'
Aan de hand van deze output zou ik zeggen dat case en function reserved words zijn in mysql, maak daar eens een compleet ander woord van allebei en probeer dan eens opnieuw.

Acties:
  • 0 Henk 'm!

  • Toppe
  • Registratie: Januari 2004
  • Laatst online: 12:04

Toppe

Oké ✅

Topicstarter
Inderdaad,

net veranderd naar pccase en het probleem verdween als sneeuw voor de zon... Ik ben gek!
Function accepteert hij overigens wel hoor...!!!

Overigens wel vreemd dat ze dan accepteren bij het aanmaken van een tabel...???

[ Voor 12% gewijzigd door Toppe op 16-03-2009 14:40 ]

Donstil: Je moet kopen wat je wilt hebben. Niet wat je nodig hebt!


Acties:
  • 0 Henk 'm!

  • Heikanu
  • Registratie: Juni 2007
  • Laatst online: 20-09 21:17
Toppe schreef op maandag 16 maart 2009 @ 14:33:
Dit krijg je als ik de query een print_r command geeft, nergens haakjes of iets...

PHP:
1
Update system Set name='test', function='test', powersupplies='test', motherboard='1', cpu='AMD', memory='2', videocard='3', writers='4', opticaldrive='5', scsi='6', soundcard='7', networkcard='8', videoio='9', cpucooler='', casefan='10', monitor='11', speakers='12', mouse='13', keyboard='14', scanner='15', printer='16', router='17', case='hp' Where id='2'
Zoals te zien in de geparste code, mag je case niet gebruiken. Dit is een gereserveerd woord in MySQL.

EDIT: Note to self: Niet afgeleid worden tijdens het typen van een bericht. :X

[ Voor 6% gewijzigd door Heikanu op 16-03-2009 14:40 ]


Acties:
  • 0 Henk 'm!

Verwijderd

winux schreef op maandag 16 maart 2009 @ 14:38:
[...]


Aan de hand van deze output zou ik zeggen dat case en function reserved words zijn in mysql, maak daar eens een compleet ander woord van allebei en probeer dan eens opnieuw.
Je kan ook proberen het woord case met back-quotes te gebruiken ( `case` ). Dan zou het ook moeten werken.

Acties:
  • 0 Henk 'm!

  • Toppe
  • Registratie: Januari 2004
  • Laatst online: 12:04

Toppe

Oké ✅

Topicstarter
Ik snap dan zelf MySql niet, waarom accepteren ze woorden via phpmyadmin wel maar via een update niet? slaat werkelijk nergens op, als je dan een lijst op stelt doe er dan wat mee.

Case doet het niet, function raar genoeg wel...

Donstil: Je moet kopen wat je wilt hebben. Niet wat je nodig hebt!


Acties:
  • 0 Henk 'm!

  • B0rf
  • Registratie: Oktober 2008
  • Laatst online: 03-10-2024
Als je in phpmyadmin een tabel aanmaakt, gebruikt phpmyadmin wel een query met backticks om de tabel heen, dus `case`. Dit kun je zien door een tabel aan te maken met een veld case, en dan naar de uitgevoerde query bovenin de volgende pagina te kijken

Acties:
  • 0 Henk 'm!

  • Toppe
  • Registratie: Januari 2004
  • Laatst online: 12:04

Toppe

Oké ✅

Topicstarter
Ok, maar afgezien van wat mysql zelf doet... Ik ben absoluut geen noob met php of mysql, maar ook ik vergeet dit soort dingen ook wel eens... Achja, alles is opgelost

Donstil: Je moet kopen wat je wilt hebben. Niet wat je nodig hebt!


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Nu de query werkt ga je je hoop ik inlezen in SQL injection? :)

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • dev10
  • Registratie: April 2005
  • Laatst online: 09:00
Toppe schreef op maandag 16 maart 2009 @ 14:58:
Ik ben absoluut geen noob met php of mysql,
PHP:
1
"Update system Set name='".$_POST['name']."'"
Dit hoor je als 'noob-af' niet te doen hoor. ;) Wat als ik nu eens in het veld 'name' het volgende zet:

SQL:
1
dev10'; DROP TABLE system; --


spoiler:
Dan worden eerst van alle records in de tabel 'system' de naam vastgezet op 'dev10' en daarna wordt de tabel 'system' verwijderd


Afbeeldingslocatie: http://imgs.xkcd.com/comics/exploits_of_a_mom.png

[ Voor 14% gewijzigd door dev10 op 16-03-2009 15:20 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Toppe schreef op maandag 16 maart 2009 @ 14:58:
Ok, maar afgezien van wat mysql zelf doet... Ik ben absoluut geen noob met php of mysql, maar ook ik vergeet dit soort dingen ook wel eens... Achja, alles is opgelost
Als je geen noob bent (je eigen woorden), waarom zie je dan een fout met het gebruik van een reserved word als veldnaam niet (simpel opgelost met een goeie code highlighter), waarom pass je gebruikersinput direct door in de database zonder enige filtering, en waarom denk je dan dat phpMyAdmin ook maar iets met MySQL te maken heeft? Het is niet erg als je bepaalde dingen niet weet, maar realiseer je dan ook meteen wél even dát er gewoon dingen zijn die je niet weet en dat je misschien toch iets meer "noob" bent dan je zelf denkt. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • SH4D3H
  • Registratie: Juni 2004
  • Laatst online: 27-02 23:46
@dev10: Ongelukkig voorbeeld.
De functie mysql_query(), die hier hoogstwaarschijnlijk gebruikt wordt, kan maar één query per keer uitvoeren.
Jouw injection-aanval zijn er twee en zal dus niet werken.

Toch iets waar de PHP-devvers goed over na hebben gedacht :)

Je kunt natuurlijk wel "dev10', anderveld='iets'" doen, waarmee het injection punt blijft.

Acties:
  • 0 Henk 'm!

  • dev10
  • Registratie: April 2005
  • Laatst online: 09:00
SH4D3H schreef op maandag 16 maart 2009 @ 15:32:
@dev10: Ongelukkig voorbeeld.
De functie mysql_query(), die hier hoogstwaarschijnlijk gebruikt wordt, kan maar één query per keer uitvoeren.
Jouw injection-aanval zijn er twee en zal dus niet werken.
Eehm. Ja, dat is waar ja. :X 8)7
Je kunt natuurlijk wel "dev10', anderveld='iets'" doen, waarmee het injection punt blijft.
Of als je een tabel hebt met gebruikers:

SQL:
1
dev10', admin = '1'


Anyway, unescaped data naar je database toesturen is een bad habbit.

Acties:
  • 0 Henk 'm!

  • Toppe
  • Registratie: Januari 2004
  • Laatst online: 12:04

Toppe

Oké ✅

Topicstarter
Ach jah,

Alles kan, als je nou eerst eens geen vijanden maakt, dan gaan ze ook geen sql injection uitvoeren.
het script ziet er zo ie zo niet uit, dacht ga een specs.tweaks.to 2 maken maar goed, hun versie is uit 2003...??

Donstil: Je moet kopen wat je wilt hebben. Niet wat je nodig hebt!


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Toppe schreef op maandag 16 maart 2009 @ 16:45:
Ach jah,

Alles kan, als je nou eerst eens geen vijanden maakt, dan gaan ze ook geen sql injection uitvoeren.
Met deze houding kom je echt nergens. Het is niet erg dat je dit niet in 1x goed doet, als je maar wil leren en het wil
verbeteren. Het fixen is max. minutenwerk.

Tip: maak ff je homepage url eeg, want je lekt echt te veel informatie nu. In het publiek queries tonen + op een forum toegeven dat je niets aan escaping doet is vragen om problemen, daar hoef je niet eens 'echte vijanden' voor te hebben.

[ Voor 25% gewijzigd door Voutloos op 16-03-2009 16:53 ]

{signature}


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Toppe schreef op maandag 16 maart 2009 @ 16:45:
Alles kan, als je nou eerst eens geen vijanden maakt, dan gaan ze ook geen sql injection uitvoeren.
Toppe schreef op maandag 16 maart 2009 @ 14:58:
Ik ben absoluut geen noob met php of mysql
I rest my case. :X

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Toppe schreef op maandag 16 maart 2009 @ 16:45:
Alles kan, als je nou eerst eens geen vijanden maakt, dan gaan ze ook geen sql injection uitvoeren.
Alles wat je op enige manier aan internet hangt kan en zal bruut en genadeloos aangevallen worden. De enige vraag is wanneer.

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 09:56

MueR

Admin Tweakers Discord

is niet lief

Toppe schreef op maandag 16 maart 2009 @ 16:45:
Alles kan, als je nou eerst eens geen vijanden maakt, dan gaan ze ook geen sql injection uitvoeren.
het script ziet er zo ie zo niet uit, dacht ga een specs.tweaks.to 2 maken maar goed, hun versie is uit 2003...??
Zo he, ben jij even wereldvreemd. Mag ik vragen waar je die wijsheden hebt opgedaan, dan blijf ik daar ver uit de buurt. SQL injection en XSS zijn HEEL BELANGRIJKE ZAKEN ongeacht of jij goed bent in het maken van vriendjes. Indien je echt serieus zo denk over dit soort dingen, doe ons programmeurs dan een lol en ga een nieuwe hobby zoeken ofzo?

offtopic:
Mocht je ooit websites gaan maken tegen betaling, laat het me even weten, dan waarschuw ik je klanten vast

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 22-09 21:04

MBV

@Curry:
Triton CMS Pro has encountered an error in
/var/www/html/website/core/classes/mysql.php

mysql_connect() [function.mysql-connect]: Access denied for user 'toppe'@'localhost' (using password: YES) (Line 32.)
[...]
Could not complete your query
SELECT forum_software, forum_address, mysql_hostname, mysql_database, mysql_username, mysql_password, mysql_prefix FROM tc_forum_integration;
[...]
SELECT name,value FROM tc_settings;
[...]
SELECT theme_style FROM tc_pages WHERE id='';
[...]
SELECT ip FROM tc_banned_ips WHERE ip='[snip]';
[...]
SELECT id FROM tc_pages ORDER BY id ASC LIMIT 1;
[...]
Ik denk dat de TS iets te laat is... antwoord op je vraag: binnen 20 minuten.

@TS: als je geen noob bent, dan de volgende tips:
- sql injection moet je jezelf tegen beschermen
- XSS net zo goed, of wil je je gebruikers een virus bezorgen/porno op jouw pagina laten kijken?
- error handling is heel belangrijk. Zodra een query mislukt moet je op z'n minst de verdere verwerking stoppen.
- debug output hoort alleen op een development-bak, op een publieke server zet je het in een error-log en laat je niemand meegenieten.
- je hebt zojuist vijanden gemaakt zie ik, door in een topic te roepen dat SQL-injection geen probleem is |:(

@MueR: second that :X

[ Voor 3% gewijzigd door MBV op 16-03-2009 17:29 ]


Acties:
  • 0 Henk 'm!

  • ID-College
  • Registratie: November 2003
  • Nu online
Tja, kan je verwachten.
Denk dat TS er iig iets van leert. Als je verklaart dat je geen noob bent, en nog nieteens iets aan sql injection doet, dan zegt dat iig genoeg.

TS: kijk eens naar mysql_real_escape_string ;)

Acties:
  • 0 Henk 'm!

  • Toppe
  • Registratie: Januari 2004
  • Laatst online: 12:04

Toppe

Oké ✅

Topicstarter
ach ja het is maar wat je belangrijk vind, als je gaat kijken naar de grote websites zijn zelfs die niet eens beschermt... Zou tweakers goed zijn;)?

Donstil: Je moet kopen wat je wilt hebben. Niet wat je nodig hebt!


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 10:47

TeeDee

CQB 241

Toppe schreef op maandag 16 maart 2009 @ 17:48:
ach ja het is maar wat je belangrijk vind,
Jij vindt het niet belangrijk als je hele database leeg is?
offtopic:
* TeeDee vind het trouwens niet zo netjes mocht de DB van TS door iemand van GoT leeggegooid zijn

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

TeeDee schreef op maandag 16 maart 2009 @ 17:50:
[...]

Jij vindt het niet belangrijk als je hele database leeg is?
offtopic:
* TeeDee vind het trouwens niet zo netjes mocht de DB van TS door iemand van GoT leeggegooid zijn
Als dat zo is: inderdaad. Mocht dat zo zijn en wij krijgen er lucht van dan is dat reden voor een directe ban. Aan de andere kant zou het dus meteen ook bewijzen dat je geen vijanden nodig hebt.

En tsja, als jij het beveiliging van je site niet belangrijk genoeg vindt om één extra functie over je input heen te gooien, dan kun je maar beter direct stoppen met programmeren en een andere hobby zoeken. Als je net zo denkt over alle andere beveiligingsmaatregelen die je kan treffen lopen alle andere klanten van je webhoster het risico defaced te worden.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
MBV schreef op maandag 16 maart 2009 @ 17:21:
@Curry:

[...]

Ik denk dat de TS iets te laat is... antwoord op je vraag: binnen 20 minuten.
Als ik er achter kom dat 't iemand van hier is dan is 'ie desondanks dat TS beter had moeten oppassen nog niet jarig... :N

@ :w NMe :P

[ Voor 47% gewijzigd door RobIII op 16-03-2009 17:55 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Toppe
  • Registratie: Januari 2004
  • Laatst online: 12:04

Toppe

Oké ✅

Topicstarter
Wat doen mensen hier moelijk?

Dreigende opmerkingen zijn nergens voor nodig. Mensen proberen je hier alleen, blijkbaar terecht, te waarschuwen.

Mag dit topic een slotje?

[ Voor 51% gewijzigd door Woy op 16-03-2009 19:23 ]

Donstil: Je moet kopen wat je wilt hebben. Niet wat je nodig hebt!


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Aangezien het topic niet zo veel nut meer heeft, behalve het aanvallen van de TS, doe ik dit topic idd maar op slot.

Al hoop ik persoonlijk zoals de rest wel dat de TS toch beseft dat het belangrijk is om jezelf te beschermen tegen SQL Injection en andere aanvallen. Er kan altijd een foutje in je code sluipen, maar om nou bewust gaten in je code te laten, en maar op het goede gedrag van alle andere mensen te hopen is wel een beetje kortzichtig.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”

Pagina: 1

Dit topic is gesloten.