[ASP/ADO/VB]Inlogmechanisme

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Daan5000
  • Registratie: September 2009
  • Laatst online: 25-11-2021
Hallo Tweakers,

Ik ben bezig voor school een forum te maken dat de volgende elementen moet bevatten
  • Masterpage met header met inlogpanel
  • Registratiepagina waarvan gegevens moeten toegevoegd worden aan een MySQL-database
  • Het forum zelf a.d.h.v. repeaters
  • Inlogmechanisme
Bij dit laatste moet ik eerst kijken of de gegevens in de database voorkomen via een executeReader. Als hij geen gegevens (Username + password) vindt moet hij deze fout opvangen met een try-catch. Als hij de gegevens wel vindt, moet ik deze met sessievariabelen meegeven aan de volgende pagina.

Ik krijg hier steeds dezelfde fout: "Connection must be valid and open".

De connectionstring zou juist moeten zijn omdat ik deze reeds eerder heb gebruikt bij het toevoegen van gegevens aan de database. Dit gaat zonder problemen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Imports MySql.Data.MySqlClient
Imports Microsoft.VisualBasic
Partial Class MasterPage
  Inherits System.Web.UI.MasterPage

  Protected Sub btnLogon_Click(sender As Object, e As System.EventArgs) Handles btnLogon.Click
        Dim drUsers As MySqlDataReader
        Try
            Dim cmdReadQuery As New MySqlCommand("SELECT * FROM tblUser WHERE userNickname = ?Nickname AND userpassword = ?Userpassword", dbConn.cn)
            cmdReadQuery.Parameters.Add("Nickname", txtUsername.Text)
            cmdReadQuery.Parameters.Add("Userpassword", txtPassword.Text.GetHashCode)
            dbConn.cn.Open()
            drUsers = cmdReadQuery.ExecuteReader()

        Catch ex As Exception
            'lblLogonError.Text = "Nickname en/of wachtwoord bestaan niet."
            lblLogonError.Text = ex.Message
        Finally
            dbConn.cn.Close()
        End Try
  End Sub
End Class

Connectionstring:
code:
1
<add name="connectionName" connectionString=" Database=lldbDaanCelie; Data Source=ineke.broeders.be; User Id=ll-21506; Password=*;"/>


Is er iemand die me kan vertellen waar mijn fout zit :/ ? Ik heb nog niet veel ervaring met ADO.NET

Alvast bedankt

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Daan5000 schreef op woensdag 23 november 2011 @ 20:22:
Is er iemand die me kan vertellen waar mijn fout zit :/ ? Ik heb nog niet veel ervaring met ADO.NET
Zou je niet ergens dbConn instantiëren en openen :? Of heb je die code achterwege gelaten? Ik mis namelijk ergens een new en een Open(). En beter gebruik je een Using:

Visual Basic .NET:
1
2
3
4
Using connection As New MySqlConnection(connectionString)
    connection.Open()
    ' Do work here; connection closed on following line.
End Using


Het best doe je dat voor alle objecten die IDisposable implementeren. Dat is, uit m'n hoofd, in elk geval de MySqlConnectie, de MySqlCommand en MySqlDataReader.

Je geeft aan het MySqlCommand de connectie die de command dient te gebruiken mee. Als die connectie niet open is wanneer je ExecuteReader() aanroept krijg je die melding.

Verder: Waar hoort mijn topic?
WEB » PRG



Edit: ik zie nu regel 12: dbConn.cn.Open() :X :P oops :P
Dan zul je moeten gaan debuggen: Debuggen: Hoe doe ik dat?. Vette kans dat 't openen van de connectie om eender-welke reden dan ook niet lukt.

