/ 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
undgå ændring af variabels værdi via url
Fra : Kim Eichen


Dato : 07-03-04 01:50

Hej gruppe

Hvis jeg på side1.php har en form, som ved submit hopper til side2.php, hvordan undgår jeg så at man
på side2.php kan ændre en variabels værdi via url'en?
Jeg kan selvfølgelig anvende post, men hvis brugeren kan gætte variablens navn hjælper det ikke
stort.

Jeg har eksperimenteret lidt med sessions, men har ikke haft succes med det.
Det jeg på en eller anden måde gerne vil opnå er at $var skal komme fra side1.php, så hvis værdien
af $var der bliver sendt fra formen på side1.php er = 1, så må værdien ikke ændres hvis brugeren i
url'en indtaster side2.php?var=2 (bemærk variablens navn fremgår ikke umidelbart af url'en, men jeg
vil gerne sikre mid mod at variablen kan ændres hvis brugeren gætter variablens navn)

Mvh Kim Eichen


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.614 / Virus Database: 393 - Release Date: 06-03-2004



 
 
Kim Eichen (07-03-2004)
Kommentar
Fra : Kim Eichen


Dato : 07-03-04 01:52


"Kim Eichen" <eichen@worldonline.dk> wrote in message
news:Wku2c.105461$jf4.6343668@news000.worldonline.dk...
> Hej gruppe
>
> Hvis jeg på side1.php har en form, som ved submit hopper til side2.php, hvordan undgår jeg så at
man
> på side2.php kan ændre en variabels værdi via url'en?
> Jeg kan selvfølgelig anvende post, men hvis brugeren kan gætte variablens navn hjælper det ikke
> stort.
>
> Jeg har eksperimenteret lidt med sessions, men har ikke haft succes med det.
> Det jeg på en eller anden måde gerne vil opnå er at $var skal komme fra side1.php, så hvis værdien
> af $var der bliver sendt fra formen på side1.php er = 1, så må værdien ikke ændres hvis brugeren i
> url'en indtaster side2.php?var=2 (bemærk variablens navn fremgår ikke umidelbart af url'en, men
jeg
> vil gerne sikre mid mod at variablen kan ændres hvis brugeren gætter variablens navn)

Det skal tilføjes at register_globals er on og at jeg ikke har mulighed for at ændre denne
indstilling.


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.614 / Virus Database: 393 - Release Date: 06-03-2004



Bertel Lund Hansen (07-03-2004)
Kommentar
Fra : Bertel Lund Hansen


Dato : 07-03-04 09:05

Kim Eichen skrev:

>Hvis jeg på side1.php har en form, som ved submit hopper
>til side2.php, hvordan undgår jeg så at man
>på side2.php kan ændre en variabels værdi via url'en?

Hvad med slet ikke at bruge parametre i URL'en, men give
submitknappen et navn og teste på value på side 2?

Side 1:
<input type="submit" name="act" value="First action">
<input type="submit" name="act" value="Second action">

Side 2 (eksempel i ColdFusion):
<cfif isDefined("form.act") AND form.act EQ "First action">
do_something_important ...

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Leonard (07-03-2004)
Kommentar
Fra : Leonard


Dato : 07-03-04 09:42

Bertel Lund Hansen <nospamius@lundhansen.dk> wrote:

>Side 2 (eksempel i ColdFusion):
><cfif isDefined("form.act") AND form.act EQ "First action">
> do_something_important ...

Hvordan gør du det i ren PHP?
--
med venlig hilsen
Leonard - http://leonard.dk/

Thomas Lindgaard (07-03-2004)
Kommentar
Fra : Thomas Lindgaard


Dato : 07-03-04 12:08

On Sun, 07 Mar 2004 09:41:40 +0100, Leonard wrote:

>>Side 2 (eksempel i ColdFusion):
>><cfif isDefined("form.act") AND form.act EQ "First action">
>> do_something_important ...
>
> Hvordan gør du det i ren PHP?

Det må vel være noget i retning af:

if ( isset($_POST['act']) && ( $_POST['act'] == 'First action' ) )
{
...
}

Mvh.
/Thomas

Bertel Lund Hansen (07-03-2004)
Kommentar
Fra : Bertel Lund Hansen


Dato : 07-03-04 12:24

Leonard skrev:

