Avatar billede larsliin Nybegynder
29. november 2004 - 15:53 Der er 15 kommentarer og
1 løsning

SQL i Url'en

Hi Eksperter

Jeg har lavet en e-Shop, hvor jeg benytter mig af parametre fra Url'en direkte i mine SQL forespørelser.
Hvordan hindrer jeg muligheden for, at brugeren selv kan skrive en Query direkte i url'en, og dermed for adgang til min database. I værste fald er det jo muligt at slette hele min database.
Avatar billede michael_stim Ekspert
29. november 2004 - 15:56 #1
Kan du ikke lägge parametrene i en session eller sende dem med POST?
Avatar billede ellebaek Nybegynder
29. november 2004 - 15:57 #2
du lader være med at tage dine sql'er med i queryen :-)

Men helt ærligt så er det ikke den mest sikre måde at køre en hjemmeside..

Men skal lige vide..
Kører du fx:

default.asp?sql=select from tabel where

eller blot:
default.asp?sql=order by id

altså er det hele sql'en eller blot nogle forskellige conditions?
Avatar billede michael_stim Ekspert
29. november 2004 - 16:00 #3
Avatar billede michael_stim Ekspert
29. november 2004 - 16:01 #4
Avatar billede larsliin Nybegynder
29. november 2004 - 16:08 #5
Er først lige blevet klar over denne problemstilling, hvilket er lidt ærgeligt, eftersom jeg faktisk er færdig med shoppen. Jeg vil jo derfor helst undgå de store operationer.

Min string ser således ud:
default.asp?sql=select from tabel where
Avatar billede michael_stim Ekspert
29. november 2004 - 16:11 #6
Som ellebaek siger, så er det ikke smart at bruge querystring til sådanne funktioner. Så jeg ville anbefale dig at bruge sessions eller POST.
Avatar billede larsliin Nybegynder
29. november 2004 - 16:15 #7
Ok! Lidt ærgeligt finde ud af det så sent, men man lærer jo hele tiden noget nyt. Jeg kigger på det.
Avatar billede ellebaek Nybegynder
29. november 2004 - 16:36 #8
:-)

du kan jo eventuelt lave en test på din sql, og så blot chekke for om det er tilladt det brugeren gør..

Fx.

<%
sqlarr = split(lcase(request.querystring("sql"))," ")
if sqlarr(0) <> "select" then
response.write "fy...  du må kun bruge select"
elseif sqlarr(2) <> "din tabel" then
response.write "fy... du må kun bruge min tabel"
else
response.write "Du er en guttermand og din sql er i orden.."
end if
%>
Avatar billede larsliin Nybegynder
30. november 2004 - 13:39 #9
Tror jeg vil benytte denne løsning i dette tilfælde, da det umiddelbart virker som det mest overskuelige, men vil fremover undlade bruge Url'en, som I foreslår.
Avatar billede ellebaek Nybegynder
02. december 2004 - 22:59 #10
okay...

Jeg smider et sbar her så...!
Avatar billede michael_stim Ekspert
02. december 2004 - 23:19 #11
OK, smider også et sbar ;o)
Avatar billede larsliin Nybegynder
03. december 2004 - 00:57 #12
Tak for hjælpen, drenge!
Avatar billede ranglen Nybegynder
03. december 2004 - 01:01 #13
michael, hvordan vil du forhindre det ved at sende vha post? Den kan da forfalskes lige så nemt som get
Avatar billede michael_stim Ekspert
03. december 2004 - 07:40 #14
ranglen>>Det kan ikke forhindres hverken med POST eller SESSIONS, men det gör det svärere. Spörgsmålet gik ikke ud på om det kunne forhindres, men hvordan man fjernede teksten fra adressefeltet.
Du må forresten lige fortälle mig hvor jeg har skrevet at det kan forhindres?
Avatar billede ranglen Nybegynder
03. december 2004 - 12:15 #15
okay, det skriver du så heller ikke dirkte. Men spm lød

"Hvordan hindrer jeg muligheden for, at brugeren selv kan skrive en Query direkte i url'en"

og så lød det bare i mine ører, at post kunne forhindre det. Og om post gør det sværere, kan så diskuteres.

Men hele pointen er vel, at man aldrig generer sine sql'er på klientsiden.
Avatar billede ellebaek Nybegynder
03. december 2004 - 12:30 #16
ja, man bør ikke generere queryer client side, da det er et sikkerhedsbrist...

Men man kan som jeg beskrev så lave nogle forskellige metoder til at sikre at der ikke bliver benyttet queries der kan manipulere i databasen..

Man kan så hvis man gerne vil lave det i queien kryptere strengen før den bliver sendt afsted som en querystring og så dekryptere når man kommer hen på næste side...

Der er faktisk mange måder det kan gøres på, man kan blot også sende en kode afsted der indikere hvilken sql man skal benytte på den næste side...
og så have alle sql'er i en fil, som så egentlig blot inkluderes på en side..

Men det sikreste er selvfølgelig at holde det hele serverside, selvom det kan være meget omstændigt efter hvad man arbejder med...!
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