sql geenf via php error, niet via direct input
ik heb hier dit script:
en dit is de output hiervan:
bij het doorgeven van het ip gaat het dus mis.
maar als ik nu naar phpmyadmin ga, en daar via sql UPDATE server SET online=1,poort=12563 WHERE ip='92.254.84.232 laat draaien, doet ie t weer wel.
heeft iemand een idee?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
function connect(){
$online = $_GET["online"]; //username that the game provides
$ip = $_GET["ip"]; //password that the game provides
$poort = $_GET["poort"];
echo $ip."<br>";
echo "UPDATE server SET online=$online,poort=$poort WHERE ip=$ip<br>";
$a=mysql_query("UPDATE server SET online=$online,poort=$poort WHERE ip=$ip") or die( mysql_error());
echo $a.";";
echo mysql_fetch_array($a);
}
?>
function connect(){
$online = $_GET["online"]; //username that the game provides
$ip = $_GET["ip"]; //password that the game provides
$poort = $_GET["poort"];
echo $ip."<br>";
echo "UPDATE server SET online=$online,poort=$poort WHERE ip=$ip<br>";
$a=mysql_query("UPDATE server SET online=$online,poort=$poort WHERE ip=$ip") or die( mysql_error());
echo $a.";";
echo mysql_fetch_array($a);
}
?>
en dit is de output hiervan:
Quote:
'92.254.84.232'
UPDATE server SET online=1,poort=12563 WHERE ip='92.254.84.232'
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 ''92.254.84.232'' at line 1
UPDATE server SET online=1,poort=12563 WHERE ip='92.254.84.232'
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 ''92.254.84.232'' at line 1
bij het doorgeven van het ip gaat het dus mis.
maar als ik nu naar phpmyadmin ga, en daar via sql UPDATE server SET online=1,poort=12563 WHERE ip='92.254.84.232 laat draaien, doet ie t weer wel.
heeft iemand een idee?
Gesponsorde koppelingen:
Ik weet niet of het kwaad kan, maar waarom staat er een br-tag bij in je query (regel 7)
+ breng je variabelen eens buiten de haken
+ breng je variabelen eens buiten de haken
Gewijzigd op 15/06/2010 08:47:49 door Moe BE
Je mist de enkele quotes in de query.
Script is lek => SQL-Injection.
Script is lek => SQL-Injection.
Let op SQL-injection, zoals SanThe al vermeldt, gebruik mysql_real_escape_string. Verder is het probleem waarschijnlijk dat je het IP adres opslaat als integer, terwijl dit als varchar moet, naar mijn weten. Let wel op dat er dan quotes om het IP heen moeten.
Je zit onnodig variabelen te kopiëren, zoals SanThe al zegt is je script nu verre van veilig, en je zit een resource te echo-en op line 9, waar je echt totaal niks aan hebt, aangezien je er totaal geen nuttige informatie uit verkrijgt. Als laatste doe je een fetch op het resultaat van een update query. Update is totaal iets anders dan een SELECT met sql, dus je bent daar in principe níks aan het fetchen. Daar komt bij, waarom heet je functie connect? Het update een record uit je database, maar maakt toch echt geen verbinding met een database, terwijl de naam "connect" is... Oja, en omdat elke vorm van foutafhandeling ontbreekt krijgt de normale bezoeker ook mooi zo'n error te zien, wat niet helemaal de bedoeling is in een productieomgeving.
edit: @SanThe hieronder: Excuséz moi, beetje over hoofd gezien, nu gefixed. Anyway, er moet sowiezo even hard naar het script gekeken worden...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
function connect(){
$sql = "UPDATE server SET online=".mysql_real_escape_string($_GET['online']).",poort=".mysql_real_escape_string($_GET['poort'])." WHERE ip='".mysql_real_escape_string($_GET['ip']."'";
if(!$result = mysql_query($sql){
trigger_error('Query foutgegaan');
}
else{
//nu weet je dat mysql in ieder geval geen error heeft gegeven
echo 'Query gelukt';
echo 'Ik ga geen fetch gebruiken, omdat we geen gegevens OPHALEN uit een database';
}
}
?>
function connect(){
$sql = "UPDATE server SET online=".mysql_real_escape_string($_GET['online']).",poort=".mysql_real_escape_string($_GET['poort'])." WHERE ip='".mysql_real_escape_string($_GET['ip']."'";
if(!$result = mysql_query($sql){
trigger_error('Query foutgegaan');
}
else{
//nu weet je dat mysql in ieder geval geen error heeft gegeven
echo 'Query gelukt';
echo 'Ik ga geen fetch gebruiken, omdat we geen gegevens OPHALEN uit een database';
}
}
?>
edit: @SanThe hieronder: Excuséz moi, beetje over hoofd gezien, nu gefixed. Anyway, er moet sowiezo even hard naar het script gekeken worden...
Gewijzigd op 15/06/2010 12:29:14 door Afra ca
@Afra: Bij het ip-nummer.
SanThe Nvt op 15/06/2010 09:37:49:
Je mist de enkele quotes in de query.



