/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Hvorfor? (Fejl ved brug af enkelt single-q~
Fra : Stig Sørensen


Dato : 23-02-08 14:41

Hej gruppe.

Jeg er ved at tabe alt håret og må be om hjælp.

Jeg har en fungerende side, hvor jeg kan ændre noget tekst i et
textarea (fra en mySQL database) og uanset hvormange double-quotes/
single-quotes jeg skriver i dette textarea, så bliver det succesfuldt
SQL UPDATE til mySQL databasen igen, uden fejl (og vises fint når dét
skal gøres.)


Nu er jeg så i gang med en anden side, og er igang med præcist det
samme. Ændre tekst i et textarea (indhold fra mySQL Database) med ved
ulige single-quote i textarea (og submit) kommer der fejl:

"Error: 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 '1203802330', make_id='2' WHERE id = '213'' at line 1"

For mig ser de helt ens ud funktionsmæssigt, så kan ikke se hvorfor
det fejler ved textarea #2 og ikke ved #1.



Textarea #1> (kun relateret kode er gengivet)


$navn = $_POST['navn'];
$email = $_POST['email'];
$link = $_POST['link'];
$titel = $_POST['titel'];
$beskrivelse = $_POST['beskrivelse'];
$formsent = $_POST['formsent'];
$id = $_POST['id'];


if ($formsent == "1") {

$sql_updatee = "UPDATE slk_partnerlinks.toplist SET titel='$titel',
beskrivelse='$beskrivelse', link='$link', navn='$navn', email='$email'
WHERE id = '$id'";
if (!mysql_query($sql_updatee))
{
die('Error: ' . mysql_error());
}


[SNIP]

<p>Beskrivelse:<br /><textarea name='beskrivelse' rows='4' cols='40'
tabindex='1'>".$row['beskrivelse']."</textarea></p>


$_POST['beskrivelse'] bliver ikke kørt gennem htmlentities eller
ligende på noget tidspunkt.




Textarea #2>

$utid = time();
$comments = $_POST['comments'];
$made_year = $_POST['made_year'];
$mileage = $_POST['mileage'];
$price = $_POST['price'];
$make_id = $_POST['make'];
$id = $_GET['id'];

$sql_update = "UPDATE slk_billigscooter.phpbb_garage SET made_year
='$made_year', mileage ='$mileage', price ='$price',
comments='$comments', date_updated ='$utid', make_id='$make_id' WHERE
id = '$id'";
if (!mysql_query($sql_update))
{
die('Error: ' . mysql_error());
}


[SNIP]

<p style='formtext'>Beskrivelse: $msg_beskrivelse<br /></p><textarea
name='comments' rows='24' cols='100' tabindex='1'>".
$row['comments']."</textarea><br />\n

$_POST['comments'] bliver ikke kørt gennem htmlentities eller ligende.
Ved denne textarea, ved Submit af et ulige single-quote i textarea
kommer mySQL fejlen.
Hvorfor når den ikke kommer ved den anden textarea?
Eller er det umulig at sige uden hele koden foran sig?

- Ingen andre fejl, hvis jeg undgår ulige single-quotes så bliver
indholdet i textareaet korrekt SQL UPDATE til databasen.

 
 
Christian Hansen (23-02-2008)
Kommentar
Fra : Christian Hansen


Dato : 23-02-08 23:03

Hej Stig

Du bør escape alt input til din mysqldatabase for at undgå mysqlinjection.

Mit gæt er, at de to sider kører på hvert sit webhotel. På det ene
webhotel er magic quotes :
<http://dk.php.net/manual/da/function.get-magic-quotes-gpc.php> slået
til og på det andet ikke

Magic quotes sørger for at alt, der kommer ind via get og post til dit
script, bliver escapet, hvorfor du uden problemer kan opdatere din mysql
på det ene webhotel, hvor det er slået til, mens du har problemer på det
andet.

Når man escaper sætter man \ foran det tegn man escaper. eksempelvis
'dette er TDC\'s kabel'.

Når du smider indhold i en database bør du anvende
mysql_real_escape_string() :
<http://dk2.php.net/manual/da/function.mysql-real-escape-string.php> -
bemærk noten om magic quotes i forbindelse med mysql_real_escape_string

Mvh Christian

Stig Sørensen wrote:
> Hej gruppe.
>
> Jeg er ved at tabe alt håret og må be om hjælp.
>
> Jeg har en fungerende side, hvor jeg kan ændre noget tekst i et
> textarea (fra en mySQL database) og uanset hvormange double-quotes/
> single-quotes jeg skriver i dette textarea, så bliver det succesfuldt
> SQL UPDATE til mySQL databasen igen, uden fejl (og vises fint når dét
> skal gøres.)
>
>
> Nu er jeg så i gang med en anden side, og er igang med præcist det
> samme. Ændre tekst i et textarea (indhold fra mySQL Database) med ved
> ulige single-quote i textarea (og submit) kommer der fejl:
>
> "Error: 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 '1203802330', make_id='2' WHERE id = '213'' at line 1"
>
> For mig ser de helt ens ud funktionsmæssigt, så kan ikke se hvorfor
> det fejler ved textarea #2 og ikke ved #1.
>
>
>
> Textarea #1> (kun relateret kode er gengivet)
>
>
> $navn = $_POST['navn'];
> $email = $_POST['email'];
> $link = $_POST['link'];
> $titel = $_POST['titel'];
> $beskrivelse = $_POST['beskrivelse'];
> $formsent = $_POST['formsent'];
> $id = $_POST['id'];
>
>
> if ($formsent == "1") {
>
> $sql_updatee = "UPDATE slk_partnerlinks.toplist SET titel='$titel',
> beskrivelse='$beskrivelse', link='$link', navn='$navn', email='$email'
> WHERE id = '$id'";
> if (!mysql_query($sql_updatee))
> {
> die('Error: ' . mysql_error());
> }
>
>
> [SNIP]
>
> <p>Beskrivelse:<br /><textarea name='beskrivelse' rows='4' cols='40'
> tabindex='1'>".$row['beskrivelse']."</textarea></p>
>
>
> $_POST['beskrivelse'] bliver ikke kørt gennem htmlentities eller
> ligende på noget tidspunkt.
>
>
>
>
> Textarea #2>
>
> $utid = time();
> $comments = $_POST['comments'];
> $made_year = $_POST['made_year'];
> $mileage = $_POST['mileage'];
> $price = $_POST['price'];
> $make_id = $_POST['make'];
> $id = $_GET['id'];
>
> $sql_update = "UPDATE slk_billigscooter.phpbb_garage SET made_year
> ='$made_year', mileage ='$mileage', price ='$price',
> comments='$comments', date_updated ='$utid', make_id='$make_id' WHERE
> id = '$id'";
> if (!mysql_query($sql_update))
> {
> die('Error: ' . mysql_error());
> }
>
>
> [SNIP]
>
> <p style='formtext'>Beskrivelse: $msg_beskrivelse<br /></p><textarea
> name='comments' rows='24' cols='100' tabindex='1'>".
> $row['comments']."</textarea><br />\n
>
> $_POST['comments'] bliver ikke kørt gennem htmlentities eller ligende.
> Ved denne textarea, ved Submit af et ulige single-quote i textarea
> kommer mySQL fejlen.
> Hvorfor når den ikke kommer ved den anden textarea?
> Eller er det umulig at sige uden hele koden foran sig?
>
> - Ingen andre fejl, hvis jeg undgår ulige single-quotes så bliver
> indholdet i textareaet korrekt SQL UPDATE til databasen.

Stig Sørensen (23-02-2008)
Kommentar
Fra : Stig Sørensen


Dato : 23-02-08 22:31

On 23 Feb., 23:02, Christian Hansen <chr...@fundanemt.com> wrote:
> Hej Stig
>
> Du bør escape alt input til din mysqldatabase for at undgå mysqlinjection.
>
> Mit gæt er, at de to sider kører på hvert sit webhotel. På det ene
> webhotel er magic quotes :
> <http://dk.php.net/manual/da/function.get-magic-quotes-gpc.php> slået
> til og på det andet ikke


De køres begge hos Gigahost, hvor jeg har mulighed for at ændre
php.ini for hvert domæne.
Indstillingerne er de samme.
Men jeg har givet op, og gider ikke finde ud af hvorfor magic quotes
tilsyneladende virker på det ene jeg har lavet, men ikke det andet.

;)



> Når du smider indhold i en database bør du anvende
> mysql_real_escape_string() :
> <http://dk2.php.net/manual/da/function.mysql-real-escape-string.php> -
> bemærk noten om magic quotes i forbindelse med mysql_real_escape_string

Super, det vidste jeg ikke, tak for det.
Men jeg skal så både igennem stripslashes og så mysql-real-escape-
string?
Eller skal jeg slå magic_quotes fra og nøjes med mysql-real-escape-
string?


Et tillægsspørgsmål, hvis jeg må? ;)


Skal jeg også escape indhold i en form når det vises i selve formen?


Sådan hurtigt forklaret:

Ens profil kan ændres. Indholdet vises i en form, man ændre tekst mv.
og submitter.
Dét indhold der vises i formen, skal det også escapes?

Og, jeg har validering på formen. Feks, hvis et tekst-felt er tomt,
men skal udfyldes, så vises det _nye indtastede tekst_ i formen (med
en fejlmarkering hos det tomme felt), men skal dette nye indtastede
tekst ($_POST) også escapes? Det bliver jo ikke submittet til
databasen endnu, men bliver gengivet i formen.

Jeg har prøvet lidt selv at se om jeg kan finde huller ved
ovenstående, og ved fejl på validering, kan jeg da bryde designet af
en form, ved at indtaste noget a la: " /> test
Så vil ' test ' vises uden for formen på siden feks. Men kunne dette
misbruges også?

Problemet med at escape indholdet der kan blive gengivet i formen
(fejl ved validering) vil alt tekst jo se anderledes ud for brugeren
end da han indtastede det. Ved hvert " vil der være \" osv. Og
submitter man igen ved fejl ved validering vil teksten i formen være \
\" osv.

Håber jeg har forklaret mig godt nok :)

