Jag har använt mig av koden på http://support.microsoft.com/default.aspx?scid=kb;EN-US;301240 Ok, jag tror jag har löst det. Hej, Mycket intressant. Det var lite åt det hållet jag ville göra från början. Men så hittade jag här på pellesoft en "artikel" om inloggningsfunktioner... Så här gör man tydligen för att läsa de krypterade cookisarna.. Fredrik, Kan tillägga att den vanligaste säkerhets bristen hos ett företag är en missnöjd / föredetta anställd person. Det fokuseras mycket på att skydda sig utifrån när det finns en hotbild inom företaget som man måste designa för med så väl säkerkod som policy och rutiner på företaget.Inloggningsfunktion?
Det fungerar att logga in men jag skulle vilja spara ytterligare två värden som jag sedan kan hämta och lägga in i sessionsvariabler. När jag lägger till
ck.Values.Add("emp_id", emp_id.ToString());
ck.Values.Add("emp_type_id", emp_type_id);
till koden så fungerar inte inloggningen längre.
Den biten av koden ser då ut som nedan.
if (cb_cookie.Checked)
ck.Expires=tkt.Expiration;
ck.Path = FormsAuthentication.FormsCookiePath;
ck.Values.Add("emp_id", emp_id.ToString());
ck.Values.Add("emp_type_id", emp_type_id);
Response.Cookies.Add(ck);
Är det någon som vet vad det kan vara för fel?Sv: Inloggningsfunktion?
Men nu funderar jag på hur jag hämtar det jag sparat i cookien. Allt är ju krypterat så när jag kör cookyval= Request.Cookies["ck"].Value; får jag ett felmeddelande som säger:
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
Line 98: {
Line 99: string cookyval;
Line 100: cookyval= Request.Cookies[cookiename].Value;
Line 101: lbl_test.Text = cookyval;
Line 102: }
Jag kan tänka mig att det blir så eftersom det är krypterat. Jag har kollat runt men inte hittat någonstans där det står hur jag ska göra för att dekryptera och hämta datat.Sv: Inloggningsfunktion?
Ett råd. Spara inte ner för mkt så kallat "junk" i sessioner eller cookies. I ditt fall verkar det som du vill spara ner id:n för att lättare komma åt data baserat på dem.?
Jag antar att du av det användarnamn du sparar när du sätter ditt ok ang login, som kan användas för att hämta dessa id värden i efterhand?
Ju mer saker du lagrar i en Cookie ju mer infor ger du användaren som även skulle kunna vara en busig hacker. Dessa idn är heliga för din session (användare) och om du sparar ner dem i en Cookie så kommer de inte längre bli lika heliga. För vem som kan ändra dem och helt plötsligt (baserat på hur du byggt) kommer en användare åt saker han inte borde pga employee IDt.
Så det räcker att du endast har användarnamnet (som är krypterat) i cookien och vid tillfällen nyttjar användarnamnet för att hämta utt dess emp_id för att utföra nästa rutin.
Session är ju i of bra, men det kan bli svårt att hålla reda på allt som ligger i sessionen. Ett tips om du ändå vill spara data där är att du gör en Entiet klass. Ex Profile med properties. Dessa sätter du och lägger i en o samma Sessions variabel.
Session["Profile"] = profile;
på så vis har du ett gemensamt sätt minimerar du antal sessions som du måste minnas när du kodar. Du kan även skapa en liten State klass om du vill där du går mot Sessions som du kodat upp.
ex:
<code>
public class Profile
{
public static EmployeeID
{
get { return Session["emp_id]; }
set { Session["emp_id"] = value; }
}
public static EmployeeTypeID
{
get ....
set ....
}
}
</code>
Vill du sätta o få tag i din data gör du sedan följande:
Sätta:
<code>
Profile.EmployeeID = 34;
</code>
Hämta när som i din applikation:
<code>
string empID = Profile.EmployeeID;
</code>
För att minimera antal Sessions Variabler även här kan du skapa någon slags profile state klass för profilen som har properties med dess typer. Som du sedan kan hämta ut på fölljande sätt.
Pseudo kod:
<code>
public class ProfileState
{
public static Profile Profile
{
get { return Session["Profile"]; }
set { Session["Profile"] = value; }
}
}
public class Profile
{
private string _employeeId;
public string EmployeeID
{
get { return this._employeeId; }
set { this._employeeId = value;
}
}
'code behind
'sätta:
Profile profile = new Profile();
profile.EmployeeID = "Nisse12334";
ProfileState.Profile = profile;
'hämta:
string a = Profile.Profile.EmployeID
</code>
Typ så...
Finns ju mer sätt att bygga detta på för att göra det ännu bättre. Men detta är tillräckligt nog för att få en mer Objeckt driven hantering...
Mvh Johan
OBS! Koden är skriven för hand så jag garanterar inte att den fungerar rakt av. Konceptet är det viktiga. Sv: Inloggningsfunktion?
Tanken men det som jag gör är att det ska köras av folk på företaget inget för kunder. Iofs kommer det kunna nås utifrån men jag tror inte riktigt det är någon fara för hackers.
Dessutom är cookien ju krypterad.
Det som jag vill göra är att lägga en cookie som gäller under 12 timmar så att man loggar in på morgonen och sen inte behöver logga in förän nästa dag igen.
Oavsett hur jag gör så måste jag ju hämta username från cookin och det får jag inte att fungera.Sv: Inloggningsfunktion?
HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);Sv: Inloggningsfunktion?
Ett råd gällande säkerhet, så fort du måste använda ordet Nog eller kanske, eller tror inte så har du redan där en brist i sitt sytem. Om någon säger hur säker är din lösning skall varken tro, nog, kanske existera.
No one will do that!
Why would anyone do that?
We’ve never been attacked.
We’re secure—we use cryptography.
We’re secure—we use ACLs.
We’re secure—we use a firewall.
We’ve reviewed the code, and there are no security bugs.
We know it’s the default, but the administrator can turn it off.
If we don’t run as administrator, stuff breaks.
Din cockie är inte direkt omöjlig att dekryptera för den som vill, att modifiera infon i den är heller inte så svårt. Även om ett system bara skall nyttjas internt eller sannorliken liten att andra får kännedom om den så är det mer hur man tänker som utvecklare än vad man tror. Att ha ett bra säkerhetstänk gör att man bygger en produkt med bra kvalité.
Så jag tycker inte du skall blunda för dem.
Det räcker även att du har ett litet säkerhetshål där man kan modifiera din query eller slänga in text i ett formulär så kan man nå och modifiera din cookie.
Mvh JohanSv: Inloggningsfunktion?