09. juli 2009 - 13:48Der er
23 kommentarer og 1 løsning
kan man lave en POST i en link ?
Hej
jeg har lige et problem jeg er ved at lave en list og den bruger jeg GET til at lave link med men så kan man se det i linken (&id=3) kan man lave det på en anden måde måske men post i en link ellers er der andre måder man kan gøre det på så man ikke kan ændre iden ?
Hvad er det du gerne vil opnå? Er det for at sikre dig at folk ikke kan ændre linket? Det ville være omsonst idet at du aldrig ville kunne sikre dig det alligevel.
Typisk er det noget folk ønsker at gøre i forbindelse med en usikker webapplikation. Hvis man ønsker at gøre data utilgængelige for andre ved at sløre URL'en gennem krypterede strenge.
Hvis du nu beskrev hvad dit problem var og hvad du gerne ville have løst kunne brugerne her sikkert komme med en mere simpel og sikker løsning (i tilfælde af jeg har ret i min antagelse).
Men udover det er det ikke nemt at give dig gode råd ud fra så vag en beskrivelse.
der er ingen reel forskel på POST og GET - og selv om dine brugere kan se det i adressebaren - hvis du bruger POST kan dine brugere bare se det i koden istedet for.
Så lad være at tro at der er forskel - skriv derimod din kode så det er lige gyldigt om folk kan se det eller ej.
jeg ved godt at folk kan se ene POST i killekoden men der kan man jo ikke lige lave den om ;-) så jeg søger en måde hvor man kan lave denne om så ige ikke skal bruge GET men POST til at finde den med
Det nytter ikke noget at gentage sit spørgsmål. Du har sådan set fået svar - jeg har endda spurgt ind til hvad behovet er, siden du vil forsøge at lave noget så omsonst.
Der er principielt ikke noget formål i at ville 'låse brugeren mest muligt'. Du skal lave din applikation sikker nok til at det ikke er skadeligt for din applikation at folk ændrer URL'en. Udover det ville det også være rigeligt irriterende hvis en bruger ville bogmærke en af de sider - men det er ikke muligt, for du kan ikke bogmærke POST variabel generede sider.
Men hvis du bare vil have svar på dit spørgsmål så ja; det er muligt.
#1 gav dig endda svaret på hvordan, men det afskrev du. #4 giver dig en forklaring hvorfor du egentlig ikke bør gå op i det.
jeg ved godt det ikek hjælp at gentage mit spørmål men hvis i nu ikke helt er hvad jeg vil kan jeg da godt prøve og beskrive det igen og jeg er ikke ude på at "låse" brugeren men jeg vil være sikke på at de ikke kan få fat i info de ikke skal have adgang til og derfor er jeg nød til at "låse" dem og det kan godt ske at de ikke kan bogmærke den del af min siden men det har jeg sikret de bruger( for man skal være loget ind for at kunen se siden ) som bogmærker siden bliver send til deres profil side.
men da jeg ikke kender noget som helst til java og jeg ikke har 30 timer om dage så har jeg ikke tid til at lære det.
og jeg kan derfor forstå at den eneste løsning er ar bruge en form som vi se såden ud ( eller retter jeg har fundet ud af det nok er den eneste måde )
Så havde jeg jo ret i min antagelse, om at det blot er fordi du ikke har lavet en applikation der er sikker nok.
Hvordan får brugerne adgang til de oplysninger som du vil give dem? Har du et brugersystem eller hvordan differencierer du på dine brugeres adgang til de forskellige informationer?
Og bare for opklaringens skyld; det er ikke Java du leder efter i denne sammenhæng, det er Javascript - det er to meget forskellige ting som ikke skal/kan sammenlignes.
nu er jeg ikke helt med på hvad du mener med sikker applikation ?
men jeg har lavet en bruger system hvor brugeren har en id :-) og et brugernavn og jeg bruger id tila t finde de ting som de "har" eller skal have adgang til men jeg kan bare ikke se hvordan jeg skal kunne bruge det til at bestemme om de skal kunne se de data jeg vil have de skal ?? kan du komem med et hint ?
Applikation er et fint ord for et system du har lavet. F.eks. et brugersystem, et kommentarsystem... things like that...
Men altså, jeg går ud fra dit brugersystem har MySQL som backend. Så kunne man forestille sig at du kunne lave yderligere en tabel der kan relatere dine bruge til de firmaer de må have adgang til. Dine firmaer ligger sikkert også i databasen. Du må så lige bære over med mig og selv finde de rette tilpasninger til dine eksisterende tabeller.
Men altså, tre tabeller: brugere | bruger_id | brugernavn | kodeord |
firmaer | firma_id | firmanavn | og så videre |
brugereFirmaLink | bruger_id | firma_id |
Hvis vi så siger du har 1 bruger (bruger_id = 1) og seks firmaer (firma_id = 1-6) men din bruger kun skal have adgang til tre af dem, så smider du de tre firma_id'er ind i brugereFirmaLink så du egentlig har disse linier: +-----------+----------+ | bruger_id | firma_id | +-----------+----------+ | 1 | 1 | | 1 | 4 | | 1 | 5 | +-----------+----------+
Ud fra den tabel kan jeg så antage at bruger_id 1 kun har adgang til at se data fra firma_id 1, 4 og 5.
Så kan jeg hurtigt kontrollere, på firmasiden som brugeren forsøger at se, om brugeren overhovedet må se data fra firmaet:
<?php $sql = "SELECT bruger_id FROM brugereFirmaLink WHERE bruger_id = '".$_SESSION["bruger_id"]."' AND firma_id = '".$firma_id."' LIMIT 1"; $res = mysql_query($sql); if(mysql_num_rows($res) == 0) $visdata = false; else $visdata = true;
if($visdata) { //Vi kan vise dataene, for brugeren måtte gerne se dem }
jeg tror stadig ikke der er nogen af os der har forstået hvorfor - for det giver ingen mening... Prøv at give forklaringen på hvorfor du vil have det sådan, så skal vi nok prøve at finde dig en acceptabel løsning :)
jeg er ved ( for sjov ) at lave et spil ( meget lille spil ) hvor man skal kunen oprette et firma og så skal man kunen købe jord og opgrader det så man kan produksere noget og det er har jeg har problemet
jeg har lave min DB så den ser sådan ud
brugere | bruger_id | brugernavn | kodeord | og så videre |
firmaer | firma_id | master_id | firmanavn | og så videre |
jeg skal så have så brugeren kan vælge at se info om firmaet og de skal kunne opgradere og købe jord.
og det er har jeg ikke vil have at de skal kunne komme ind på andre brugers firma og se info og købe ting
jeg har lavet så det kommer en liste over de firmaer men har og så skal man trykke på navnet så kommer man til den side hvor man kan købe jord
hvis jeg bruger $_GET kan de jo ændre det så de får adgang og det er det jeg vil undgå ved at lave en post eller noget andet som gør at de ikke kan ændre id
mit forslag ( ud fra hvad repox er kommet med ) er :
$source1 = mysql_query("SELECT * FROM firma_info WHERE id = '$id' AND master_id = '$user_id' ")or die(mysql_error());
I princippet er min løsning også en god vej at gå, fordi du dynamisk har mulighed for at tilføje og fjerne firmaer tilknyttede brugerne.
Du skal ikke være bange for at bruge flere tabeller for at opnå de ønskede resultater.
Min metode er også en nem måde at ridse tilgængelige firmaer op på, overdrage ejerskab, tilknytte flere informationer til de forskellige firmaer på tværs af brugeren.
GET variabler er ikke en negativ ting; det der er negativt er når du ikke kan finde ud af begrænse brugeren ordentligt. At forsøge sig med halve løsninger som at ændre GET til POST løser ingenting.
Det er bedre at lave din applikation mere sikker end at forsøge at gøre det umulige; at bestemme over klienten.
brugere | bruger_id | brugernavn | kodeord | og så videre |
og så videre giver os jo ingen verdens ide om hvad du ellers har af felter :S
du kunne så på de sider hvor der skal redigeres/tilkøbes eller hvad der nu er af muligheder, endnu engang tjekke om brugeren har adgang til netop det firma der er valgt
og igen en sidste gang på siden hvor det rent faktisk bliver gennemført (databasen opdateres) tjekker du igen om brugeren må...
du har de rækker i databasen som en bestemt bruger på redigere, lad os sige at brugeren må redigere i 1, 3 og 7.
med repox tidligere forslag, henter du kun dem ud, så brugeren ikke kan se andre.
når du linker til dem, bliver det med GET og id'et vil således stå i adresse-linjen. nu kan brugeren gå op og skrive id=8 (som er en andens), der hvor der egentlig stod id=7 (som er hans eget), og på den måde få adgang til at rette i en andens oplysninger, men hvis du på siden, hvor der rettes, tjekker om den aktive bruger rent faktisk har adgang til rækken, så kan du jo på den måde undgå at der bliver rettet i andet end brugerens egne rækker.
når man har rettet og trykker godkend eller hvad der nu sker, så kører du noget update-queries på din db, men inden det, kan du igen tjekke om brugeren har adgang til at redigere i netop den række der er angivet...
dstjulle: [hvis jeg bruger $_GET kan de jo ændre det så de får adgang og det er det jeg vil undgå ved at lave en post eller noget andet som gør at de ikke kan ændre id]
de kan da også skrive deres egen <form> og bare bruge denne - det ændre INTET på sikkerheden...
Du bliver nød til at gøre noget andet.
et simpelt trick kunne være at kryptere din tekst i stedet.
ja det jeg også det jeg vil prøve at lave men jeg skal lige have det hele til at passe sammen og som repox skrive med brugereFirmaLink kunen det godt ske det var en meget fedt ting at få ind :-D jeg skal lige se om jeg kan få det til at virke ;-) skrive svar her i weekenden
Som du selv er inde på, så er det bare et 'trick'. Det har ingen gavnlig værdi, hvis systemet i forvejen er usikkert. Man kan lige så godt lave det ordentlig fra starten, så man ikke behøver at lave sådan nogle løsninger.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.