Toon posts:

[ASP]Login en mdb databases

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0Henk 'm!

  • naaitsab
  • Registratie: Augustus 2005
  • Laatst online: 21:27

naaitsab

Si vis pacem, para bellum

Topicstarter
Ik ben voor school bezig om een webshop te bouwen, dat gaat aardig maar nou zijn we op het punt gekomen om gebruikers te laten registeren.
Hiervoor zit er een mooie template in Visual Studio 2010 maar deze pakt enkel gebruikersnaam+email+wachtwoord en slaat deze 'versleuteld' op in een aparte database in sql format.

Om te bestellen heb je uiteraard ook adres gegevens nodig, deze kan de gebruiker invullen in een formulier welke deze informatie dan opslaat in de mdb waar ook de producten en evt bestellingen in staan. Nou zijn we al 4 dagen aan het googlen en rondvragen maar nergens kan ik een oplossing vinden om de login gegevens uit de sql database te halen en te koppelen aan de ingevoerde adres gegevens of de login gegevens op te slaan in de 'hoofd' mdb.

Andere optie is het schrijven van de adres gegevens naar de sql database en deze tijdens het bestellen op te vragen maar aangezien we die database niet kunnen openen en laat staan kunnen aanpassen loopt dat ook spaak.

Aangezien we erg basic kennis hebben van deze stof komen we ook niet verder en de betreffende docenten zeggen allemaal iets in de trend van 'dat heb ik ooit wel eens gedaan maar weet niet meer hoe' daar schieten we dus ook geen fluit mee op, we zijn al een aantal dagen aan het zoeken maar nergens staat echt wat we nodig hebben. inloggen gaat prima maar de stap daarna daar loopt het fout.

-Het is een school project en er zal dus geen financieel of enig ander verplichting aanzitten dus we mogen via deze weg informatie vragen.
-De webshop bevat ongeveer 5 categorieën met ongeveer 50 producten.
-Het hoeft niet onwijs ingewikkeld en extreem beveiligd te worden.

Hopelijk kunnen julie ons de juiste weg op helpen want we zitten nu echt vast :/

if (!coffee) {
Work = false; }


Acties:
  • 0Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 02-08-2021
wanneer een code snippet van VS2010 code genereerd die je niet snapt en niet kunt veranderen kan ik maar een ding zeggen:
Do not use!

Je wilt iets integreren in je eigen product. Wanneer je iets niet kunt koppelen (misschien wel omdat je het niet snapt) dan zou ik je goed inlezen, en als je er niet uit komt gewoon zelf bouwen.
Daar leer je ook nog een boel van ook.

Daarbij lijkt het me ook een beetje de bedoeling dat je het zelf doet, aangezien het een schoolopdracht is.

btw: zo moeilijk is het niet.
Je hebt denk ik al het een en ander aan CRUD, dus dit is gewoon een extra stukje, waarbij je nu wat nuttigs met de informatie doet die je uit de DB haald.

ow en vergeet niet dat je passwords niet in je db moet opslaan, maar hashes van passwords he ;)

[Voor 22% gewijzigd door BasieP op 31-05-2011 22:43]

This message was sent on 100% recyclable electrons.


Acties:
  • 0Henk 'm!

  • naaitsab
  • Registratie: Augustus 2005
  • Laatst online: 21:27

naaitsab

Si vis pacem, para bellum