[ Voor 86% gewijzigd door RobIII op 23-11-2011 20:55 ]

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

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • c4d3r
  • Registratie: December 2010
  • Laatst online: 01-10-2024
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Imports MySql.Data.MySqlClient
Imports Microsoft.VisualBasic
Partial Class MasterPage
  Inherits System.Web.UI.MasterPage

  Protected Sub btnLogon_Click(sender As Object, e As System.EventArgs) Handles btnLogon.Click
        Dim drUsers As MySqlDataReader
        Try
            Dim cmdReadQuery As New MySqlCommand("SELECT * FROM tblUser WHERE userNickname = ?Nickname AND userpassword = ?Userpassword", dbConn.cn)
            cmdReadQuery.Parameters.Add("Nickname", txtUsername.Text)
            cmdReadQuery.Parameters.Add("Userpassword", txtPassword.Text.GetHashCode)
            dbConn.cn.Open()
            drUsers = cmdReadQuery.ExecuteReader()

        Catch ex As Exception
            'lblLogonError.Text = "Nickname en/of wachtwoord bestaan niet."
            lblLogonError.Text = ex.Message
        Finally
            dbConn.cn.Close()
        End Try
  End Sub
End Class



Beste daan,

1. Bij een selectie query moet men volgens mij geen ? gebruiken
2. Je zou ook een classe moetten hebben? zou je die hier ook even kunnen posten?

hopelijk help ik je hier al even mee verder.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
c4d3r schreef op woensdag 23 november 2011 @ 20:56:
1. Bij een selectie query moet men volgens mij geen ? gebruiken
Parameterized queries ;)
Hoewel de documentatie over "@" spreekt heb ik 't volgens mij ook meegemaakt dat "?" gebruikt werd.
edit:
Ah, hier staat wat meer daarover.
c4d3r schreef op woensdag 23 november 2011 @ 20:56:
2. Je zou ook een classe moetten hebben? zou je die hier ook even kunnen posten?
Alsjeblieft niet. Beperk je tot relevante delen code.

[ Voor 30% gewijzigd door RobIII op 23-11-2011 21:08 ]

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

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Daan5000
  • Registratie: September 2009
  • Laatst online: 25-11-2021
Ik heb dbConn.cn.Open() toegevoegd waardoor ik de foutmelding niet meer krijg. Ben de andere tips uit je post even aan het overlopen.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
offtopic:
WTF is txtPassword.Text.GetHashCode voor rare constructie om een wachtwoord ('hashed'? :X ) te specificeren? Je beseft dat de GetHashCode daar eigenlijk niet voor bedoeld is? Daarvoor wil je toch minimaal een cryptografische hash gebruiken i.p.v. een dergelijke generieke hash. Om, bijvoorbeeld, even te quoten uit de documentatie: "Furthermore, the .NET Framework does not guarantee the default implementation of the GetHashCode method, and the value it returns will be the same between different versions of the .NET Framework.".
Daan5000 schreef op woensdag 23 november 2011 @ 21:08:
Ik heb dbConn.cn.Open() toegevoegd waardoor ik de foutmelding niet meer krijg.
Die stond er, zoals ik pas later opmerkte, toch al op regel 12? Waar staat 't nu dan?

[ Voor 115% gewijzigd door RobIII op 23-11-2011 21:22 ]

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

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Styxxy
  • Registratie: Augustus 2009
  • Laatst online: 12:55
Kan je niet beter, in plaats van hele login gebeuren opnieuw uit te vinden, gebruik maken van reeds ingebouwde functionaliteit? Hooguit zal je nog de database connectie moeten maken (de db implementatie voor MySQL ipv MSSQL, al vermoed ik dat je die ook wel kan vinden).

[ Voor 12% gewijzigd door Styxxy op 23-11-2011 21:26 ]


Acties:
  • 0 Henk 'm!

  • Daan5000
  • Registratie: September 2009
  • Laatst online: 25-11-2021
Styxxy schreef op woensdag 23 november 2011 @ 21:20:
Kan je niet beter, in plaats van hele login gebeuren opnieuw uit te vinden, gebruik maken van reeds ingebouwde functionaliteit?
Daar heb je gelijk in maar we moeten het op deze manier doen om het aan te leren.
RobIII schreef op woensdag 23 november 2011 @ 21:11:
[ot]
WTF is txtPassword.Text.GetHashCode voor rare constructie om een wachtwoord ('hashed'? :X ) te specificeren? Je beseft dat de GetHashCode daar eigenlijk niet voor bedoeld is? Daarvoor wil je toch minimaal een cryptografische hash gebruiken i.p.v. een dergelijke generieke hash. Om, bijvoorbeeld, even te quoten uit de documentatie: "Furthermore, the .NET Framework does not guarantee the default implementation of the GetHashCode method, and the value it returns will be the same between different versions of the .NET Framework.".
Op deze manier is het ons aangeleerd, maar zal de opdrachtgever hier zeker over aanspreken.

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 12:47

gorgi_19

Kruimeltjes zijn weer op :9

RobIII schreef op woensdag 23 november 2011 @ 21:11:
[ot]
WTF is txtPassword.Text.GetHashCode voor rare constructie om een wachtwoord ('hashed'? :X ) te specificeren? Je beseft dat de GetHashCode daar eigenlijk niet voor bedoeld is? Daarvoor wil je toch minimaal een cryptografische hash gebruiken i.p.v. een dergelijke generieke hash. Om, bijvoorbeeld, even te quoten uit de documentatie: "Furthermore, the .NET Framework does not guarantee the default implementation of the GetHashCode method, and the value it returns will be the same between different versions of the .NET Framework.".
The value returned by GetHashCode is platform-dependent. It differs on the 32-bit and 64-bit versions of the .NET Framework.
:P

Verder, als dit het onderwijs is.. :X

* Formsauthentication Class gebruiken scheelt een hoop gedoe (waarom in Sessions opslaan? 8)7)
* Using statements, mis je gelijk try / catch statement
* try catch-gebruiken voor normale logica :X

[ Voor 4% gewijzigd door gorgi_19 op 23-11-2011 23:07 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Euh, ik haalde toch iets soortgelijks aan? Het hele punt was nou net dat de GetHashCode per versie/platform/whatever kan verschillen.
gorgi_19 schreef op woensdag 23 november 2011 @ 22:59:
* Formsauthentication Class gebruiken scheelt een hoop gedoe (waarom in Sessions opslaan? 8)7)
Dat zou de opdracht bepaald hebben:
Daan5000 schreef op woensdag 23 november 2011 @ 20:22:
Als hij de gegevens wel vindt, moet ik deze met sessievariabelen meegeven aan de volgende pagina.
gorgi_19 schreef op woensdag 23 november 2011 @ 22:59:
* Using statements, mis je gelijk try / catch statement
RobIII in "\[ASP/ADO/VB]Inlogmechanisme"
gorgi_19 schreef op woensdag 23 november 2011 @ 22:59:
* SQL-injection, of in ieder geval escaping van speciale karakters.
TS gebruikt al parameterized queries :?
gorgi_19 schreef op woensdag 23 november 2011 @ 22:59:
* try catch-gebruiken voor normale logica :X
Eensch.
Daan5000 schreef op woensdag 23 november 2011 @ 21:28:
Op deze manier is het ons aangeleerd, maar zal de opdrachtgever hier zeker over aanspreken.
Los van de (mogelijke) implementatieverschillen in verschillende .Net versies / platformen etc., snap je ook waarom een dergelijke hash niet eens op kan tegen een, zeg, MD5 hash?

[ Voor 12% gewijzigd door RobIII op 23-11-2011 23:11 ]

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

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 12:47

gorgi_19

Kruimeltjes zijn weer op :9

RobIII schreef op woensdag 23 november 2011 @ 23:09:
Euh, ik haalde toch iets soortgelijks aan? Het hele punt was nou net dat de GetHashCode per versie/platform/whatever kan verschillen.
Dan mis ik een komma in je quote; komt bij mij een beetje krom over.
Dat zou de opdracht bepaald hebben:
Is ook meer een rant op de opdracht dan op de TS :P
TS gebruikt al parameterized queries :?
Zag ik ook later; al geedit. Was een beetje in de war door het mixen van lagen. :)
Los van de (mogelijke) implementatieverschillen in verschillende .Net versies / platformen etc., snap je ook waarom een dergelijke hash niet eens op kan tegen een, zeg, MD5 hash?
Als je al namen noemt en voorbeelden aan het geven bent, kan je net zo goed (vanwege de kritiek op MD5), de alternatieven als bcrypt noemen. Hier zijn ook standaard .net libraries van :) Idd, mocht je per se MD5 willen / moeten gebruiken, dan ben je klaar met FormsAuthentication.HashPasswordForStoringInConfigFile

