Avatar billede hrc Mester
06. april 2016 - 11:43 Der er 4 kommentarer

Forhindre SQL Batch injection i et SQL-vindue

Findes der en måde jeg kan splitte et batch-job op i de kommandoer der må være?

Nedenstående scripts bliver udført som batch, men den sidste ønsker jeg at filtrere fra.

select count(*) from sales insert into salery (created, user, salery) values (..)

På klientsiden kan jeg derfor godt bruge en parser som kan klare alle (dvs. må være SQL-serverens egen parser der skal bruges) kombinationer. I dette simple tilfælde skal jeg have separeret scriptet til dette:

select count(*) from sales

og

insert into salery (created, user, salery) values (..)
Avatar billede arne_v Ekspert
07. april 2016 - 01:27 #1
Jeg kan kun se en metode: definer en grammatik for SQL og lav ene parser som returnerer de enkelte saetninger.

Og det bliver hurtigt lidt omfattende.

Hvis du fortaeller hvilket programmerings sprog saa kan jeg maaske vejlede lidt om det.
Avatar billede hrc Mester
02. maj 2016 - 13:59 #2
Hej Arne.

Sproget er Delphi og jeg nåede selv frem til samme konklusion, at en parser var at overdrive. Det jeg håbede var, at SQL-serveren kunne det for mig. Umiddelbart synes jeg sådan en funktion ville være smart. Syntaksændringer og tilføjelser ville blive understøttet ved kilden. Det er der umiddelbart ikke.

Spørgsmålet tog udgangspunkt i en SQL-dialog i et program, hvor (super)brugeren kunne teste prægenerede scripts af. Der blev tjekket, at det første kommando var select, men bagefter kunne man placere "drop tables" og hvad ved jeg. Selvom man bare "åbnede" scriptet blev de efterfølgende kommandoer udført. En sikkerhedsbrist der heldigvis kun var åben for administratorer.

Jeg har løst det ved at skrivebeskytte scriptet og have en parameterliste som brugeren kan rette. Det er vist også den rette måde.

Selvom du manglede informationer til et reelt svar, vil jeg gerne give dig points for dine mange bidrag til fora.
Avatar billede arne_v Ekspert
02. maj 2016 - 16:52 #3
Hvis det kun er meningen at det skal bruges til SELECT, saa var det nemmeste vel at connecte til databasen med en konto som kun havde SELECT priv).
Avatar billede hrc Mester
03. maj 2016 - 13:04 #4
Ja, det er kun selects, så ideen er god - og også den rigtige. Jeg overvejede det kort, men programmet bruger normalt kun denne ene konto (som tillader SQL-kommandoer, for at kunne vedligeholde basen via opdateringer; tror ikke den må oprette ny ad-hoc konti).  Det vil være et problem at skulle forbi ca. 100 kunders it-afdelinger og overtale dem til at lave os endnu en konto - ikke at de ville stille sig i vejen, det vil bare tage lang tid.
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

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