>>Side 2 (eksempel i ColdFusion):
>><cfif isDefined("form.act") AND form.act EQ "First action">
>> do_something_important ...

>Hvordan gør du det i ren PHP?

<?
   if ($_POST['act']=='First action') doFirstAction();
   if ($_POST['act']=='Second action') doSecondAction();
?>

Man kan vist også teste på noget med defined(), men jeg husker
ikke om det er nødvendigt.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Peter Brodersen (07-03-2004)
Kommentar
Fra : Peter Brodersen


Dato : 07-03-04 11:13

On Sun, 07 Mar 2004 09:04:35 +0100, Bertel Lund Hansen
<nospamius@lundhansen.dk> wrote:

>Hvad med slet ikke at bruge parametre i URL'en, men give
>submitknappen et navn og teste på value på side 2?

Man bør dog stadigvæk have en default-handling. Hvis man fx har ét
input-felt og et submit-felt, indtaster noget i input-feltet og
trykker return (i modsætning til at klikke på et submit-felt), så vil
ingen submit-værdi blive sat.

--
- Peter Brodersen

Ugens sprogtip: også (og ikke osse)

Bertel Lund Hansen (07-03-2004)
Kommentar
Fra : Bertel Lund Hansen


Dato : 07-03-04 12:22

Peter Brodersen skrev:

>Man bør dog stadigvæk have en default-handling. Hvis man fx har ét
>input-felt og et submit-felt, indtaster noget i input-feltet og
>trykker return (i modsætning til at klikke på et submit-felt), så vil
>ingen submit-værdi blive sat.

Ikke?

Prøv lige denne her side:

   http://fiduso.dk/Test.htm

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Peter Brodersen (07-03-2004)
Kommentar
Fra : Peter Brodersen


Dato : 07-03-04 12:56

On Sun, 07 Mar 2004 12:22:10 +0100, Bertel Lund Hansen
<nospamius@lundhansen.dk> wrote:

>Prøv lige denne her side:
>
>    http://fiduso.dk/Test.htm

Der er forskel i IE, men ikke (længere) i Mozilla.

Det har om ikke andet været en grundlæggende regel indenfor
web/formkode, at man ikke må forudsætte, at der rent faktisk bliver
trykket på submitknappen (= sendt submitknappens navn=værdi med)
--
- Peter Brodersen

Ugens sprogtip: også (og ikke osse)

Bertel Lund Hansen (07-03-2004)
Kommentar
Fra : Bertel Lund Hansen


Dato : 07-03-04 18:39

Peter Brodersen skrev:

>>    http://fiduso.dk/Test.htm

>Der er forskel i IE, men ikke (længere) i Mozilla.

Ja, det kan jeg se.

>Det har om ikke andet været en grundlæggende regel indenfor
>web/formkode, at man ikke må forudsætte, at der rent faktisk bliver
>trykket på submitknappen (= sendt submitknappens navn=værdi med)

Så kan man faktisk ikke undgå at levere en url-variabel med hvis
man skal kunne fange alle 'afsendelser'?

Og jeg havde endda lige hittet ud af at lave to submitknapper i
samme form. Det falder jo helt til jorden.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Peter Brodersen (07-03-2004)
Kommentar
Fra : Peter Brodersen


Dato : 07-03-04 23:44

On Sun, 07 Mar 2004 18:39:05 +0100, Bertel Lund Hansen
<nospamius@lundhansen.dk> wrote:

>Så kan man faktisk ikke undgå at levere en url-variabel med hvis
>man skal kunne fange alle 'afsendelser'?

Næeh, man kan evt. smide en hidden-værdi med i form'en, fx:

<input type="hidden" name="action" value="doStuff" />

Man kan selvfølgelig også forudsætte, at hvis folk ankommer på
Test2.php (i dit eksempel), så er det fordi de i første omgang har
udfyldt formen :) Ens kode behøver ikke at være supermeget mere
kompliceret, bare fordi man har en default-opførsel med (som
sandsynligvis alligevel er lig med hvis en bestemt submit-knap blev
trykket).

Jeg kan i hvert fald kun være tilhænger af en logisk default-opførsel
(fx "gå videre til næste side", hvis der er alternativer i stil med
"gå til forrige side", "slet entry", etc.). At insistere på at folk
skal klikke på en submit-knap for at ting virker, kan blot skabe
forvirring.

--
- Peter Brodersen

Ugens sprogtip: også (og ikke osse)

Leonard (07-03-2004)
Kommentar
Fra : Leonard


Dato : 07-03-04 09:48

"Kim Eichen" <eichen@worldonline.dk> wrote:

>så må værdien ikke ændres hvis brugeren i
>url'en indtaster side2.php?var=2

Du kan bruge en Cookie eller gemme i en database.

Så submitter du til en side der ikke giver noget output, men gemmer i
cookie eller database og slutter denne med en
header("location side2.php");

Med register_globals har du med cookie allerede værdien i variablerne
på side2.php. Ulempen er jo at det kun virker med cookies tilladt hos
brugeren.

Men hvis du bruger method="post" og begynder side2.php med
$var=$_POST['var'];
tror jeg også den vil overskrive, hvis den er sat i adresselinien.

--
med venlig hilsen
Leonard - http://leonard.dk/

Leonard (07-03-2004)
Kommentar
Fra : Leonard


Dato : 07-03-04 10:01

Leonard <nospam@invalid.invalid> wrote:

>Men hvis du bruger method="post" og begynder side2.php med
>$var=$_POST['var'];
>tror jeg også den vil overskrive, hvis den er sat i adresselinien.

Og så har jeg lige testet det.
Hvis der ikke skrives noget i adresselinien på side2.php kan du teste

$var==$_POST['var']
for hvis der skrives noget efter side2.php så skal siden jo reloades
og dermed forsvinder variablerne i $_POST[].
--
med venlig hilsen
Leonard - http://leonard.dk/

Christian Joergensen (08-03-2004)
Kommentar
Fra : Christian Joergensen


Dato : 08-03-04 20:18

On Sun, 07 Mar 2004 01:50:08 +0100, Kim Eichen wrote:

> Hvis jeg på side1.php har en form, som ved submit hopper til side2.php,
> hvordan undgår jeg så at man på side2.php kan ændre en variabels
> værdi via url'en?

Du kan sende en checksum med:

   http://.../?var=42&checksum=f643de86f085697fad73c1c6b321930e

Den generer du bare ved at tage værdien og sætte sammen med en hemmelig
nøgle. Herefter md5'er du den så. Derefter tager du så på side to og
gør det samme. Hvis ikke du får samme checksum, har brugeren ændret på
det.

Ovenfor har jeg brugt nøglen 'hest':

   $checksum = md5($var.'hest');

På side2.php kan jeg så:

   if (md5($_GET['var'].'hest') != $_GET['checksum']) {
    die("Bølle detected!");
   }

http://php.net/md5

--
Christian Jørgensen
http://www.razor.dk


Kim Eichen (08-03-2004)
Kommentar
Fra : Kim Eichen


Dato : 08-03-04 23:58


"Christian Joergensen" <mail@razor.dk> wrote in message
news:pan.2004.03.08.19.17.57.275627@hackshack.gmta.info...
> On Sun, 07 Mar 2004 01:50:08 +0100, Kim Eichen wrote:
>
> > Hvis jeg på side1.php har en form, som ved submit hopper til side2.php,
> > hvordan undgår jeg så at man på side2.php kan ændre en variabels
> > værdi via url'en?
>
> Du kan sende en checksum med:
>
> http://.../?var=42&checksum=f643de86f085697fad73c1c6b321930e
>
> Den generer du bare ved at tage værdien og sætte sammen med en hemmelig
> nøgle. Herefter md5'er du den så. Derefter tager du så på side to og
> gør det samme. Hvis ikke du får samme checksum, har brugeren ændret på
> det.
>
> Ovenfor har jeg brugt nøglen 'hest':
>
> $checksum = md5($var.'hest');
>
> På side2.php kan jeg så:
>
> if (md5($_GET['var'].'hest') != $_GET['checksum']) {
> die("Bølle detected!");
> }

Det ser slet ikke tosset ud, jeg har dog indtil videre løst problemet ved hjælp af
$var==$_POST['var'] og det lader til at virke fint. Jeg tror dog alligevel jeg vil tage metoden du
foreslår til nærmere eftersyn ved lejlighed.

Mvh Kim Eichen


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.614 / Virus Database: 393 - Release Date: 05-03-2004



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

Månedens bedste
Årets bedste
Sidste års bedste