[ Voor 37% gewijzigd door gorgi_19 op 23-11-2011 23:18 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
gorgi_19 schreef op woensdag 23 november 2011 @ 23:12:
Dan mis ik een komma in je quote; komt bij mij een beetje krom over.
Letterlijk van de MSDN pagina ge-copied/paste. Ik lees daar: "blabla does not guarantee blablabla, and the value it returns blablabla". Duidelijker was wellicht geweest: "blabla does not guarantee blablabla and that the value it returns blablabla"
gorgi_19 schreef op woensdag 23 november 2011 @ 23:12:
Als je al namen noemt en voorbeelden aan het geven bent, kan je net zo goed (vanwege de kritiek op MD5), de alternatieven als bcrypt noemen.
RobIII in "\[ASP/ADO/VB]Inlogmechanisme" linkt naar Wikipedia: Cryptographic hash function; granted bcrypt staat daar niet bij maar is er staat voldoende materiaal waar TS mee vooruit zou moeten kunnen ;)

[ Voor 40% gewijzigd door RobIII op 23-11-2011 23:28 ]

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

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • ThomasVB
  • Registratie: December 2009
  • Laatst online: 04-07 11:21
Ik zit met Daan op school en ik heb dezelfde opdracht gekregen.

Onze opdrachtgever is er zich van bewust dat getHashCode niet de beste manier is om wachtwoorden geëncrypteerd op te slaan in een database. Hij gebruikt het alleen als makkelijke methode om ons het principe uit te leggen. Het is hoofdzakelijk zijn bedoeling om ons zelfstandig te leren werken met ASP.Net, ADO.Net en VB.Net.

Ik citeer uit de opdracht:
Wachtwoorden mag je nooit "plain text" in een database bewaren. Als er iemand onterecht toegang krijgt tot een database kan die op deze manier alle wachtwoorden zien. Daarom worden steeds geëncrypteerde wachtwoorden bewaard. Dit gebeurt meestal onder de vorm van een hashcode. In .NET kan je standaard van elke string de functie getHashCode oproepen. De meest veilige vorm is dit niet, maar als voorbeeld van het principe is het perfect.

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Het is inderdaad een perfect voorbeeld van het principe dat het blijkbaar lastig is voor sommige docenten om uit te zoeken hoe dingen echt werken. Vervolgens nemen mensen dat soort "principe" oplossingen over, en krijg je beveiligings- of andere problemen. Ik zou zeggen, gewoon gelijk goed aanleren. Oftewel, bijvoorbeeld http://bcrypt.codeplex.com/ als library gebruiken. :p

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
ThomasVB schreef op vrijdag 25 november 2011 @ 21:16:
Daarom worden steeds geëncrypteerde wachtwoorden bewaard. Dit gebeurt meestal onder de vorm van een hashcode.
Encryptie != Hashing
ThomasVB schreef op vrijdag 25 november 2011 @ 21:16:
In .NET kan je standaard van elke string de functie getHashCode oproepen. De meest veilige vorm is dit niet
Het levert een Hash op; dat is de enige overeenkomst :X Dat de hash uit getHashCode voor héél andere doeleinden bestemd is laten we dan maar achterwege ofzo...
ThomasVB schreef op vrijdag 25 november 2011 @ 21:16:
maar als voorbeeld van het principe is het perfect.
Verre van; zoals gezegd leer je 't mensen zo verkeerd aan...

[ Voor 42% gewijzigd door RobIII op 25-11-2011 22:17 ]

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

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • DEiE
  • Registratie: November 2006
  • Laatst online: 16-08 19:21
Recycle je een verbinding? Dus deze ergens sluiten en vervolgens weer openen? Zover ik weet is dat niet toegestaan namelijk. Wil je een nieuwe verbinding openen, moet je een nieuwe instantie van je Connection oid (niet bedenk met de ADO-naamgeving) aanmaken.

Zoals ik het zie, heb je een wrapper om de ADO-connectie gemaakt, waarop je de daadwerkelijke connectie kan opvragen middels de "cn" property, en gebruik je deze om je verbinding te openen en te sluiten.
Ik zie alleen niet waar deze wrapper aangemaakt wordt, maar ik verwacht dat deze static is.

[ Voor 9% gewijzigd door DEiE op 26-11-2011 08:44 ]

Pagina: 1