Har stött på problemet att man i vanliga ASP skulle vilja kunna vara säker på att värdena man får från ett forumlär kommer från formuläret som man själv har skapat och inte från någor hack som någon person byggt ihop själv.
Detta har jag aldrig sett något bra svar på, och utgått från att det princip är omöjligt att göra.
Nu har ju ASP.NET sina event som de kör. Borde man inte kunna använda dessa för att utgå ifrån att datan som kommer till en verkligen kommer ifrån sida och inte från något hemmahack.
Ser några svagheter som jag hoppas jag ser fel på.
- När man trycker på knappen så görs en postback och i den så måste man ju på någon vänster tala om för servern vilken knapp som blev tryckt på. Alltså information om vilken knapp som blev tryckt på skickas från klienten till servern, det borde man kunna manipulera.
- Man borde även kunna manipulera propertyn IsPostBack, eftersom det borde skickas med någon parameter från klienten till servern som berättar att den verkligen är en PostBack som körs och att det inte är första gången.
Är det någon som vet något om detta och kan bekräfta/dementera/har egna funderingar på om man kan manipulera denna datan, eller om man verkligen kan lita på att när mitt event för att en knapp blivit nedtryckt körs, så har man verkligen varit inne på min sida och tryckt på knappen.
Är det någon som vet något om detta och kan bekräfta/dementera/har egna funderingar på om man kan manipulera denna datan, eller om man verkligen kan lita på att när mitt event för att en knapp blivit nedtryckt körs, så har man verkligen varit inne på min sida och tryckt på knappen.
Är nog ganska lätt att dementera:
Snälle Pelle surfar mot din sida och trycker på submit-knappen. Elake Kalle kör en sniffer mot Pelles maskin och fångar all data som Pelle skickar. Kalle lyfter in hela datan i sitt "hemmahack" och skickar det mot din sida som nu inte kan se någon som helst skillnad. Om Kalle nu vill ändra nån data så kan det eventuellt bli svårt pga av viewstate-fältet. Men någon principiell skillnad mot ASP/PHP eller annat finns ju inte eftersom man redan där (serverside) kan koda om/koda av dolda fält om man känner för det.
Har stött på problemet att man i vanliga ASP skulle vilja kunna vara säker på att värdena man får från ett forumlär kommer från formuläret som man själv har skapat och inte från någor hack som någon person byggt ihop själv.
Detta har jag aldrig sett något bra svar på, och utgått från att det princip är omöjligt att göra.
Är jag helt ute och simmar om jag tänker på servervariabeln "HTTP_REFERER"? Den kan man väl använda för att visa vilken sida besökaren kommer ifrån.
Den kan man väl använda för att visa vilken sida besökaren kommer ifrån.
Nej, "HTTP_REFERER" visar vilken sida klienten påstår att den senast besökte. Att lita på den i säkerhetssammanhang är ungefär lika meningsfullt som att tro att alla klienter som säger att de är IE verkligen är det (och inte tex Opera).
Teoretiskt sätt om du använder dig av publika funktioner och inte har någon säkerhet alls på din applikation så borde det ju gå att göra så som du skriver. Men det finns ju en mängd olika inloggnings, personifierings och säkerhetsmodeller som du kan använda så visst kan man verifiera att det är rätt knapp som kör ett event...
Snälle Pelle surfar mot din sida och trycker på submit-knappen. Elake Kalle kör en sniffer mot Pelles maskin och fångar all data som Pelle skickar. Kalle lyfter in hela datan i sitt "hemmahack" och skickar det mot din sida som nu inte kan se någon som helst skillnad. Om Kalle nu vill ändra nån data så kan det eventuellt bli svårt pga av viewstate-fältet. Men någon principiell skillnad mot ASP/PHP eller annat finns ju inte eftersom man redan där (serverside) kan koda om/koda av dolda fält om man känner för det.
Mmmm. Låter lite omständigt, men visst kör för det!.
Men det finns ju en mängd olika inloggnings, personifierings och säkerhetsmodeller som du kan använda så visst kan man verifiera att det är rätt knapp som kör ett event...
Kan du utveckla det mer, jag tänkte först att man kunde kolla på ip-adressen så det är samma, men den kan man ju förfalska :(
Eventuella sessionsvariabler får man ju också tillgång till när man snor alla som skickas iväg, så elaka kalle ser ju verkligen ut som Pelle för min server.
Usch vad jobbigt, dumt att man inte kan vara säker.
Tja, om du har fuktionalitet som kan missbrukas så är det väl lämpligt att använda sig av något inloggningsförfarande. Om du exempelvis använder windows authentication så måste du ju logga på det kontot för att komma in på servern använda dess funktionalitet, annars åker du ut innan du överhuvudtaget hinner exekvera någon kod. Ska du sniffa upp inloggningsnamn och lösenord så måste du ju ha någon trojan som kan läsa tangentryckningar och skicka dem till dig på den aktuella datorn och det är väl inte helt lätt att få in en sån och få den att fungera kanske... :)
Nu har ju ASP.NET sina event som de kör. Borde man inte kunna använda dessa för att utgå ifrån att datan som kommer till en verkligen kommer ifrån sida och inte från något hemmahack.
För att svara på ursprungsfrågan:
Hur man än vänder och vrider på det så handlar det fortfarande om HTTP och HTTP är ett klartextprotokoll som kan kopieras och manipuleras. Det finns inget i ASP.NET som förändrar det gentemot andra server-sidetekniker som ASP, PHP, Perl .. Möjligtvis finns det mer inbyggt stöd för säkerhet som förenklar för kodaren men, som sagt, inget som inte går att åstadkomma i tidigare tekniker (ev. med mer jobb).
Det var inget jätteviktigt, tänkte mest slippa att göra en massa kontroller när man skulle spara datan.
Tänkt ha den kontrollen när man kom till sidan första gången och antingen så har man tillåtelse att vara där eller inte, och på det sättet slippa göra en massa kontroller när man skall spara ner värdena till databasen.
Samt att om jag laddar upp värden till en dropdownlista så vet jag att det endast hade kunnat vara dessa värden som kommit till min sida.
Nu får man lösa det med en massa kontroller mot databasen för att vara säker på att man får/inte får spara ner dessa olika värden.