ze5400 Skrevet 8. mars 2006 Del Skrevet 8. mars 2006 Hva kan man gjøre for å beskytte seg mot SQL injection? Jeg klarte nettop å injisere SQL i en app jeg holder på med (http://haxxa.dyndns.org/beta2) Det skremmer meg litt, da enhver som klarer å gjette tablenama mine kan gjøre det samme Jeg bruker ASP.NET 2 - Vb.net SQL Connector = MySQL Lenke til kommentar
oyvind_b Skrevet 9. mars 2006 Del Skrevet 9. mars 2006 (endret) Den letteste måten å bruke SQL-injection på er jo dersom koden din setter sammen SQL-strengen dynamisk, altså noe slikt: string sql = "SELECT id, name FROM users WHERE username = '" + txtUser.Text + "' AND password = '" + txtPassword.Text + "'"; Dette er jo skikkelig fy-fy. Du løser dette best ved å bruke lagrede prosedyrer med parametre. Det er også mulig å bruke dynamisk SQL med parametre. Det finnes masse artikler om dette. F.eks. denne på MSDN. Øyvind. Endret 9. mars 2006 av oyvind_b Lenke til kommentar
ze5400 Skrevet 9. mars 2006 Forfatter Del Skrevet 9. mars 2006 Gjorde det på fy-fy måtan ja Får lese artiklen du anbefalte når jeg kommer hjem. Lenke til kommentar
tommy18 Skrevet 9. mars 2006 Del Skrevet 9. mars 2006 HVa om jeg ikke skriver sql setningene selv, men lar VS gjøre det? ved at jeg f.eks drar en sql database til Design-vinduet, da settes jo det meste opp selv. Er dette Stored Procedure, eller er dette også fy-fy? Noe annet jeg lurer på er om sql injection er fare om jeg bare skal hente ut data, eller om det bare er fare når sql-setningen skal legge data inn i databasen. Lenke til kommentar
ze5400 Skrevet 9. mars 2006 Forfatter Del Skrevet 9. mars 2006 (endret) Hva mener du men hente ut av databasen? I et søkefelt f.eks kan man injisere sql, man kan gjøre det over alt. SQL Injisering er jo å bygge enge SQL setninger i tilleg til den programmet ditt utfører. F.eks. På min webside (oppgitt i første post) kan man sette dette inn i søk, det vil lage en ny brukerkonto med lol som passord :( lol'; INSERT INTO acronym.users (Uname, Passwd) VALUES ('Hacked', '9cdfb439c7876e703e307864c9167a15'); 'x'='x Endret 9. mars 2006 av ze5400 Lenke til kommentar
kaffenils Skrevet 9. mars 2006 Del Skrevet 9. mars 2006 HVa om jeg ikke skriver sql setningene selv, men lar VS gjøre det? ved at jeg f.eks drar en sql database til Design-vinduet, da settes jo det meste opp selv. Er dette Stored Procedure, eller er dette også fy-fy? Noe annet jeg lurer på er om sql injection er fare om jeg bare skal hente ut data, eller om det bare er fare når sql-setningen skal legge data inn i databasen. 5725645[/snapback] SQL-injections er en fare uansett hvilke SQL kommandoer du kjører (det være seg DDL's, DML eller DCL) hvis du ikke bruker parametre. Les artikkelen det henvises til så vil du skjønne mer. Jeg har alrdi latt VS ta kontroll over mine SQL statements. Jeg har sett hva slags galskap SQLCommandBuilder er i stand til å lage, så jeg anbefaler deg å skrive dine egne kommandoer. Lenke til kommentar
bergetun Skrevet 10. mars 2006 Del Skrevet 10. mars 2006 Bruk for all del sqlCommand.parameters så slipper dere å tenke mer på det. Lenke til kommentar
ze5400 Skrevet 11. mars 2006 Forfatter Del Skrevet 11. mars 2006 Kan du utdype? Gi noen linker e.l? Lenke til kommentar
kaffenils Skrevet 11. mars 2006 Del Skrevet 11. mars 2006 Kan du utdype? Gi noen linker e.l? 5735775[/snapback] Er det meg du spør? Hva vil du jeg skal utdype? Lenke til kommentar
ze5400 Skrevet 11. mars 2006 Forfatter Del Skrevet 11. mars 2006 (endret) Hehe, neida lars, jeg spør bergetun EDIT: Gløym det, lesta artiklen nå... EDIT2: Det så litt vansklig ut; kan jeg ikke bare sjekke etter "onde" ord får sql'en eksekuteres; og eventuelt blokke spørringen hvis den inneholder f.eks "INSERT", "DROP", "UPDATE", "DELETE"? Endret 11. mars 2006 av ze5400 Lenke til kommentar
Gråskjegg Skrevet 12. mars 2006 Del Skrevet 12. mars 2006 Hehe, neida lars, jeg spør bergetun EDIT: Gløym det, lesta artiklen nå... EDIT2: Det så litt vansklig ut; kan jeg ikke bare sjekke etter "onde" ord får sql'en eksekuteres; og eventuelt blokke spørringen hvis den inneholder f.eks "INSERT", "DROP", "UPDATE", "DELETE"? 5738972[/snapback] Det beste er absolutt å bruke lagra prosedyrer. Gjør det. Et alternativ er, ihvertfall i teorien, å lete etter fnutter og SQL-kommentarer. (' og --) Det er mye vanskeligere å gjøre et vellykket angrep uten disse. Ikke let etter INSERT, UPDATE eller tilsvarende; det er altfor mange ord som kan skape problemer. ('; DROP TABLE users) (hvorfor kommentar? Vel, SELECT * FROM users WHERE name='name' AND pwd='mama' AND type='admin' kan være en sql for å sjekke om påloggende bruker er admin. Gjett brukernavn, og du trenger ikke passord. (admin'--)) - grå - Lenke til kommentar
kaffenils Skrevet 12. mars 2006 Del Skrevet 12. mars 2006 Hehe, neida lars, jeg spør bergetun EDIT: Gløym det, lesta artiklen nå... EDIT2: Det så litt vansklig ut; kan jeg ikke bare sjekke etter "onde" ord får sql'en eksekuteres; og eventuelt blokke spørringen hvis den inneholder f.eks "INSERT", "DROP", "UPDATE", "DELETE"? 5738972[/snapback] Det beste er absolutt å bruke lagra prosedyrer. Gjør det. Et alternativ er, ihvertfall i teorien, å lete etter fnutter og SQL-kommentarer. (' og --) Det er mye vanskeligere å gjøre et vellykket angrep uten disse. Ikke let etter INSERT, UPDATE eller tilsvarende; det er altfor mange ord som kan skape problemer. ('; DROP TABLE users) (hvorfor kommentar? Vel, SELECT * FROM users WHERE name='name' AND pwd='mama' AND type='admin' kan være en sql for å sjekke om påloggende bruker er admin. Gjett brukernavn, og du trenger ikke passord. (admin'--)) - grå - 5739956[/snapback] Stored procedures er å anbefale for de fleste standardoppgaver i en database, men det er ikke noen sikring mot SQL-injisering så lenge klientkoden ikke benytter parametre. Hvis en bruker parametre så slipper en å sjekket input-strengen. Dessuten er det en komplisert oppgave å sjekke etter SQL-injiseringen selv. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå