|
| Hente data fra "usynlig" kilde.... Fra : Dennis Munding |
Dato : 19-11-05 23:39 |
|
Hej NG!
Jeg har et lille problem, som jeg håber, at I kan hjælpe mig med...
Jeg har en database, hvor der er oprettet nogle brugere med brugernavn(user)
og kodeord(pass)...
I koden herunder tjekkes der om det er korrekt brugernavn og kodeord...
<?
$db=mysql_connect("SERVER", "BRUGER", "PASSWORD"); mysql_select_db("TABLE");
$result = mysql_query("SELECT NULL FROM table WHERE user =
'".$_POST['user']."' AND pass = '".$_POST['pass']."'") or die
(mysql_error());
if ($antal_raekker=mysql_num_rows($result)>0){
$_SESSION['logget_ind']=1;
$_SESSION['user'] = $user;
$_SESSION['pass'] = $pass;
}
else....
Men der er en tredje kolonne i min tabel - en for brugerne skjult kolonne -
hvor navnet på brugeren står...
Og nu kunne jeg godt tænke mig at hente det ud samtidig med brugernavnet og
kodeordet, fordi jeg gerne vil byde vedkommende velkommen, når han/hun er
logget ind...
Det nemmeste ville jo være at bruge brugernavnet, men jeg vil hellere have
det rigtige navn hentet, så jeg kan skrive denne stump kode:
<p><? echo "Velkommen $name!"; ?></p>
Hvad skal jeg tilføje til ovenstående kode for at få det til at virke - jeg
har prøvet det meste snart, men der bliver ikke udskrevet noget som helst,
så jeg er ved at give fortabt...??
På forhånd mange tak for hjælpen!
Og nej! - Der kommer ikke et link til en side, da de er beskyttede!
Jeg kan kun være behjælpelig med redigeret kildekode - evt. på
www.pastebin.dk...
Med venlig hilsen
--
Dennis Munding
Web-master
http://www.skovaa-munding.dk/, http://www-mundings-memorial.dk/
http://www.cantica.dk/, http://www.eds-denmark.dk/
| |
Christoffer (19-11-2005)
| Kommentar Fra : Christoffer |
Dato : 19-11-05 23:58 |
|
"Dennis Munding" <mail@invalid.com> skrev i en meddelelse
news:437fa98d$0$11700$ba624c82@nntp02.dk.telia.net...
> Men der er en tredje kolonne i min tabel - en for brugerne skjult
> kolonne - hvor navnet på brugeren står...
> Og nu kunne jeg godt tænke mig at hente det ud samtidig med brugernavnet
> og kodeordet, fordi jeg gerne vil byde vedkommende velkommen, når han/hun
> er logget ind...
>
> Det nemmeste ville jo være at bruge brugernavnet, men jeg vil hellere have
> det rigtige navn hentet, så jeg kan skrive denne stump kode:
>
> <p><? echo "Velkommen $name!"; ?></p>
SELECT * FROM ... bruger * i din query henter du samtlige data'er i rækken
ud.
--
Christoffer
| |
Dennis Munding (20-11-2005)
| Kommentar Fra : Dennis Munding |
Dato : 20-11-05 09:25 |
|
Hej Christoffer!
"Christoffer" <christoffer@buur.info> skrev i en meddelelse
news:437faddd$0$99989$edfadb0f@dread16.news.tele.dk...
> SELECT * FROM ... bruger * i din query henter du samtlige data'er i rækken
> ud.
Det ved jeg, at det normalt gør, men jeg kan af en eller anden grund ikke
hente den tredje post ud....??
Og vil det iøvrigt ikke lave "kaos" i min log_ind-session, når jeg erstatter
"NULL" med "*"??
Med venlig hilsen
--
Dennis Munding
Web-master
http://www.skovaa-munding.dk/, http://www-mundings-memorial.dk/
http://www.cantica.dk/, http://www.eds-denmark.dk/
| |
Benny Nissen (20-11-2005)
| Kommentar Fra : Benny Nissen |
Dato : 20-11-05 10:37 |
|
Dennis Munding wrote:
> Og vil det iøvrigt ikke lave "kaos" i min log_ind-session, når jeg erstatter
> "NULL" med "*"??
Så erstat NULL med [bruger_navn], hvor [bruger_navn] er navnet på det
felt, du opbevarer brugerens navn i. Det ændrer ikke på din login-funktion.
--
Benny Nissen
| |
Dennis Munding (20-11-2005)
| Kommentar Fra : Dennis Munding |
Dato : 20-11-05 12:03 |
|
Hej Benny!
"Benny Nissen" <news@bennynissen.dk> skrev i en meddelelse
news:438043b4$0$84023$edfadb0f@dtext01.news.tele.dk...
> Dennis Munding wrote:
>
>> Og vil det iøvrigt ikke lave "kaos" i min log_ind-session, når jeg
>> erstatter "NULL" med "*"??
>
> Så erstat NULL med [bruger_navn], hvor [bruger_navn] er navnet på det
> felt, du opbevarer brugerens navn i. Det ændrer ikke på din
> login-funktion.
Det har jeg så prøvet - det udskriver heller ikke noget....??
Jeg vender tilbage senere med lidt mere info - skal ud af døren nu....
Med venlig hilsen
--
Dennis Munding
Web-master
http://www.skovaa-munding.dk/, http://www-mundings-memorial.dk/
http://www.cantica.dk/, http://www.eds-denmark.dk/
| |
Dennis Munding (21-11-2005)
| Kommentar Fra : Dennis Munding |
Dato : 21-11-05 13:01 |
|
Hej NG!
>> Dennis Munding wrote:
> Jeg vender tilbage senere med lidt mere info - skal ud af døren nu....
Her er så lidt info:
Login-scriptet er hentet her:
http://www.hjemmesideskolen.dk/scripts/phpmysql/default.php
Måden jeg har valgt at bruge det på, er som følger...
En ny bruger oprettes af mig via en skjult fil, hvor jeg indtaster ønsket
brugernavn, adgangskode og personens rigtige navn - 3 felter ialt!
Når brugeren logger ind sker det (som normalt?!?) ved at han/hun indtaster
brugernavn og password, hvorefter de tjekkes i databasen...
Mit "problem" er nu, at jeg gerne vil byde brugeren velkommen med en lille
hilsen, som skal indeholde brugerens rigtige navn!
Som I kan se i starten af tråden her, så bliver der sat en session, når
brugeren logger ind...
Hvordan får jeg flettet navnet ind i denne session - for uanset hvad jeg har
prøvet hidtil, så udskriver den intet, når jeg skriver følgende på de
beskyttede sider:
<?php echo "Velkommen $brugerens_rigtige_navn!"; ?>
Men hvis jeg skriver:
<?php echo "Velkommen $brugernavn!"; ?>
....så er der ingen problemer...?!?
Hvad gør jeg forkert / hvor skal brugerens rigtige navn flettes ind??
På forhånd mange tak for alle forslag og al hjælp!!
Med venlig hilsen
--
Dennis Munding
Web-master
http://www.skovaa-munding.dk/, http://www-mundings-memorial.dk/
http://www.cantica.dk/, http://www.eds-denmark.dk/
| |
Jesper H (23-11-2005)
| Kommentar Fra : Jesper H |
Dato : 23-11-05 08:25 |
|
Hvis du kigger på eksemplet, bruger de faktisk begge dele.
Dokumentationen for get_magic_quotes_gpc() siger, at hvis magic_quotes
er slået til, vil funktionen returnere 1 (TRUE), ellers vil den
returnere 0 (FALSE).
Så i det eksempel, de bruger, tjekker de først om magic_guotes er
slået til. Hvis IKKE (bemærk udråbstegnet, fungerer som NOT), bruger
de addslashes() når de henter information ud fra deres POST-variabel.
Hvis det ER slået til, kommer man istedet over til det, der står i
ELSE-rutinen, hvormed man ikke bruger addslashes(), da de allerede er
tilføjet:
<?php
if (!get_magic_quotes_gpc()) {
$lastname = addslashes($_POST['lastname']);
} else {
$lastname = $_POST['lastname'];
}
$sql = "INSERT INTO lastnames (lastname) VALUES ('$lastname')";
?>
Ja, så kan man se, at lige efter bliver variablen $lastname, som nu
kan betragtes som "sikker", brugt i mySQL-query'et.
Så deres eksempel bruges sådan set til at sikre, at der ER slashes
foran gnyfferne, men at det IKKE gøres to gange (pga. magic_quotes OG
addslashes).
Mvh
Jesper
| |
Dennis Munding (23-11-2005)
| Kommentar Fra : Dennis Munding |
Dato : 23-11-05 11:47 |
|
Hej Jesper!
"Jesper H" <jesper.haukrogh@gmail.com> skrev i en meddelelse
news:1132730679.634279.204670@g43g2000cwa.googlegroups.com...
Hvis du kigger på eksemplet, bruger de faktisk begge dele.
Dokumentationen for get_magic_quotes_gpc() siger, at hvis magic_quotes
er slået til, vil funktionen returnere 1 (TRUE), ellers vil den
returnere 0 (FALSE).
Så i det eksempel, de bruger, tjekker de først om magic_guotes er
slået til. Hvis IKKE (bemærk udråbstegnet, fungerer som NOT), bruger
de addslashes() når de henter information ud fra deres POST-variabel.
Hvis det ER slået til, kommer man istedet over til det, der står i
ELSE-rutinen, hvormed man ikke bruger addslashes(), da de allerede er
tilføjet:
<?php
if (!get_magic_quotes_gpc()) {
$lastname = addslashes($_POST['lastname']);
} else {
$lastname = $_POST['lastname'];
}
$sql = "INSERT INTO lastnames (lastname) VALUES ('$lastname')";
?>
Ja, så kan man se, at lige efter bliver variablen $lastname, som nu
kan betragtes som "sikker", brugt i mySQL-query'et.
Så deres eksempel bruges sådan set til at sikre, at der ER slashes
foran gnyfferne, men at det IKKE gøres to gange (pga. magic_quotes OG
addslashes).
Selvfølgelig - havde overset udråbstegnet... :-/
(På mæ briller - og la os se hvor æ driller!)
Med venlig hilsen
--
Dennis Munding
Web-master
http://www.skovaa-munding.dk/, http://www-mundings-memorial.dk/
http://www.cantica.dk/, http://www.eds-denmark.dk/
| |
Jesper H (22-11-2005)
| Kommentar Fra : Jesper H |
Dato : 22-11-05 14:04 |
|
Peter skrev:
[SNIP]
> Det er altså forkert, hvad du skriver til sidst. De slashes bruges kun
> til at escape '-tegnet som en del af input-processen. Men i selve
> databasen ligger dataen ikke gemt med backslashes.
[SNIP]
> Der er ikke noget behov for at bruge stripslashes(), når man hiver
> dataen ud af tabellen. addslashes() er kun en del af processen til at
> indsætte tegnene. Det er dog sjældent, man opdager det, idet
> stripslashes på det meste data alligevel ikke ændrer på noget.
>
> Såfremt man alligevel oplever backslashes, når man trækker data ud af
> databasen, er det fordi man har kørt addslashes() flere gange. Det
> sker for eksempel, når PHP selv tilføjer addslashes() på
> udefrakommende variable pga. magic_quotes, og man derefter selv
> tilføjer det.
Ups, ja det er vist rigtigt nok - grunden til jeg skrev det med
stripslashes, var at jeg på et tidspunkt brugte en (måske lidt for
hurtigt installeret) lokal webserver istedet for der, hvor jeg plejer
at arbejde med PHP og mySQL. Den lokale webserver tilgik jeg gennem en
C-api, hvor PHP-kommandoen stripslashes naturligvis ikke var
tilgængelig, og DER kom der (ligesom du skriver) backslashes på mit
output fra databasen, hvilket jo så nok skyldes at magic_quotes var
slået til og jeg derudover af gammel vane brugte addslashes()
Takker for rettelsen, vi må holde hinanden i ørerne
--
Mvh
Jesper, webmaster for http://fdf.dk/landsdel1/
| |
Jesper H (21-11-2005)
| Kommentar Fra : Jesper H |
Dato : 21-11-05 15:56 |
|
Hej Dennis
Mit gæt er, at du ikke får læst brugerens rigtige navn ud af
databasen. Som Christoffer og Benny tidligere har skrevet, så kan du
ikke hente noget ud af databasen, hvis du vælger at SELECT NULL (som
betyder noget i retning af at vælge ingenting ud).
Så første punkt er, at hvis feltet i din database hedder f.eks.
rigtigtnavn, skriver du SELECT rigtigtnavn FROM osv. osv. osv..
HEREFTER (og det her er vigtigt), skal du have hentet resultatet fra
databasen (dvs. du er nødt til at skelne mellem at udvælge data
(SELECT) samt rent faktisk at hente resultatet). Det gøres eks. ved:
<?
$db=mysql_connect("SERVER", "BRUGER", "PASSWORD");
mysql_select_db("TABLE");
$result = mysql_query("SELECT rigtigtnavn FROM table WHERE user =
'".$_POST['user']."' AND pass = '".$_POST['pass']."'") or die
(mysql_error());
if ($antal_raekker=mysql_num_rows($result)>0){
$rs = mysql_fetch_object($result); // HER HENTER DU DET FØRSTE
RESULTAT UD
$brugerens_rigtige_navn = $rs->rigtigtnavn; // HER LÆGGER DU
BRUGERENS RIGTIGE NAVN OVER I EN VARIABEL. du kan også bare beholde
$rs->rigtigtnavn gennem resten af scriptet.
$_SESSION['rigtigtnavn'] = $rs->rigtigtnavn; // SÅ KAN DU OGSÅ HUSKE
BRUGERENS RIGTIGE NAVN PÅ ANDRE SIDER.
$_SESSION['logget_ind']=1;
$_SESSION['user'] = $user;
$_SESSION['pass'] = $pass;
}
Udover dette, så er det MEGET usikkert bare at tage inputtet fra
$_POST['user'] og sætte direkte ind i dit mysql query, for så kan
slemme folk fuske med din database. Kig eventuelt på funktionerne
addslashes() og stripslashes() inde på dk2.php.net, de hjælper lidt
på sikkerheden ved at sætte backslash foran potentielt farlige tegn.
--
Mvh
Jesper, webmaster for http://fdf.dk/landsdel1
| |
Dennis Munding (21-11-2005)
| Kommentar Fra : Dennis Munding |
Dato : 21-11-05 23:49 |
|
Hej Jesper
"Jesper H" <jesper.haukrogh@gmail.com> skrev i en meddelelse
news:1132584955.929566.142710@g49g2000cwa.googlegroups.com...
Hej Dennis
Mit gæt er, at du ikke får læst brugerens rigtige navn ud af
databasen. Som Christoffer og Benny tidligere har skrevet, så kan du
ikke hente noget ud af databasen, hvis du vælger at SELECT NULL (som
betyder noget i retning af at vælge ingenting ud).
Ok! Jeg er stadig newbie udi PHP, men jeg er ikke for gammel til at lære
noget nyt - jeg skal bare have det skåret ud i pap og skovlet ind med
skeer...!
Så første punkt er, at hvis feltet i din database hedder f.eks.
rigtigtnavn, skriver du SELECT rigtigtnavn FROM osv. osv. osv..
HEREFTER (og det her er vigtigt), skal du have hentet resultatet fra
databasen (dvs. du er nødt til at skelne mellem at udvælge data
(SELECT) samt rent faktisk at hente resultatet). Det gøres eks. ved:
<?
$db=mysql_connect("SERVER", "BRUGER", "PASSWORD");
mysql_select_db("TABLE");
$result = mysql_query("SELECT rigtigtnavn FROM table WHERE user =
'".$_POST['user']."' AND pass = '".$_POST['pass']."'") or die
(mysql_error());
if ($antal_raekker=mysql_num_rows($result)>0){
$rs = mysql_fetch_object($result); // HER HENTER DU DET FØRSTE
RESULTAT UD
$brugerens_rigtige_navn = $rs->rigtigtnavn; // HER LÆGGER DU
BRUGERENS RIGTIGE NAVN OVER I EN VARIABEL. du kan også bare beholde
$rs->rigtigtnavn gennem resten af scriptet.
$_SESSION['rigtigtnavn'] = $rs->rigtigtnavn; // SÅ KAN DU OGSÅ HUSKE
BRUGERENS RIGTIGE NAVN PÅ ANDRE SIDER.
$_SESSION['logget_ind']=1;
$_SESSION['user'] = $user;
$_SESSION['pass'] = $pass;
}
Det har jeg så prøvet nu - hvis jeg skriver dette kald:
<?php echo "Velkommen $rigtig_navn!"; ?>
....står der dette på siderne:
Velkommen Object!..... ??
Udover dette, så er det MEGET usikkert bare at tage inputtet fra
$_POST['user'] og sætte direkte ind i dit mysql query, for så kan
slemme folk fuske med din database. Kig eventuelt på funktionerne
addslashes() og stripslashes() inde på dk2.php.net, de hjælper lidt
på sikkerheden ved at sætte backslash foran potentielt farlige tegn.
Jeg har tænkt på det, men indtil videre har jeg ikke forstået det helt (hvor
og hvordan det skal placeres), men jeg kigger på den side, som du henviser
til...
Med venlig hilsen
--
Dennis Munding
Web-master
http://www.skovaa-munding.dk/, http://www-mundings-memorial.dk/
http://www.cantica.dk/, http://www.eds-denmark.dk/
| |
Jesper H (22-11-2005)
| Kommentar Fra : Jesper H |
Dato : 22-11-05 08:40 |
|
Hej Dennis
Når du bruger mysql_fetch_object() henter den det som et objekt, så
hvis du bare har skrevet f.eks.:
$rigtig_navn = mysql_fetch_object();
echo "Velkommen $rigtig_navn!";
.... så vil den skrive "Velkommen Object!" - fordi $rigtigt_navn er et
objekt, som indeholder alle de data, du har udvalgt til det første
resultat (hvilket i realiteten så kun er rigtig_navn, som du har
skrevet i dit query lige efter SELECT). Derfor er det vigtigt, at du
husker at bruge pil-operatoren:
<?
$rs = mysql_fetch_object($result);
$rigtig_navn = $rs->rigtig_navn;
?>
Hvis du er i tvivl om, hvad der skal stå efter pilen, kan du bruge
print_r() kommandoen:
<html>
<pre>
<?PHP
$rs = mysql_fetch_object($result);
print_r($rs);
?>
</pre>
</html>
Den udskriver alt det, din variabel indeholder. For læse-venlighedens
skyld, kan det anbefales at den står indefor pre-tags (ligesom i
eksemplet ovenover).
Du kan læse mere om mysql_fetch_object() på
http://dk2.php.net/manual/en/function.mysql-fetch-object.php
Hvis du ikke er helt familiær med pil-operatoren, kan du også bruge
mysql_fetch_assoc(), se her på
http://dk2.php.net/manual/en/function.mysql-fetch-object.php
Den største forskel på de to er, at man ved mysql_fetch_object()
skriver
<?
$rs = mysql_fetch_object();
echo $rs->felt_navn;
?>
mens man ved mysql_fetch_assoc() skriver
<?
$rs = mysql_fetch_assoc();
echo $rs['feltnavn'];
?>
dvs. ligesom ved et associativt array.
Håber det hjæper.
--
Mvh
Jesper, webmaster for http://fdf.dk/landsdel1/
| |
Dennis Munding (22-11-2005)
| Kommentar Fra : Dennis Munding |
Dato : 22-11-05 12:06 |
|
Hej Jesper!
"Jesper H" <jesper.haukrogh@gmail.com> skrev i en meddelelse
news:1132645193.264809.202170@z14g2000cwz.googlegroups.com...
Hej Dennis
Når du bruger mysql_fetch_object() henter den det som et objekt, så
hvis du bare har skrevet f.eks.:
$rigtig_navn = mysql_fetch_object();
echo "Velkommen $rigtig_navn!";
.... så vil den skrive "Velkommen Object!" - fordi $rigtigt_navn er et
objekt, som indeholder alle de data, du har udvalgt til det første
resultat (hvilket i realiteten så kun er rigtig_navn, som du har
skrevet i dit query lige efter SELECT). Derfor er det vigtigt, at du
husker at bruge pil-operatoren:
<?
$rs = mysql_fetch_object($result);
$rigtig_navn = $rs->rigtig_navn;
?>
Doh! Det virker - da jeg testede iaftes, uploadede jeg filerne efter at jeg
havde logget ind, og så virkede det selvfølgelig ikke, for da var der
allerede sat en session....!
Det må være det, man kalder en typisk begynderfejl....!?
Men nu virker det, som det skal!
Nu skal jeg bare have styr på addslashes og stripslashes - desværre er den
side, som du henviste til på engelsk...
Kender du mon en 100% dansk side, hvor jeg kan læse om det?
Du kan læse mere om mysql_fetch_object() på
http://dk2.php.net/manual/en/function.mysql-fetch-object.php
Hvis du ikke er helt familiær med pil-operatoren, kan du også bruge
mysql_fetch_assoc(), se her på
http://dk2.php.net/manual/en/function.mysql-fetch-object.php
Den største forskel på de to er, at man ved mysql_fetch_object()
skriver
<?
$rs = mysql_fetch_object();
echo $rs->felt_navn;
?>
mens man ved mysql_fetch_assoc() skriver
<?
$rs = mysql_fetch_assoc();
echo $rs['feltnavn'];
?>
dvs. ligesom ved et associativt array.
Desværre endnu 2 engelsk-sprogede sider - mit engelsk er kun til
"husbehov"....
Jeg holdt mig til mysql_fetch_object()....
Håber det hjælper.
Som nævnt, så virker det, så jo - det hjalp!
Mange gange tak for hjælpen og de hurtige svar!
Med venlig hilsen
--
Dennis Munding
Web-master
http://www.skovaa-munding.dk/, http://www-mundings-memorial.dk/
http://www.cantica.dk/, http://www.eds-denmark.dk/
| |
Jesper H (22-11-2005)
| Kommentar Fra : Jesper H |
Dato : 22-11-05 12:26 |
|
Addslashes og stripslashes på dansk, kan findes på web-cafeen:
http://www.webcafe.dk/tipsogtricks/php/addslashes.html
Men det er skam ikke så svært:
Man bruger funktionen addslashes() til at sætte back-slash foran
potentielt farlige tegn. Hvis man f.eks. laver et query, hvor der skal
indgå en streng, skriver man det jo f.eks. som:
<?
$en_streng = "Aerosmith";
$query = "SELECT * FROM mindatabase WHERE tekststreng =
'".$en_streng."' LIMIT 1;";
echo $en_streng;
mysql_query($query);
?>
så vil den færdige $query lige inden mysql_query() se således ud:
SELECT * FROM minddatabase WHERE tekststreng = 'Aerosmith' LIMIT 1;
hvilket så vidt jeg husker er korrekt nok - tekststrenge skal jo i
'gnyffer', så mySQL ved hvornår tekststrengen starter og slutter. Men
prøv så at se hvad der sker, hvis der er gnyffer i selve den streng,
man vil teste på:
<?
$en_streng = "Guns'N'Roses";
$query = "SELECT * FROM mindatabase WHERE tekststreng =
'".$en_streng."' LIMIT 1;";
echo $en_streng;
mysql_query($query);
?>
Det bliver noget rod - for nu kommer mySQL-queriet til at se således
ud:
SELECT * FROM mindatabase WHERE tekststreng = 'Guns'N'Roses' LIMIT 1;
.... og mySQL vil tro at tekststrengen er slut allerede ved 'Guns'. Det
er noget juks. Men bruger man addslashes, vil det komme til at se
således ud:
<?
$en_streng = "Guns'N'Roses";
$query = "SELECT * FROM mindatabase WHERE tekststreng =
'".addslashes($en_streng)."' LIMIT 1;";
echo $en_streng;
mysql_query($query);
?>
og det færdige mySQL-query vil komme til at se således ud:
SELECT * FROM mindatabase WHERE tekststreng = 'Guns\'N\'Roses' LIMIT 1;
Selve \' bliver nemlig ikke opfattet som slutningen af strengen. Skulle
der være en backslash i din streng, vil denne blive til to backslashes
efter hinanden. Hvis det er et tal, man tester på, kan man f.eks.
bruge intval(), som konverterer en tekst-streng til et tal (og kun et
tal, intval bliver til et hel-tal).
Inde i databasen skal tekststrengene naturligvis også stå med
back-slashes foran de "farlige" tegn. Når du så bruger f.eks.
mysql_fetch_object(), vil resultatet naturligvis også indeholde disse
slashes:
<?
$rs = mysql_fetch_object($result);
echo $rs->tekststreng; // DETTE VIL GIVE Guns\'N\'Roses
echo stripslashes($rs->tekststreng); // DETTE VIL GIVE Guns'N'Roses
?>
--
Mvh
Jesper, webmaster for http://fdf.dk/landsdel1/
| |
Peter Brodersen (22-11-2005)
| Kommentar Fra : Peter Brodersen |
Dato : 22-11-05 12:44 |
|
On 22 Nov 2005 03:25:57 -0800, "Jesper H" <jesper.haukrogh@gmail.com>
wrote:
>SELECT * FROM mindatabase WHERE tekststreng = 'Guns\'N\'Roses' LIMIT 1;
>
>Selve \' bliver nemlig ikke opfattet som slutningen af strengen. Skulle
>der være en backslash i din streng, vil denne blive til to backslashes
>efter hinanden. Hvis det er et tal, man tester på, kan man f.eks.
>bruge intval(), som konverterer en tekst-streng til et tal (og kun et
>tal, intval bliver til et hel-tal).
>
>Inde i databasen skal tekststrengene naturligvis også stå med
>back-slashes foran de "farlige" tegn. Når du så bruger f.eks.
>mysql_fetch_object(), vil resultatet naturligvis også indeholde disse
>slashes:
Det er altså forkert, hvad du skriver til sidst. De slashes bruges kun
til at escape '-tegnet som en del af input-processen. Men i selve
databasen ligger dataen ikke gemt med backslashes. Det er ret let at
teste:
mysql> INSERT INTO test (foo) VALUES ('Guns\'n\'Roses');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT foo FROM test;
+--------------+
| foo |
+--------------+
| Guns'n'Roses |
+--------------+
1 row in set (0.00 sec)
mysql> SELECT LENGTH(foo) FROM test;
+-------------+
| LENGTH(foo) |
+-------------+
| 12 |
+-------------+
1 row in set (0.04 sec)
Der er ikke noget behov for at bruge stripslashes(), når man hiver
dataen ud af tabellen. addslashes() er kun en del af processen til at
indsætte tegnene. Det er dog sjældent, man opdager det, idet
stripslashes på det meste data alligevel ikke ændrer på noget.
Såfremt man alligevel oplever backslashes, når man trækker data ud af
databasen, er det fordi man har kørt addslashes() flere gange. Det
sker for eksempel, når PHP selv tilføjer addslashes() på
udefrakommende variable pga. magic_quotes, og man derefter selv
tilføjer det.
--
- Peter Brodersen
| |
Dennis Munding (22-11-2005)
| Kommentar Fra : Dennis Munding |
Dato : 22-11-05 13:00 |
|
Hej Peter!
"Peter Brodersen" <usenet2005@ter.dk> skrev i en meddelelse
news:dlv0cc$hb$1@news.klen.dk...
> Såfremt man alligevel oplever backslashes, når man trækker data ud af
> databasen, er det fordi man har kørt addslashes() flere gange. Det
> sker for eksempel, når PHP selv tilføjer addslashes() på
> udefrakommende variable pga. magic_quotes, og man derefter selv
> tilføjer det.
Og hvordan finder jeg så ud af, hvad magic_quotes er sat til, når min
database ligger på en server, som jeg ikke er herre over?
Jeg har web-hotel hos Surftown, hvis det er til nogen hjælp...
Med venlig hilsen
--
Dennis Munding
Web-master
http://www.skovaa-munding.dk/, http://www-mundings-memorial.dk/
http://www.cantica.dk/, http://www.eds-denmark.dk/
| |
Peter Brodersen (22-11-2005)
| Kommentar Fra : Peter Brodersen |
Dato : 22-11-05 13:32 |
|
On Tue, 22 Nov 2005 12:59:35 +0100, "Dennis Munding"
<mail@invalid.com> wrote:
>Og hvordan finder jeg så ud af, hvad magic_quotes er sat til, når min
>database ligger på en server, som jeg ikke er herre over?
Vha. funktionen get_magic_quotes_gpc():
http://dk2.php.net/manual/en/function.get-magic-quotes-gpc.php
--
- Peter Brodersen
| |
Dennis Munding (23-11-2005)
| Kommentar Fra : Dennis Munding |
Dato : 23-11-05 00:18 |
| | |
Dennis Munding (22-11-2005)
| Kommentar Fra : Dennis Munding |
Dato : 22-11-05 13:04 |
|
Hej Jesper!
"Jesper H" <jesper.haukrogh@gmail.com> skrev i en meddelelse
news:1132658757.572941.291460@z14g2000cwz.googlegroups.com...
Addslashes og stripslashes på dansk, kan findes på web-cafeen:
http://www.webcafe.dk/tipsogtricks/php/addslashes.html
Ok - det vil jeg lige prøve at gennemlæse senere - skal snart på arbejde...
Men det er skam ikke så svært:
Man bruger funktionen addslashes() til at sætte back-slash foran
potentielt farlige tegn. Hvis man f.eks. laver et query, hvor der skal
indgå en streng, skriver man det jo f.eks. som:
[SNIP - en masse kode]
Jo, det kan jeg godt se, men det jeg ikke er helt med på endnu (jeg skal jo
have det skåret ud i pap og skovlet ind med skeer!) er, om det er
nødvendigt, når brugeren kun får en form, hvor der skal indtastes brugernavn
og password - kan man virkelig lave ravage i en database via sådan en
formular, når både brugernavn og password bliver tjekket??
Med venlig hilsen
--
Dennis Munding
Web-master
http://www.skovaa-munding.dk/, http://www-mundings-memorial.dk/
http://www.cantica.dk/, http://www.eds-denmark.dk/
--
Mvh
Jesper, webmaster for http://fdf.dk/landsdel1/
| |
Jesper H (22-11-2005)
| Kommentar Fra : Jesper H |
Dato : 22-11-05 16:17 |
|
Dennis skrev:
> Jo, det kan jeg godt se, men det jeg ikke er helt med på endnu (jeg skal jo
> have det skåret ud i pap og skovlet ind med skeer!) er, om det er
> nødvendigt, når brugeren kun får en form, hvor der skal indtastes brugernavn
> og password - kan man virkelig lave ravage i en database via sådan en
> formular, når både brugernavn og password bliver tjekket??
Tror det korte svar på det spørgsmål er - ja
Du vil blive overrasket over, hvad ondsindede personer samt scripts er
i stand til. Om ikke andet, så kunne det jo være et problem hvis en
bruger vælger at inkludere en gnyf ' eller flere i sit brugernavn
eller password, fordi man jo så får afsluttet sin streng for hurtigt
ligesom i eksemplet fra før:
SELECT * FROM mindatabase WHERE tekststreng = 'Guns'N'Roses' LIMIT 1;
Her vil strengen jo blive sluttet omkring 'Guns' og resten ( N'Roses' )
er vås og enten give syntax-fejl fra mySQL eller også vil være
potentielt farligt - MED MINDRE naturligvis at magic_quotes er slået
til, ELLER addslashes() eller en anden lignende funktion bruges til at
sætte backslash foran de nødvendige tegn, så mySQL opfatter dem
korrekt.
--
Mvh
Jesper, webmaster for http://fdf.dk/landsdel1/
| |
Dennis Munding (23-11-2005)
| Kommentar Fra : Dennis Munding |
Dato : 23-11-05 00:23 |
|
Hej Jesper!
"Jesper H" <jesper.haukrogh@gmail.com> skrev i en meddelelse
news:1132672625.864957.98100@z14g2000cwz.googlegroups.com...
Dennis skrev:
> Jo, det kan jeg godt se, men det jeg ikke er helt med på endnu (jeg skal
> jo
> have det skåret ud i pap og skovlet ind med skeer!) er, om det er
> nødvendigt, når brugeren kun får en form, hvor der skal indtastes
> brugernavn
> og password - kan man virkelig lave ravage i en database via sådan en
> formular, når både brugernavn og password bliver tjekket??
Tror det korte svar på det spørgsmål er - ja
Det frygtede jeg....
Du vil blive overrasket over, hvad ondsindede personer samt scripts er
i stand til. Om ikke andet, så kunne det jo være et problem hvis en
bruger vælger at inkludere en gnyf ' eller flere i sit brugernavn
eller password...
Det problem vil aldrig opstå, da jeg skal godkende brugernavnet, og fordi
det er mig, der laver passwordet...
Men problemet med ondsindede personer er der jo så stadig, så jeg vil
absolut tage dit råd seriøst og prøve at læse og forstå så meget om add- og
stripslashes, at jeg kan finde ud af at bruge det korrekt!
....fordi man jo så får afsluttet sin streng for hurtigt
ligesom i eksemplet fra før:
SELECT * FROM mindatabase WHERE tekststreng = 'Guns'N'Roses' LIMIT 1;
Her vil strengen jo blive sluttet omkring 'Guns' og resten ( N'Roses' )
er vås og enten give syntax-fejl fra mySQL eller også vil være
potentielt farligt - MED MINDRE naturligvis at magic_quotes er slået
til, ELLER addslashes() eller en anden lignende funktion bruges til at
sætte backslash foran de nødvendige tegn, så mySQL opfatter dem
korrekt.
Og det med at tjekke om magic_quotes er slået til eller fra, skal jeg så
lige have lært at finde ud af ordenligt først....
Mange tak for de absolute brugbare svar, links og eksempler!
Med venlig hilsen
--
Dennis Munding
Web-master
http://www.skovaa-munding.dk/, http://www-mundings-memorial.dk/
http://www.cantica.dk/, http://www.eds-denmark.dk/
| |
Jesper H (23-11-2005)
| Kommentar Fra : Jesper H |
Dato : 23-11-05 08:16 |
|
Hvis du vil vide mere om php-opsætningen (som f.eks. hvorvidt
magic_quotes er slået til), kan du lave en php-side, som udelukkende
består af følgende kode:
<?PHP
phpinfo();
?>
Her står der så alt muligt, og søger du på magic_quotes, vil du
også kunne finde ud af om det er sat on eller off.
Mvh
Jesper
| |
Dennis Munding (23-11-2005)
| Kommentar Fra : Dennis Munding |
Dato : 23-11-05 11:50 |
|
Hej Jesper!
"Jesper H" <jesper.haukrogh@gmail.com> skrev i en meddelelse
news:1132730163.168610.230360@z14g2000cwz.googlegroups.com...
Hvis du vil vide mere om php-opsætningen (som f.eks. hvorvidt
magic_quotes er slået til), kan du lave en php-side, som udelukkende
består af følgende kode:
<?PHP
phpinfo();
?>
Her står der så alt muligt, og søger du på magic_quotes, vil du
også kunne finde ud af om det er sat on eller off.
Må være blevet gammel, for den stump kode har jeg fået leveret nogle gange
tidligere - kunne bare ikke huske den....
(Tror jeg skal stemple den i panden - så kan jeg altid finde den - hvis jeg
da kan huske, hvor jeg placerede den!?!)
Med venlig hilsen
--
Dennis Munding
Web-master
http://www.skovaa-munding.dk/, http://www-mundings-memorial.dk/
http://www.cantica.dk/, http://www.eds-denmark.dk/
| |
|
|