Topicstarter
BasieP schreef op dinsdag 31 mei 2011 @ 22:41:
wanneer een code snippet van VS2010 code genereerd die je niet snapt en niet kunt veranderen kan ik maar een ding zeggen:
Do not use!
Daar zit wat in, maar het werkt prachtig pagina's afschermen per "group" enzo.
Hoe je dat zelf zou moeten maken is ons niet duidelijk.
Je wilt iets integreren in je eigen product. Wanneer je iets niet kunt koppelen (misschien wel omdat je het niet snapt) dan zou ik je goed inlezen, en als je er niet uit komt gewoon zelf bouwen.
Daar leer je ook nog een boel van ook.
Ik ben al 4 dagen aan het inlezen over inloggen en bijbehorende databases daar kom ik steeds weer terug bij die standaard login van een 'new website' in visual studio
Daarbij lijkt het me ook een beetje de bedoeling dat je het zelf doet, aangezien het een schoolopdracht is.
We mochten alle bronnen en manieren gebruiken als we het achteraf maar kunnen verklaren hoe het werkt. ;)
btw: zo moeilijk is het niet.
Je hebt denk ik al het een en ander aan CRUD, dus dit is gewoon een extra stukje, waarbij je nu wat nuttigs met de informatie doet die je uit de DB haald.
Dat klopt ja maar we zitten nog met het punt van die sql database en een acess database(waar wij wat mee kunnen) niet koppelbaar zijn op dit moment.
ow en vergeet niet dat je passwords niet in je db moet opslaan, maar hashes van passwords he ;)
Die conclusie hadden wij ook getrokken ja :>

if (!coffee) {
Work = false; }


Acties:
  • 0Henk 'm!

  • HMS
  • Registratie: Januari 2004
  • Laatst online: 21:35
Als je graag key stretching wil doen (maakt het lastiger voor de attacker om je wachtwoorden kraken), gebruik dan PBKDF2 (Password Based Key Derivation Function 2).

Achtergrond info:
Wikipedia: PBKDF2
http://www.rsa.com/rsalabs/node.asp?id=2127
ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-5v2/pkcs5v2-0.pdf

Natuurlijk heeft .NET hier wel built in support voor :+

MSDN: Rfc2898DeriveBytes Class (System.Security.Cryptography)

Acties:
  • 0Henk 'm!

  • naaitsab
  • Registratie: Augustus 2005
  • Laatst online: 21:27

naaitsab

Si vis pacem, para bellum

Topicstarter
Ik zal er morgen eens naar kijken met het groepje.

if (!coffee) {
Work = false; }


  • NickThissen
  • Registratie: November 2007
  • Laatst online: 23-05 20:03
Gaat het over ASP.NET?

In dat geval: ik gebruik ook ASP.NET met een Access database (mdb). Goed nieuws: je kunt het login systeem gewoon gebruiken. Je moet alleen een paar handelingen zelf doen, maar dat stelt weinig voor.

Ik zelf heb altijd een tabel Users in de database, met Id, Username en PasswordHash. Hier komen gewoon alle gebruikers in die toegang moeten hebben tot je website. Je kunt dan later nog groepen ed toevoegen, maar dat is allemaal bijzaak.

Ik geloof dat VS2010 een hele map Account maakt met een aantal pagina's. Die gooi ik altijd meteen weg, ik maak ze lekker zelf. Stelt niks voor, en ik weet niet zeker of je de standaard pagina's wel kan gebruiken. Anyway, je hebt dus nodig: een Register pagina (waar nieuwe gebruikers kunnen registreren) en een Login pagina.

Op de Register pagina plaats je een paar textboxen, eentje voor de username die de gebruiker wilt gebruiken, twee voor het wachtwoord (eentje om te checken of de gebruiker geen typefout maakt).
Klikt de gebruiker dan op een OK knop, dan neem je simpelweg de volgende stappen:
  1. Kijk of de gebruikersnaam al bestaat (als dat zo is, niet doorgaan)
  2. Kijk of de twee wachtwoorden overeenkomen
  3. Als dit allemaal klopt, dan maak je een nieuwe gebruiker aan in de database. De Username is duidelijk, als PasswordHash gebruik je een of andere hash van het ingevulde wachtwoord. Ik zelf gebruik meestal deze ingebouwde functie:
    code:
    1
    
    string passwordHash = FormsAuthentication.HashPasswordForStoringInConfigFile(txtPassword.Text.Trim(), "SHA1");
