/ 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
Hvordan er det nu lige...
Fra : Dennis Munding


Dato : 23-08-06 20:44

Hej NG!

Hvis jeg har en formular, hvor bruger skriver noget, og jeg så sender
inputtet videre til en anden fil, som ser sådan ud:

<?
$in1 = $_POST['year'];
$in2 = $_POST['month'];
$in3 = $_POST['day'];
$in4 = $_POST['time'];
$in5 = $_POST['event'];

$conn=mysql_connect("SERVER", "USER", "PASS");
mysql_select_db("DATABASE");
if($result=mysql_query("INSERT INTO events (EventYear, EventMonth,
EventDay, EventTime, Event) VALUES ('$in1', '$in2', '$in3', '$in4',
'$in5')"))
{
header ("Location: kal-indhold.php");
} else {
echo "Der er sket en fejl - aktiviteten er IKKE indsat!!";
echo "<a href=\"indsaet.php\">Tilbage</a>";
}
?>

Hvordan er det så lige, at jeg sikrer mig mod injektion?
Jeg mener, at jeg skal bruge "addslashes" og "stripslashes", men jeg må have
gjort noget forkert her:

$in1 = addslashes($_POST['year']);
etc...

For der sker ingenting - hvad gør jeg forkert?
Har læst php.faq, men det blev jeg ikke meget klogere af.... :-/

På forhånd mange tak for hjælpen - et los i den rigtige retning er meget
kærkommen!


Med venlig hilsen
--
Dennis Munding
http://pe-vagtservice.dk/, http://cantica.dk/, http://munding-webdesign.dk/,
http://skovaa-munding.dk/, http://mundings-memorial.dk/,
http://eds-denmark.dk/



 
 
Martin Larsen (24-08-2006)
Kommentar
Fra : Martin Larsen


Dato : 24-08-06 10:59

Du kan bruge mysql_real_escape_string()

Peter Brodersen (24-08-2006)
Kommentar
Fra : Peter Brodersen


Dato : 24-08-06 11:11

On Wed, 23 Aug 2006 21:44:18 +0200, "Dennis Munding" <mail@invalid.dk>
wrote:

>$in1 = addslashes($_POST['year']);
>etc...
>
>For der sker ingenting - hvad gør jeg forkert?

Der sker kun noget, hvis $_POST['year'] rent faktisk indeholder
diverse specialtegn. Hvis der ikke er nogen "farlige" tegn, forbliver
strengen uændret, hvilket er fint nok.

mysql_real_escape_string() kan dog anbefales i stedet for
addslashes(), men det er sekundært, hvis man ikke bruger specielle
tegnsæt. Alternativt et database-API, så behøver man ikke selv fedte
med at escape data.

--
- Peter Brodersen
Ugens^WMånedens^WSommerens værktøj - Find vej: www.findvej.dk
Nu med valgfri tekst: www.findvej.dk/Nybrogade2,1203?text=Kulturministeriet

Jesper H (24-08-2006)
Kommentar
Fra : Jesper H


Dato : 24-08-06 15:59


Dennis Munding skrev:

> Hej NG!
>
> Hvis jeg har en formular, hvor bruger skriver noget, og jeg så sender
> inputtet videre til en anden fil, som ser sådan ud:
>
> <?
> $in1 = $_POST['year'];
> $in2 = $_POST['month'];
> $in3 = $_POST['day'];
> $in4 = $_POST['time'];
> $in5 = $_POST['event'];
>
> $conn=mysql_connect("SERVER", "USER", "PASS");
> mysql_select_db("DATABASE");
> if($result=mysql_query("INSERT INTO events (EventYear, EventMonth,
> EventDay, EventTime, Event) VALUES ('$in1', '$in2', '$in3', '$in4',
> '$in5')"))
> {
> header ("Location: kal-indhold.php");
> } else {
> echo "Der er sket en fejl - aktiviteten er IKKE indsat!!";
> echo "<a href=\"indsaet.php\">Tilbage</a>";
> }
> ?>
>
> Hvordan er det så lige, at jeg sikrer mig mod injektion?
> Jeg mener, at jeg skal bruge "addslashes" og "stripslashes", men jeg må have
> gjort noget forkert her:
>
> $in1 = addslashes($_POST['year']);
> etc...
>
> For der sker ingenting - hvad gør jeg forkert?
> Har læst php.faq, men det blev jeg ikke meget klogere af.... :-/
>
> På forhånd mange tak for hjælpen - et los i den rigtige retning er meget
> kærkommen!
>
>
> Med venlig hilsen
> --
> Dennis Munding
> http://pe-vagtservice.dk/, http://cantica.dk/, http://munding-webdesign.dk/,
> http://skovaa-munding.dk/, http://mundings-memorial.dk/,
> http://eds-denmark.dk/

Hej Dennis

Som de andre siger, så er det kun "farlige tegn" der bliver escaped,
ikke alle, så at bruge addslashes (el. lign.) på et årstal vil
givetvis ikke lave et anderledes resultat:
addslashes('2006') = 2006
Men dermed ikke sagt at det ikke er en god idé at gøre det, nogle
kunne jo have fundet på at skrive noget andet i årstals-boksen.

Men, det er ikke altid nødvendigt at bruges addslashes, hvis serveren
er sat op til selv at gøre det. Så kan man lave en funktion, der ser
nogenlunde sådan her ud:

<?PHP
function fancy_slashes($streng) {
if (!get_magic_quotes_gpc()) {
return addslashes($streng);
} else {
return $streng;
}
}
?>
og så bruge den når du tager værdier ind:
<?PHP
$in1 = fancy_slashes($_POST['year']);
?>

Så virker scriptet også, når webhotellet pludselig finder på at
ændre deres konfiguration. Du kan se lidt om det her:
http://dk.php.net/manual/da/function.get-magic-quotes-gpc.php

Mvh
Jesper
--
http://www.tandklinikken-vesterbro.dk/ , http://fdf.dk/landsdel1/


Dennis Munding (24-08-2006)
Kommentar
Fra : Dennis Munding


Dato : 24-08-06 18:30

Hej Jesper!
"Jesper H" <jesper.haukrogh@gmail.com> skrev i en meddelelse
news:1156431519.520664.96850@i3g2000cwc.googlegroups.com...

[SNIP]

Hej Dennis

Som de andre siger, så er det kun "farlige tegn" der bliver escaped,
ikke alle, så at bruge addslashes (el. lign.) på et årstal vil
givetvis ikke lave et anderledes resultat:
addslashes('2006') = 2006
Men dermed ikke sagt at det ikke er en god idé at gøre det, nogle
kunne jo have fundet på at skrive noget andet i årstals-boksen.

Men, det er ikke altid nødvendigt at bruges addslashes, hvis serveren
er sat op til selv at gøre det. Så kan man lave en funktion, der ser
nogenlunde sådan her ud:

<?PHP
function fancy_slashes($streng) {
if (!get_magic_quotes_gpc()) {
return addslashes($streng);
} else {
return $streng;
}
}
?>
og så bruge den når du tager værdier ind:
<?PHP
$in1 = fancy_slashes($_POST['year']);
?>

Så virker scriptet også, når webhotellet pludselig finder på at
ændre deres konfiguration. Du kan se lidt om det her:
http://dk.php.net/manual/da/function.get-magic-quotes-gpc.php


Nu har jeg prøvet din kode af ved at skrive noget i mit tekst-felt - både
med enkelte (') og dobbelte (") anførelsestegn - men der sker stadig intet.

Hverken når jeg kigger i databasen eller når jeg vil redigere min event -
der udskrives indholdet fra databasen....?

Er der en måde, så jeg kan se, om jeg har gjort det korrekt?


Med venlig hilsen
--
Dennis Munding
http://pe-vagtservice.dk/, http://cantica.dk/, http://munding-webdesign.dk/,
http://skovaa-munding.dk/, http://mundings-memorial.dk/,
http://eds-denmark.dk/



Jesper H (25-08-2006)
Kommentar
Fra : Jesper H


Dato : 25-08-06 15:37


Dennis Munding skrev:
>
> Nu har jeg prøvet din kode af ved at skrive noget i mit tekst-felt - både
> med enkelte (') og dobbelte (") anførelsestegn - men der sker stadig intet.
>
> Hverken når jeg kigger i databasen eller når jeg vil redigere min event -
> der udskrives indholdet fra databasen....?
>
> Er der en måde, så jeg kan se, om jeg har gjort det korrekt?
>
>
> Med venlig hilsen
> --
> Dennis Munding
> http://pe-vagtservice.dk/, http://cantica.dk/, http://munding-webdesign.dk/,
> http://skovaa-munding.dk/, http://mundings-memorial.dk/,
> http://eds-denmark.dk/

Hej Dennis

Jeg tror nok, at det du har lavet virker. De ekstra slash-es (hedder
det mon det?) som bliver tilføjet bliver IKKE gemt i databasen. De
skal bare sørge for at dit mysql-query ikke bliver ødelagt.

Du kan f.eks. prøve:

$in1 = fancy_slashes($_POST['tekst']); //Forudsat du har et tekstfelt
med navnet tekst, naturligvis
echo $in1;

Hvis der så er backslash foran de "farlige tegn", så virker det. Når
du så tilføjer det til databasen, vil backslash'erne forsvinde, da
MySQL fjerner dem igen (når de ikke er farlige mere).

Mvh
Jesper
--
http://www.tandklinikken-vesterbro.dk , http://fdf.dk/landsdel1/


Dennis Munding (25-08-2006)
Kommentar
Fra : Dennis Munding


Dato : 25-08-06 19:33

Hej Jesper!
"Jesper H" <jesper.haukrogh@gmail.com> skrev i en meddelelse
news:1156516596.350222.216830@h48g2000cwc.googlegroups.com...
Hej Dennis

Jeg tror nok, at det du har lavet virker. De ekstra slash-es (hedder
det mon det?) som bliver tilføjet bliver IKKE gemt i databasen. De
skal bare sørge for at dit mysql-query ikke bliver ødelagt.

Du kan f.eks. prøve:

$in1 = fancy_slashes($_POST['tekst']); //Forudsat du har et tekstfelt
med navnet tekst, naturligvis
echo $in1;

Hvis der så er backslash foran de "farlige tegn", så virker det. Når
du så tilføjer det til databasen, vil backslash'erne forsvinde, da
MySQL fjerner dem igen (når de ikke er farlige mere).


Mange tak!
Hvorfor tænkte jeg ikke lige på at gøre det - det var jo ganske nemt, og jeg
er egentlig godt klar over, at man kan tjekke indholdet på den måde... Doh!

Men jeg var så ikke klar over, at MySQL fjernede backslash'ene, når det blev
indsat i databasen... Så blev jeg også lidt klogere i dag.... Dejligt!


Med venlig hilsen
--
Dennis Munding
http://pe-vagtservice.dk/, http://cantica.dk/, http://munding-webdesign.dk/,
http://skovaa-munding.dk/, http://mundings-memorial.dk/,
http://eds-denmark.dk/



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste