Inkompetenta utvecklare som antagligen passar bättre i Konsums kassa än framför en dator är orsaken till detta.
Jag brukar själv roa mig med att langa in en singelquote i inloggningsformulär, särskilt om sajten kör ASP. Förvånansvärt många gånger så renderar det ett felmeddelande med delar av SQL-satsen och sedan är det ju bara att använda denna information för att ta sig in..
Exempel: user: Arne Anka password: ' or password<>'
ger t.ex SQL-strängen SELECT username FROM users WHERE username='Arne Anka' AND password='' or password<>'' och saken är biff...
Kör man Java använder man med fördel PreparedStatement för att slippa dessa typer av superlama säkerhetshål.
Rent praktiskt hur gör man lättast för att ta bort detta i asp och java, exempel-kod vore trevligt.
I Java använder man PreparedStatement och "förebereder" SQL-frågan innan den exekveras, PreparedStatement ser till att filtrera bort singelquotes från strängdatat, det finns även många andra fördelar med att använda PreparedStatements.
Connection conn = ....
PreparedStatement pStmt = conn.prepareStatement("[blue]SELECT * FROM users WHERE user=? AND password=?[/blue]");
pStmt.setString(1, request.getParameter("username"));
pStmt.setString(2, request.getParameter("password"));
ResultSet rs = pStmt.executeQuery();
Nu forstar jag inte? Varfor skulle man behova anvanda replace i alla falt som laggs in i databasen, eller i username-faltet?
aleborg (formodligen dum fraga), om man ska skriva "Replace(Request.Form("Password"), "'", "''") ", maste man inte da skriva en varningstext "du kan av sakerhetsskal inte anvanda ordet password i ditt password"?
aleborg (formodligen dum fraga), om man ska skriva "Replace(Request.Form("Password"), "'", "''") ", maste man inte da skriva en varningstext "du kan av sakerhetsskal inte anvanda ordet password i ditt password"?
Det kodsnutten gör är att ersätta alla förekomster av ' i den inskickade form-variabeln "password" med ''. Den ersätter alltså inte förekomster av ordet password..
ahaaaa. Sa det ar bara ' som man ska ta bort i alla falt som laggs in i databasen? Gors det i denna databasen ocksa? Hur gors det? Ersatter man ' med " eller med ' '? (Ny dum fraga) Sedan maste man val ocksa ha en replace nar man hamtar datan fran databasen?
Två enkelfnuttar i en SQL-sträng byts av SQL-kompilatorn ut mot en enkelfnutt i stället för att markera slutet på en sträng. En syntaktisk feature som finns i de flesta SQL-dialekter (i vissa säger man \' i stället). När man sedan hämtar strängen finns där bara en enkelfnutt. Testa LarsG:s exempel så torde allting framstå i högönsklig klarhet.