Hej. Jeg ved hvordan man laver et sql-kald der er åben for injections og jeg kan læse mig til, at der ikke findes én metode, der lukker ned for det hele på én gang. Der er mange måder at manipulere med sql-kaldet på og her skal man lukke hver enkel metode.
Af den grund vil jeg høre, om funktionen isNumeric ikke er en logisk måde at lukke ned for det på? Se eksempel:
id = request.querystring("id") if not isNumeric(id) then response.redirect("tilbage til forsiden fordi id ikke er rent tal") end if sql = "select * from tabel where id = " & id & ""
Er det ikke logik, at man IKKE kan komme fordi den stump kode, der tjekker om (id) er tal? Eller er der noget der kan knække den mur?
Det har jeg læst meget om, og det fik jeg også at vide i mit seneste spørgsmål. Men jeg har valgt at lave et nyt spørgsmål der relaterer til det med injections.
Jeg kan ikke finde en simpel og klar forklaring på hvad parameters præcist er. Jeg troede jeg vidste det, men åbenbart ikke. :)
adParamInput = 1 adVarChar = 200 Set con = Server.CreateObject("ADODB.Connection") con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Databases\MSAccess\Test.mdb;;" Set cmd = Server.CreateObject("ADODB.Command") cmd.ActiveConnection = con cmd.CommandText = "SELECT COUNT(*) AS n FROM myusers WHERE un = @un AND pw = @pw" cmd.Parameters.Append(cmd.CreateParameter("@un", adVarChar, adParamInput, 32)) cmd.Parameters.Append(cmd.CreateParameter("@pw", adVarChar, adParamInput, 32)) cmd.Parameters("@un") = "arne" cmd.Parameters("@pw") = "duerikke" Set rs = cmd.Execute Response.Write rs("n") Set rs = Nothing Set cmd = Nothing Set con = Nothing
Ok. Tak for det. Men hvis jeg udelukkende arbejder med ID (for at få vist indhold) kan du på 'stående fod' så fortælle om man kan bryde igennem det eksempel jeg kom med i spørgsmålet? Omkring brugen af isNumeric?
Hvis querystring("id") ikke er et rent tal, så bliver man sendt tilbage. Det burde da kunne stå i mod ?
Jeg tænker på at sikre et nyhedssystem, hvor man kan klikke på en overskrift og derefter åbner den filen "vis.asp?id=5"... F.eks.
Så må brugeren gerne ændre id til 6-7-8 eller 9 hvis han vil. Men det skal bare ikke være muligt at slette alt i tabellen ved at manipulere med sql-kaldet.
Er det i øvrigt ikke ASP.NET du har skrevet for oven?
isNumeric som du har sat det op beskytter fint - det er bare uhyre sjældent man kan nøjes med at arbejde med tal som input til databasen og derfor er det efter min mening både sikrest og lettest at gøre det rigtigt, altså parameters, i alle situationer i stedet for at blande.
Jeg kan ikke lide at bruge 100% om særlig meget i denne verden, slet ikke når det handler om IT - men vil betragte det rimelig sikkert. Men ingen database uden at data også er komme ind og formentlig også kan redigeres samt slettes og her er isNumeric næppe nok og det er det jeg mener med at man lige så godt kan gøre det rigtigt fra starten og overalt i applikationen. Specielt når der formentlig bliver brugt mere tid på at diskutere om emnet fremfor at lære at gøre det rigtigt en gang for alle.
jo, isnumeric brugt korrekt beskytter mod sql-injection i dit specifikke tilfælde. nej, isnumeric er ikke den rigtige løsning, det er derimod paramters og det er ikke bare en mulig løsning, det er den helt rigtige løsning.
isnummeric var helt som ventet god. intet kan bryde forbi den og jeg sparer bøvlet med parameters. i mit tilfælde den rigtige løsning..
dog ikke når det kommer til muligheden for at bruge tal og tegn.
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.
Det er blevet kaldt ”det største it-nedbrud i historien” og omkostningerne kan nemt løbe op i syv milliarder kroner: Men hvem skal betale for Crowdstrikes fejl?