Op de Login pagina heb je simpelweg een veld voor de gebruikersnaam en het wachtwoord. Als iemand probeert in de loggen neem je de volgende stappen:
  1. Haal de User uit de database op waarvan de Username overeenkomt met de ingevulde gebruikersnaam (de Username kolom moet natuurlijk uniek zijn). Als die niet bestaat kun je dat weergeven.
  2. Van deze gebruiker hash je nu ook het wachtwoord, met dezelfde functie die je in de Register pagina gebruikt. Het idee is hier dat je de hashes gaat vergelijken, en niet de wachtwoorden zelf. Zo hoef je nooit het wachtwoord te weten of in de database op te slaan, enkel de hash. Mocht iemand je database in kunnen kijken dan ziet hij alleen de hash waar hij vrij weinig aan heeft.
  3. Anyway, is de hash in de database gelijk aan de hash van het ingevulde wachtwoord, dan is het juiste wachtwoord gebruikt. Je moet je gebruiker nu inloggen. Dit doe je met behulp van de FormsAuthentication.RedirectFromLoginPage methode, waaraan je de Username van de gebruiker meegeeft.
That's it! Door de gebruikersnaam mee te geven is de gebruiker met die naam nu ingelogd. Je kunt nu bijvoorbeeld ook de Login controls gebruiken (LoginName, LoginStatus, etc).

Ik geloof dat je ook per pagina in kunt stellen of je ingelogd moet zijn om hem te bekijken, hoewel ik dat nooit doe; ik check het gewoon zelf. Om de ingelogde gebruiker op te halen haal je de IIdentity van de current user op: System.Web.HttpContext.Current.User.Identity. Dan kun je kijken of IIdentity.IsAuthenticated waar is, en zo ja kun je de gebruikersnaam van de ingelogde gebruiker verkrijgen door de IIdentity.Name property. Daarmee kun je dan weer in je database gaan zoeken om het Id en verdere details van die gebruiker op te halen.

Op elke pagina kun je dan in de Page_Load de ingelogde gebruiker opvragen. Als die niet bestaat dan is er niemand ingelogd. Wat je dan kan doen is de gebruiker redirecten naar de login pagina. Daarvoor gebruik je FormsAuthentication.RedirectToLoginPage methode. Welke pagina de Login Page is moet je instellen in je web.config file, bijvoorbeeld:
code:
1
2
3
    <authentication mode="Forms">
      <forms loginUrl="~/Pages/Users/Login.aspx" timeout="2880"/>
    </authentication>



Of dit allemaal 100% veilig is weet ik niet, ik ben zelf ook maar een amateur, maar het lijkt tot nu toe allemaal goed te werken. Overigens geef ik bewust bijna geen code, daar moet je zelf wel uit kunnen komen, het is immers een school opdracht...

[Voor 7% gewijzigd door NickThissen op 01-06-2011 00:26]

Mijn iRacing profiel


  • naaitsab
  • Registratie: Augustus 2005
  • Laatst online: 21:27

naaitsab

Si vis pacem, para bellum

Topicstarter
Het inloggen lukt half, met een 'zelfgemaakte' login.
Nou is het punt nog controleren of de gebruikersnaam al bestaat, hier kan ik niks over vinden in C# icm een mdb database file en geen sql server.

Aangezien ons niveau nog veel amateuristischer is dan dat van jou komen we er ook niet uit.

if (!coffee) {
Work = false; }


  • RobIII
  • Registratie: December 2001
  • Laatst online: 00:48

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

En waar kom je concreet niet uit dan? Ik zie je nu peeuwen "HELP!" maar als je niet aangeeft waar je (precies!) niet uit komt wordt het voor ons wat lastig je te helpen ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • naaitsab
  • Registratie: Augustus 2005
  • Laatst online: 21:27

naaitsab

Si vis pacem, para bellum

