Avatar billede madeindk Nybegynder
15. september 2006 - 21:07 Der er 5 kommentarer og
1 løsning

SQL injection - på dansk

Hej eksperter! Er der en der kan give mig en hurtig gennemgang af SQL injection problemet? Jeg kører pt. med Replace(request.form("feltnavn"), "'", "''") på alle mine steder hvor jeg smider ting i databasen eller opdaterer. Men skal man også smide SQL injection sikkerhed hvis man nu fx. gør følgende:

SQL = "SELECT * FROM brugere WHERE id=" & request("id")

Dette er bare et eksempel... Er der andre steder man skal være påpasselig?
Avatar billede erikjacobsen Ekspert
15. september 2006 - 21:48 #1
Ja, det er potentielt farligt. Du overtræder reglen om aldrig at stole på input fra brugeren. Inden du bruger request("id") på den måde skal du sikre dig at det repræsenterer et tal.

(I nyhederne lige nu: http://www.internetnews.com/dev-news/article.php/3631831 
    "You don't know that you have to filter user input," Lerdorf exclaimed.
)
Avatar billede arne_v Ekspert
15. september 2006 - 21:59 #2
den stoerste risiko er i forbindelse med login

et lille ekstrakt fra en af mine artikler

<quote>
2) single quotes med vilje (kendt som SQL injection)

Eksempel:

sql = "SELECT * FROM myusers WHERE un = '" + username + "' AND pw = '" + password + "'"

(efterfulgt af et test på om der blev fundet nogle records)

det virker fint for den pæne bruger som indtaster:
arne
hemmeligt

SELECT * FROM myusers WHERE un = 'arne' AND pw = 'hemmeligt'

men det returnerer forkert OK for den ondsinded cracker som indtaster:
arne
x' OR 'x' = 'x

SELECT * FROM myusers WHERE un = 'arne' AND pw = 'x' OR 'x' = 'x'
</quote>

men det kan ogsaa bruges til at give adgang til mere data end brugeren har
retmaessig adgang til - eller til at snige INSERT/UPDATE/DELETE statements ind

i dit eksempel saa overvej input:

177;DROP TABLE xxxx;

hvis du ikke validerer input og din database tillader 2 SQL saetninger i et kald, saa
mangler du en tabel !

en replace er ikke altid nok

bl.a. ikke i det sidste eksempel med DROP TABLE

jeg vil anbefale baade:
  input validering
og:
  brug af parameters til al SQL

parameters beskytter ret effektivt mod SQL injection

input validering beskytter baade mod SQL injection og XSS (cross site scripting)
Avatar billede madeindk Nybegynder
16. september 2006 - 15:11 #3
arne_v -> Jeg skal validere om det er tal brugeren sender afsted?
Avatar billede arne_v Ekspert
16. september 2006 - 15:50 #4
i det konkrete tilfælde ja
Avatar billede madeindk Nybegynder
17. september 2006 - 14:27 #5
Ok - smid et svar arne_v

Tak for hjælpen.
Avatar billede arne_v Ekspert
17. september 2006 - 15:32 #6
svar
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester