16. november 2002 - 15:35Der er
13 kommentarer og 1 løsning
Loginscript. Hvor sikkert er det?
Hvor sikkert er dette login? Er der nogen der har metoder til at hacke det? Er der nogen der har forslag til forbedringer? Og andre kommentarere til det er i øvrigt også velkommen.
<% Function ValidateString( strSearch ) Dim objRegExp set objRegExp = new RegExp
ValidateString = objRegExp.Test( strSearch ) End Function
if ValidateString( Request("user") ) then Dim login, pw, strSQL, objPassRS login = replace(Request("user"),"'","") pw = replace(Request("password"),"'","")
strSQL = "SELECT MEMB.ID, ADR.POSTNR FROM member MEMB, addresses ADR " &_ "WHERE ( pw = '"&pw&"' AND login = '"&login&"' ) AND MEMB.ID = ADR.ID " &_ "GROUP BY ADR.POSTNR, MEMB.ID" set objPassRS = Conn.Execute(strSQL)
if not objPassRS.EOF then session("POSTNR") = objPassRS("POSTNR") conn.Close response.write "search/default.asp" 'response.redirect("search/default.asp") else conn.close response.write "1. default.asp?error=true" 'response.redirect "default.asp?error=true" end if else conn.close response.write "2. default.asp?error=true" 'response.redirect "default.asp?error=true" end if
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Det kommer bl.a an på om den server det køre på er patchet op med de nødvendige sikkerheds patches, ellers kan man bl.a få fat i selve scriptet og dermed alle passwordene
På denne måde sikrer du, at ingen ondsindede brugere benytter sig af det velkendte sikkerheds-hul med at kunne logge ind som første bruger i databasen..
Halløjsa igen.. Efter at ha' gransket situationen en smule er jeg kommet frem til noget, som faktisk er væsentlig nemmere, og efter min overbevisning stadig lige så sikker, og som ikke involverer VB-dll'er:
<!------ Start ------> <% if Request.ServerVariables("REQUEST_METHOD") = "POST" then if Session("allowed") = "true" then Response.Write "Hent dine data i databasen her med en Stored procedure" 'strSQL = "sp_VerifyUser" & Request.Form("username") & "," & Request.Form("password") else Response.Write "Posting er ikke tilladt." End If 'Session sættes til falsk session("allowed") = "false" Response.Redirect("myReturnpage.asp") End If
'Denne bliver sat, hvis brugeren rent fysisk har besøgt dit site, og udfyldt felterne. session("allowed") = "true" %>
Du skal, som før, lige fjerne apostrofferne i username og password. Denne funktion holder styr på, om en bruger poster direkte fra dit site, eller om han sidder på et helt andet site, og laver skumle planer!
Session("allowed") bliver sat i det øjeblik en bruger besøger din formular, men ikke hvis der kun bliver postet. Eftersom sessions er unikke på en server, kan en anden bruger ikke selv oprette en session på sin egen server, og poste den med over. Ergo er denne funktion på det område 100% sikker.
Fordelen med en Stored procedure er, at den også er rimelig sikker. Du kan f.eks sætte dine varchar(100) til kun at måtte tillade max 10 tegn, f.eks.
@username varchar(10) @password varchar(10)
Desuden er det naturligvis mere effektivt at bruge SP istedet for ASP-kode, og det skal man jo naturligvis også ha' i mente.
Man kan sige, at stored procedure er SQL-servers udgave af VB's DLL'er. Nogle vil muligvis slå mig i hovedet for den udtalelse, men det er nu det, jeg synes er bedst beskrivende.
En Stored Procedure(SP) er en række instruktioner, som fortæller SQL-server hvordan den skal reagere i forskellige situationer. Oftest bliver en SP brugt, når den samme proces skal køres igen og igen og igen.
En SP består af 2 hoved-punkter:
1. Definineringer 2. Udførelse
Forestil dig, at du har et VB-program, som skal vælge data fra en tabel i databasen, som i dagens anledning hedder "Costumers".
Du kunne nu i din VB-kode skrive:
SQL = "Select * from Costumers where Costumer_firstname = 'Thomas'" rs.Open SQL, myConn
Dette er på sin vis fint nok, men problemet er at det er svært at genbruge, hvis du har 200 klasser, som allesammen skal hente fra Costumer-tabellen.
Løsningen er at lave en Stored Procedure:
CREATE PROCEDURE dbo.sp_costumers ( /*Her definerer vi variablen @costumer_name*/ @costumer_name varchar(100) ) AS
Select * from Costumers where Costumer_firstname = @costumer_name return GO
Nu er denne SP færdig. Du kan nu benytte den fra din VB-kode ved at skrive:
SQL = "sp_costumers 'Thomas'" rs.Open SQL, myConn
MsgBox("Navnet er " & rs("Costumer_firstname"))
Hvis du senere skal ændre i indholdet af din database eller lave andre ændringer, så skal det kun gøres ét eneste sted, nemlig i databasen, og ikke i koden! Derfor er Stored Procedures en fantastisk god løsning.
Du kan desuden bruge Stored Procedures til en masse andre ting. F.eks at slette felter fra tabeller, checke om dit database-input har det rigtige format og meget, meget mere.. Stored Procedures er et studium i sig selv, så hvis du har fået blod på tanden, så vil jeg anbefale dig at købe en bog om emnet.
Hej Thomas. Tusind tak for den uddybende forklaring... Det er meget fornemt.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.