Rigtig god søndag

Stig Sørensen (23-02-2008)
Kommentar
Fra : Stig Sørensen


Dato : 23-02-08 23:14

Ok, jeg kan ikke lade være alligevel med at finde ud af hvorfor Side
#1 automatisk escaper alt.

Vil nogen være så venlige at gå herhen:
http://partnerlinks.dk/toplist/tilmeld.php

Udfyld felterne således cirka:

Navn'en
invalid@invalidxxxxxx.com
http://test.com
Titel
Blablabla


(Specielt Navn'en med single quote er vigtig.)
Efter submit kommer du til en ny side, læg mærke til at navn bliver
overført med GET.
I adresse linien er der escapet med \ men i teksten på den nye side er
der escapet med \\\.

Hvorfor? Jeg kører ikke Navn igennem noget escape eller ligende, og
magic quotes er slået fra?

Bliver gråhåret :(

Stig Sørensen (23-02-2008)
Kommentar
Fra : Stig Sørensen


Dato : 23-02-08 23:24

On 24 Feb., 07:13, "Stig Sørensen" <stig.soren...@gmail.com> wrote:
> Ok, jeg kan ikke lade være alligevel med at finde ud af hvorfor Side
> #1 automatisk escaper alt.
>
>  Vil nogen være så venlige at gå herhen:http://partnerlinks.dk/toplist/tilmeld.php
>
> Udfyld felterne således cirka:
>
> Navn'en
> inva...@invalidxxxxxx.comhttp://test.com
> Titel
> Blablabla
>
> (Specielt Navn'en med single quote er vigtig.)
> Efter submit kommer du til en ny side, læg mærke til at navn bliver
> overført med GET.
> I adresse linien er der escapet med \ men i teksten på den nye side er
> der escapet med \\\.
>
> Hvorfor? Jeg kører ikke Navn igennem noget escape eller ligende, og
> magic quotes er slået fra?
>
> Bliver gråhåret :(



En phpinfo() afslører at magic_quotes er ON selvom jeg i
kontrolpanelet har slået det fra.
Det forklarer jo en hel del.
Jeg vil kontakte Gigahost og vender tilbage.

Stig Sørensen (23-02-2008)
Kommentar
Fra : Stig Sørensen


Dato : 23-02-08 23:30

On 24 Feb., 07:23, "Stig Sørensen" <stig.soren...@gmail.com> wrote:

> En phpinfo() afslører at magic_quotes er ON selvom jeg i
> kontrolpanelet har slået det fra.
> Det forklarer jo en hel del.
> Jeg vil kontakte Gigahost og vender tilbage.

Undskyld jeg skriver med mig selv.
Men en phpinfo() afslører også at magic_quotes er ON på side #2 hvor
intet blev escapet med mindre jeg selv brugte
mysql_real_escape_string() feks.

Jeg er lige vidt igen..
Kunne det være i hosten opsætning?

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste