15. juli 2007 - 19:43
Der er
23 kommentarer og 1 løsning
Jeg får en underlig fejl
Hejsa Eksperter Jeg får følgende fejl: 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 '' at line 2 Her er min kode: <? include('connect.php'); $file=$_FILES['file']['name']; move_uploaded_file($_FILES['file']['tmp_name'], $file); mysql_query("INSERT INTO products (id,category,undercategory,overskrift,descr,price,varenr,billede) VALUES ('','$_POST[category]','$_POST[undercategory]','$_POST[item_title]','$_POST[item_desc]','$_POST[item_price]','$_POST[item_nr]',$file") or die(mysql_error()); echo"Yes" or die(mysql_error()); ?> Hvad er det?
Annonceindlæg fra Academic Work Denmark A/S
Er det ikke for du tildeler '' til id?
Nej. Nu ser min kode således ud, og jeg får stadigvæk den samme fejl: <? include('connect.php'); $file=$_FILES['file']['name']; move_uploaded_file($_FILES['file']['tmp_name'], $file); mysql_query("INSERT INTO products (category,undercategory,overskrift,descr,price,varenr,billede) VALUES ('$_POST[category]','$_POST[undercategory]','$_POST[item_title]','$_POST[item_desc]','$_POST[item_price]','$_POST[item_nr]','$file'") or die(mysql_error()); echo"Yes"; ?>
Prøv at lave en debug udskrift af din SQL-sætning. På den måde får man somregelæ en ide om hvor fejlen er kommet fra: <? include('connect.php'); $file = $_FILES['file']['name']; move_uploaded_file($_FILES['file']['tmp_name'], $file); $sql = "INSERT INTO products (category,undercategory,overskrift,descr,price,varenr,billede) VALUES ('$_POST[category]','$_POST[undercategory]','$_POST[item_title]','$_POST[item_desc]','$_POST[item_price]','$_POST[item_nr]','$file'"; echo "DEBUG: " . $sql; mysql_query($sql) or die(mysql_error()); echo "Yes"; ?>
DEBUG: INSERT INTO products (category,undercategory,overskrift,descr,price,varenr,billede) VALUES ('Elegance','Sammlerstück','df','her indtastes nyheden','fvb','123','68hardtop_thumb_02.jpg'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 '' at line 2
Nu er begge forslag også hul i hovedet, da enhver scriptkiddie kunne slette din side, og alt dit data uden problemer. Derudover er der syntaxfejl mht. at bruge string keys uden quotes, og koden er utrolig grim pga. lange linjer, der mangler check om der overhovedet er lavet requests til siden osv. Jeg vil anbefale noget ala. dette her istedet, det har da den mindste form for sikkerhed. <?php include_once 'connect.php'; if(isset($_FILES['file']['name'])) { $filename = $_FILES['file']['name']; move_uploaded_file($_FILES['file']['tmp_name'],$filename); $sql = "INSERT INTO products( category, undercategory, overskrift, descr, price, varenr, billede ) VALUES ('%s','%s','%s','%s','%s','%s','%s')"; $sql = sprintf($sql, mysql_real_escape_string($_POST['category']), mysql_real_escape_string($_POST['undercategory']), mysql_real_escape_string($_POST['item_title']), mysql_real_escape_string($_POST['item_desc']), mysql_real_escape_string($_POST['item_price']), mysql_real_escape_string($_POST['item_nr']), mysql_real_escape_string($filename) ); $res = mysql_query($sql); if(!$res) { die(mysql_error()); } echo 'Done'; } ?>
Derudover bør du rette til de rigtige typer i sprintf() , go go tid til at læse !
Prøv: INSERT INTO products (category,undercategory,overskrift,descr,price,varenr,billede) VALUES ("'".$_POST[category]."'","'".$_POST[undercategory]."'","'".$_POST[item_title]."'","'".$_POST[item_desc]."'","'".$_POST[item_price]."'","'".$_POST[item_nr]."'","'".$file."'" /y
Det må jeg sige windscape. Flot! Men vil du forklare mig følgende ting: Hvordan ville en hacker kunne gå ind i mit system? Hvorfor er det svagt?
Hvis vi lige vender tilbage til den oprindelige fejl så skyldes den at du mangler en afsluttende ) i dit values-led. Derudover bør du nærlæse hvad windcape skriver om sikkerhed.
15. juli 2007 - 20:11
#10
lesp> Tag en søgning på Google på "SQL Injection". Dette er navnet på den sårbarhed der snakkes om. Det er skræmmende læsning som enhver webudvikler bør være hjemmevandt i.
15. juli 2007 - 20:18
#11
"Hvordan ville en hacker kunne gå ind i mit system? Hvorfor er det svagt?" $_POST[item_title] = '; DELETE FROM products -- ... og du kan vinke farvel til din produkt tabel :-) For den sags skyld kunne jeg have slettet hele databasen sådan. Det er ret nemt, og der er mange artikler om hvordan man gør, fordi det gavner sikkerheden.
15. juli 2007 - 20:20
#12
og måske skulle jeg så sige at "'; DELETE FROM products --" + mysql_real_escape_string = "\'; DELETE FROM products --" hvilket ikke giver nogen som helst problemer, blot et underligt produktnavn. Derudover skal du jo alligevel escape hvis du vil have tegn som ' (singlequote) i dine titler. "Foobar's holiday"
15. juli 2007 - 20:23
#13
""Hvordan ville en hacker kunne gå ind i mit system? Hvorfor er det svagt?" $_POST[item_title] = '; DELETE FROM products -- ... og du kan vinke farvel til din produkt tabel :-) For den sags skyld kunne jeg have slettet hele databasen sådan. Det er ret nemt, og der er mange artikler om hvordan man gør, fordi det gavner sikkerheden." Kan du vise mig nogle artikler? Det er noget jeg ikke ved ret meget om, som jeg gerne vil sætte mig mere ind i.
15. juli 2007 - 20:40
#14
Hvad er der så galt i denne linje? move_uploaded_file($_FILES['file']['tmp_name'], "images/" . basename ($filename));
15. juli 2007 - 20:51
#16
Jeg vil gerne nu flytte billedet til mappen "images"
15. juli 2007 - 21:23
#17
Ser ikke ud til at være noget galt med den, men du skal nok gøre det lidt anderledes $filename = $_FILES['file']['name']; $filename = 'images/'.basename($filename); move_uploaded_file($_FILES['file']['tmp_name'],$filename); for at din database også får den rigtige værdi.
15. juli 2007 - 21:36
#18
Den uploader bare ikke billedet på serveren nu...
15. juli 2007 - 21:47
#19
Mht. sikkerhed er der vel også brug for at tjekke om det virkelig er et billede som bliver uploaded. Enhver kan jo uploade filer med ondsindet kode med det script.
15. juli 2007 - 22:20
#20
Det skal være en administrator som uploader billeder, så det er ikke noget problem.
15. juli 2007 - 22:41
#21
Men som sagt virker følgende ikke: $filename = $_FILES['file']['name']; $filename = 'images/'.basename($filename); move_uploaded_file($_FILES['file']['tmp_name'],$filename);
16. juli 2007 - 09:44
#22
Nu er beskyttelse af den slags nu nemt nok :-) $allowed = array('jpg','jpeg','gif','png'); $ext = substr($_FILES['file']['name'],strrpos($_FILES['file']['name'])+1); if(!in_array($ext,$allowed)) { die('forkert filtype!'); }
21. juli 2007 - 12:36
#23
Det virker s*u ikke det med at uploade til images/ Og jeg forstår stadigvæk ikke, windscape, hvordan du kan slette det hele uden overhovedet at have adgang til FTP eller MySQL. Jeg har læst nogle artikler om MyAQL injection.
27. november 2007 - 13:12
#24
Jeg lukker
Vi tilbyder markedets bedste kurser inden for webudvikling