webForumDet fria alternativet

Inloggning på en websida med användarnamn och lösenord...

Databaser & SQL

18 svar · 1 058 visningar · startad av mattiasnordin

Medlem sedan maj 20012 080 inlägg
Frågan#1

Hur bör en bra fråga för att kontrollera en användares användarnamn och lösenord mot en access 2003 databas se ut?

Det behöver inte vara idiotsäkert men jag vill kontrollera att jag inte gör några dummheter :h

Medlem sedan juni 200032 967 inlägg
#2
SELECT 1 FROM tblUsers WHERE UserName = 'foo' AND UserPassword = 'bar'

Glöm inte bort att fixa apostrofer i inmatade värden för att undvika problem.

Medlem sedan maj 20012 080 inlägg
#3

Hej Anders.

Vad menar du med:

Glöm inte bort att fixa apostrofer i inmatade värden för att undvika problem.

Medlem sedan mars 20025 907 inlägg
#4

Eftersom det var ett inloggningsscript så antar jag att besökarna själva ska fylla i användarnamn/lösenord i några textrutor. Skriver de en apostrof (') i ett av fälten kommer de få ett felmeddelande (de kan dessutom logga in i ditt system utan att ange riktiga uppgifter på detta sätt. Sök på sql injections så hittar du mer fakta), du måste därför se till att alla apostrofer escapas (~oskadligörs) innan de sätts in i sql-satsen.

Om besökaren fyller i fälten med användarnamnet "admin" och lösenordet "' or '1' = '1" så blir sql-satsen som följer

SELECT 1 FROM tblUsers WHERE UserName = 'admin' AND UserPassword = '' or '1' = '1'

Vad tror du händer då?

Medlem sedan nov. 2003569 inlägg
#5

Vad tror du händer då?

Korrekt, Man ska ALLTID och UTAN undantag använda Parametriserade frågor.

SELECT * FROM username WHERE namn=@namn AND userpassword=@password

Medlem sedan mars 20025 907 inlägg
#6

Nöff skrev:

Korrekt, Man ska ALLTID och UTAN undantag använda Parametriserade frågor.

Que?
Har aldrig använt det och det fungerar bra ändå.

Medlem sedan maj 20012 080 inlägg
#7

Que ?

Korrekt, Man ska ALLTID och UTAN undantag använda Parametriserade frågor.

SELECT * FROM username WHERE namn=@namn AND userpassword=@password

Medlem sedan nov. 2003569 inlägg
#8

Va!?. Använder ni inte parametriserade frågor när ni söker upp inloggningsuppgifter??. Mama mia, era webprojekt skulle inte jag vilja vara ansvarig för. Jag förutsatte att ni alla använde det.

http://msdn.microsoft.com/msdnmag/issues/04/09/SQLInjection/default.aspx

Medlem sedan mars 20025 907 inlägg
#9

På vilket sätt skulle det vara (mer) osäkert att köra med "normala" sql-satser om man ser till att all indata escapas först?

Medlem sedan juni 200032 967 inlägg
#10

Nöff skrev:

Jag förutsatte att ni alla använde det.

Jag har arbetat med webbutveckling mot databaser i sju år, och aldrig har jag använt parametriserade frågor. Betyder det att alla applikationer jag utvecklat är osäkra? Icke.

Nöff;

Ur säkerhetsaspekten, vad tillför parametriserade frågor jämfört med en egen funktion som säkrar upp för SQL-injections?

Det är en självklarhet att validera inmatningar och säkra upp sina SQL-frågor, men man måste inte använda parametriserade frågor.

Och det är lugnt, jag vill inte ha dig som ansvarig för mina webbprojekt heller. ;)

Mvh

Medlem sedan maj 20012 080 inlägg
#11

Jag är med i matchen på Peeers inlägg. @-varianten förstår jag inte alls.

Kan man få ett litet kodexempel ?

Medlem sedan juni 200032 967 inlägg
#12

Det skulle vara intressant med någon sorts Nöff-svar i den här tråden. :/

Medlem sedan maj 20012 080 inlägg
#13

Håller med @nders...

Det är därför jag inte har stängt tråden ännu :)

? ¿

Medlem sedan dec. 20051 056 inlägg
#14

Hej igen,

Vad är det för funktion ni kör för att hindra apostrofinmatade frågor?

Räcker det med:

funChkString = Replace(string, "'", "")
Medlem sedan juni 200032 967 inlägg
#15

räcker och räcker. Det är dåligt att göra som du skriver, eftersom du förstör innehållet i strängen.

Apostrofer skall escape:as, inte tas bort. Alltså; ersätt en apostrof med två.

Medlem sedan okt. 20041 556 inlägg
#16

Det beror också på MSDB, mySql så måste du även escapa \
I mssql kanske kommentarer osv. Du får kolla upp det för varje databas du skall använda.

Medlem sedan dec. 20051 056 inlägg
#17

Ok, tack för infot!

Vad bra det hade varit om jag fått slå ihop användaren "mattiasnordin" med "Mattias Nordin" så att jag även kan stänga mina gamla trådar som lösta.

@nders, du får gärna sätta ditt svar som "slutgiltigt svar".

Mvh
Mattias

Medlem sedan juni 200032 967 inlägg
#18

mattias skrev:

Vad bra det hade varit om jag fått slå ihop användaren "mattiasnordin" med "Mattias Nordin"

Vad bra det hade varit om folk hade kunnat välja ett användarnamn och sedan hålla fast vid det. ;)

@nders, du får gärna sätta ditt svar som "slutgiltigt svar".

Då gör jag så! :bire

För jag antar att inte Nöff behagar behaga oss. Det hade jag iofs inte väntat mig heller...

Medlem sedan dec. 20051 056 inlägg
#19

PS Förra versionen av detta forum tillät inte mellanslag i användarnamnet och jag vill ha samma användarnamn i alla mina forum. Det är anledningen till mitt byte. DS

Cheers! :)

282 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
156 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)