Topicstarter
Nou het feit dat de login zelf schrijven niet gaat omdat we daar geen kennis voor hebben.
En ons eerdere probleem staat volgens mij duidelijk beschreven in de TS, de database die de login template werkt met een sql database(mdf)

We hebben wel een werkend login in visual basic maar dat is geen C# wat de bedoeling is.
Mocht het niet duidelijk zijn dan zal ik vanavond nog even proberen om het beter uit te leggen dan.

if (!coffee) {
Work = false; }


  • NickThissen
  • Registratie: November 2007
  • Laatst online: 23-05 20:03
Het controleren van de gebruikersnaam is heel eenvoudig: je moet gewoon kijken of er in de Users tabel een record is die de ingevulde Username heeft. Dat kun je bijvoorbeeld doen door een simpele
code:
1
SELECT * FROM Users WHERE Username = ...

of eigenlijk beter, omdat je alleen moet weten hoeveel van die records er zijn (0 of 1) in plaats van alle details,
code:
1
SELECT COUNT(*) FROM Users WHERE Username = ...

Als die query een record terug geeft dan bestaat die naam dus al. Als die query geen record terug geeft dan is de naam nog vrij. Als de query meerdere records terug geeft dan klopt er iets niet in je database; de username kolom moet natuurlijk wel uniek zijn.


Wat is nu het probleem, het idee, of het uitvoeren van de query? Als het uitvoeren van de query niet lukt dan heeft het vrij weinig met ASP.NET te maken maar is het gewoon database interactie die niet lukt. Er zijn zoveel verschillende manieren om met een database contact te maken, ik weet zeker dat je genoeg kunt vinden door te googlen op "C#.NET access database examples" of iets dergelijks.

Mijn iRacing profiel


  • NickThissen
  • Registratie: November 2007
  • Laatst online: 23-05 20:03
naaitsab schreef op woensdag 01 juni 2011 @ 15:28:
We hebben wel een werkend login in visual basic maar dat is geen C# wat de bedoeling is.
Converteren tussen VB.NET en C#.NET mag geen probleem zijn, tenzij je dingen gaat gebruiken die uniek voor C# of VB zijn (en dat zijn er bar weinig). Er zijn genoeg automatische tools te vinden die de vertaling voor je doen, bijvoorbeeld deze.

Mijn iRacing profiel


  • naaitsab
  • Registratie: Augustus 2005
  • Laatst online: 21:27

naaitsab

Si vis pacem, para bellum

Topicstarter
NickThissen schreef op woensdag 01 juni 2011 @ 22:00:
Het controleren van de gebruikersnaam is heel eenvoudig: je moet gewoon kijken of er in de Users tabel een record is die de ingevulde Username heeft. Dat kun je bijvoorbeeld doen door een simpele
code:
1
SELECT * FROM Users WHERE Username = ...

of eigenlijk beter, omdat je alleen moet weten hoeveel van die records er zijn (0 of 1) in plaats van alle details,
code:
1
SELECT COUNT(*) FROM Users WHERE Username = ...

Als die query een record terug geeft dan bestaat die naam dus al. Als die query geen record terug geeft dan is de naam nog vrij. Als de query meerdere records terug geeft dan klopt er iets niet in je database; de username kolom moet natuurlijk wel uniek zijn.
Ah ik was dan aardig in de richting, zal het proberen te implementeren.
Wat is nu het probleem, het idee, of het uitvoeren van de query? Als het uitvoeren van de query niet lukt dan heeft het vrij weinig met ASP.NET te maken maar is het gewoon database interactie die niet lukt. Er zijn zoveel verschillende manieren om met een database contact te maken, ik weet zeker dat je genoeg kunt vinden door te googlen op "C#.NET access database examples" of iets dergelijks.
Het probleem zit m niet in de access database maar de MDF database die het login gedeelte van VS2010 aanmaakt, als we die code zo kunnen aanpassen dat dit script onze mdb gebruikt dan zijn we klaar maar elke aanpassing in het script lijd tot vastlopers of de hele boel werkt niet meer.

NickThissen schreef op woensdag 01 juni 2011 @ 22:02:
[...]

Converteren tussen VB.NET en C#.NET mag geen probleem zijn, tenzij je dingen gaat gebruiken die uniek voor C# of VB zijn (en dat zijn er bar weinig). Er zijn genoeg automatische tools te vinden die de vertaling voor je doen, bijvoorbeeld deze.
Die hebben we al geprobeerd maar een klein deeltje pakt de convertor niet waardoor het hele script niet draait :( Ik heb de code zo 1-2-3 niet bij de hand dus kan het ook niet even posten(staat op andere laptop)

if (!coffee) {
Work = false; }


  • Shrimp O Vis
  • Registratie: Augustus 2007
  • Laatst online: 02-04-2019

Shrimp O Vis

Battle.net: SkyDiDeLY.628

Offtopic:
Als je HBO doet, dan neem ik aan dat je zelf hebt gekozen voor Visual Studio 2010.. mag ik vragen waarom geen php/mysql ofzo? :+

betaalt microsoft jullie opleiding ofzo :P

[Voor 17% gewijzigd door Shrimp O Vis op 01-06-2011 23:36]

Core 2 Duo E8400; 2x2gb OCZ; Sapphire Radeon HD4850; Gigabyte EX38-DS4; NZXT Apollo;
If I asked "Is an electron a wave OR a particle?", my question would be wrong before you even answered.


  • naaitsab
  • Registratie: Augustus 2005
  • Laatst online: 21:27

naaitsab

Si vis pacem, para bellum

Topicstarter
We hebben niet gekozen voor visual studio het moet :/ we hebben eerst 'les' (0.0 over login systemen :( ) gehad in C# en ASP en nog niks in PHP en ik geloof dat dat helemaal niet aan bod komt op de opleiding 8)7

We hebben even de docent gemaild of we gebruik mogen maken van de VB code dus hopelijk wordt dat goedgekeurd dan is het login systeem in ieder geval zo goed als werkend.

if (!coffee) {
Work = false; }


  • NickThissen
  • Registratie: November 2007
  • Laatst online: 23-05 20:03
Ik snap je probleem niet echt. De MDF database wordt gebruikt door het template, maar zoals ik in m'n post zeg, als je je user gegevens in je Access database wil, dan kun je die hele template (in ieder geval het Account gedeelte) vergeten. Al je gegevens sla je in je eigen (mdb) database op. Het enige wat met ASP.NET en ingelogde gebruikers te maken heeft zijn deze functies, die ik al beschreven heb:
- FormsAuthentication.RedirectFromLoginPage(username), waarmee je een gebruiker met de naam 'username' inlogt,
- FormsAuthentication.RedirectToLoginPage(), waarmee je iemand die niet ingelogd is naar de login pagina verwijst.
- System.Web.HttpContext.Current.User.Identity.Name, waarmee je de naam van de ingelogde gebruiker ophaalt.

Verder regel je alles zelf in je eigen database.

EDIT
Om het nog een keer te benadrukken: die mdf file gebruik je niet.

[Voor 4% gewijzigd door NickThissen op 02-06-2011 00:34]

Mijn iRacing profiel


  • naaitsab
  • Registratie: Augustus 2005
  • Laatst online: 21:27

naaitsab

Si vis pacem, para bellum

Topicstarter
Hmm zal die code eens googlen/opzoeken in mn boek ben m nog niet tegengekomen :9 Thanks

Het probleem is het vs2010 script aanpassen of zelf wat in elkaar steken, optie 2 strand bij ons steeds dus daarom zaten we te klooien met optie 1.

Zal het morgen een mailen aan 1 van m'n groepsgenoten kijken of we er samen wat van kunnen bakken.

if (!coffee) {
Work = false; }

Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee