17. juli 2007 - 11:23Der er
18 kommentarer og 1 løsning
undgå sql injektioner
Har kigget rundt på nettet for at finde noget om beskyttelse mod injektioner i sql-strenge, men fandt ikke noget jeg kunne få noget ud af. Jeg kan dog forstå at jeg skal bruge addslashes, stripslashes, replace samt sql parameters.
Men hvad er sql parameters?
Jeg mangler nogle simple eksempler på brug af ovenstående fx. i et login-script.
kan det lade sig gøre at tjekke for flere i samme instr(). Det kunne vel tænkes at nogen kunne finde på at bruge html-kode eller ascii eller hex osv i steden for '.
"Det gør ingen ting hvis folk forsøger at bruge et alternativ til ' - det skal være det tegn før det fucker den op." Og hvad hvis jeg bruger ASCII værdien? :)
madeindk 17/07-2007 15:31:52 "Det er klart måden at gøre det på" <---- NEJ - Det er helt klart vigtigt at kunne håndtere alle tegn, brugeren taster ind, så de gemmes i databasen og vises igen. Det er kun rene amatører, der smider tegn væk, som de ikke ka' li. :)
Quote[hifi4all: det er en god guide du henviser til. Men stdag, hvad hvis der bruges tegnkoder?]
Jeg er ikke helt sikker på hvad du mener med tegnkoder, men som jeg omtaler i min lille hjemmebryggede artikel, så replacer/erstatter jeg "uønskede" tegn til noget andet, og du kunne i princippet så opfinde dine egen parameter for f.eks. tegnet '
Du er dit tegn ('), omsat til tekststrengen "jds8734js93j3", og kan uden videre , og sikkert, gemmes i din database.
Når du så igen vil udskrive data fra databasen, virker det jo ikke så fikst, at der står "jds8734js93j3", når det er tegnet (') vi gerne vil se igen, men så kan du lave tilsvarende ovenstående funktion. Altså en slags re-formateringsf unktion, alla sådan her:
'Re-formater mine erstattede specialtegn Private Function ReFormatSpecialTegn(ByVal strInputEntry)
Jeg tæmke bare, hvis nu man bruger 39 eller ' i steden for '. Vil serveren eller browseren ikke oversætte koderne til ' ?
erikjacobsen: hvorfor skulle det være amatøragtigt at smide tegn væk. Det kan jo være at en fx. en querystring skal indeholde et præcis værdi for at scriptet virker.
Man har da vel også lov at dikterer hvilke tegn brugeren må bruge fx. kun tal og alfabetet. Vel mest for brugerens egen skyld for bedre at kunne huske koden.
Hvis han hedder "O'Reilly" og ikke må skrive "'", så har du en sur kunde.
Der er ingen grund til alle de krumspring. Gem data i tabeller med een af disse: 1) prepared-statements/parameters - kært barn har mange navne 2) Lær hvilke tegn, der skal escapes og hvordan. Nemt og elegant.
Det er latterligt og amatøragtigt at smide tegn væk i SQL, eller at erstatte med "jds8734js93j3".
<% ' open adParamInput = 1 adInteger = 3 adDate = 7 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 ' lige ud af landevejen con.Execute "INSERT INTO params(id,tid) VALUES(1,'7-JUN-2005')" ' med kommando cmd.CommandText = "INSERT INTO params(id,tid) VALUES(2,'8-JUN-2005')" cmd.Execute ' med kommando og parametre cmd.CommandText = "INSERT INTO params(id,tid) VALUES(@id,@tid)" cmd.Parameters.Append(cmd.CreateParameter("@id", adInteger, adParamInput)) cmd.Parameters.Append(cmd.CreateParameter("@tid", adDate, adParamInput)) cmd.Parameters("@id") = 3 cmd.Parameters("@tid") = CDate("9-JUN-2005") cmd.Execute ' close Set cmd = Nothing Set con = Nothing %> OK
Hvad med at læse dokumentationen for ADODB på MSDN ? Tror den forklare det bedst :-)
Men du _SKAL_ kunne forstå engelsk dokumentation!
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.