Gå til innhold

Problem med desimaler i MS SQL 2005 [LØST]


Anbefalte innlegg

Jeg sliter med et problem når det gjelder amerikansk / europeisk format på desimaltall. Jeg får f.eks. et tall fra en variabel som kan være 2,50 eller et annet tall med desimaler adskilt med komma. Jeg har en INSERT INTO setning i VBA-koden min som skal putte dette og en del andre variabler inn i hver sine felter i en tabell. Når koden kommer til dette feltet, så oppfatter MS SQL dette som 2 felter pga. kommaet. Jeg tror jeg har prøvd alt mulig for å få variablen til å inneholde punktum i stedet for komma, men får det ikke til. Jeg har også satt inn "'" foran og etter variablen, men da oppfatter MS SQL dette som en varchar, og kan ikke konvertere til Decimal eller Numeric.

Noen som har noen tips her?

 

Takk.

Endret av Aqualong
Lenke til kommentar
Videoannonse
Annonse
Jeg sliter med et problem når det gjelder amerikansk / europeisk format på desimaltall. Jeg får f.eks. et tall fra en variabel som kan være 2,50 eller et annet tall med desimaler adskilt med komma. Jeg har en INSERT INTO setning i VBA-koden min som skal putte dette og en del andre variabler inn i hver sine felter i en tabell. Når koden kommer til dette feltet, så oppfatter MS SQL dette som 2 felter pga. kommaet. Jeg tror jeg har prøvd alt mulig for å få variablen til å inneholde punktum i stedet for komma, men får det ikke til. Jeg har også satt inn "'" foran og etter variablen, men da oppfatter MS SQL dette som en varchar, og kan ikke konvertere til Decimal eller Numeric.

Noen som har noen tips her?

 

Takk.

 

Det er fordi du ikke bruker paramereriserte spørringer. Da slipper du slike problemer, i tillegg til at du sikere deg mot SQL-injections. ALDRI bygg opp SQL statements på den måten du gjør. Bruk ALLTID parametre. Ikke ta snarveien som manfred foreslår. Bygg istedet om alle spørringene dine til å benytte seg av parametre.

Lenke til kommentar

Det er mulig å bruke tid å krefter på å lage en validering, selv om det allerede er metoder som gjør dette for deg ja. Men best practice er og forblir (som kaffenils korrekt sier) å ALLTID brukere parametriserte kall. Dynamisk SQL er en voksen kilde til potensielle feil og/eller sikkerhetshull. Hvis du betviler dette så kan jeg som MCT anbefale deg å ta en liten titt i Designing Security for SQL Server 2005, og da i særdeleshet modul 6.

Lenke til kommentar
Jeg har ikke sagt jeg betviler det, men jeg mener også at i mange tilfeller vil det være overkill.

 

Et par (en i .Net) kodelinjer ekstra pr. parameter er overkill? Har folk så slapp holdning til dette? Jeg er DYPT sjokkert!

 

Edit: Har du tatt noen slike snarveier på websidene dine?

Endret av kaffenils
Lenke til kommentar
Jeg har ikke sagt jeg betviler det, men jeg mener også at i mange tilfeller vil det være overkill.

 

Måtte bare teste medlemsweb.no. Du bruker IKKE parametrer og har istedet laget din egen validator som bl.a. fjerner ' fra input (Ja jeg prøvde). Da har du i alle fall fjernet den enkleste SQL-Injection metoden for SQL Server. Litt stilig at du viser INSERT statementet på siste siden :thumbup:

 

INSERT INTO Customers(name, address1, address2, zip, city, email, mobile, phone, fax, OrgNo, password, medlemsweb) VALUES('--', '--', '--', '4444', 'gfhfg', '[email protected]', 99999999, --', --', '', '88888888--'', 1); SELECT CAST(scope_identity() AS int)

 

Får håpe du ikke anmelder meg nå for forsøk på innbrudd :!: :!:

Endret av kaffenils
Lenke til kommentar

Der testet du en side som fortsatt bare er under utprøving... :p Den spytter ut sql'en på grunn av debug... Jeg jobber med andre prosjekter om dagen, så jeg har ikke hatt tid til å se noe mer på den. Men jeg kan vel fjerne sql'en fra siste siden uansett :p (btw, så holder det ikke å inserte i den tabellen der. Du får ikke opprettet noen brukerkonto i "Customers" :p

Lenke til kommentar
Der testet du en side som fortsatt bare er under utprøving... :p Den spytter ut sql'en på grunn av debug... Jeg jobber med andre prosjekter om dagen, så jeg har ikke hatt tid til å se noe mer på den. Men jeg kan vel fjerne sql'en fra siste siden uansett :p (btw, så holder det ikke å inserte i den tabellen der. Du får ikke opprettet noen brukerkonto i "Customers" :p

 

Jeg var ikke interessert i å opprette noen konto, kun å se om websiden din hånderte den vanligste "inngangsportalen" for SQL-injections, nemlig via tekstinput ved å terminere en streng med ' (enkelfnutt) , deretter legge til egen SQL og til slutt å kommentere ut resten av din SQL med --

Lenke til kommentar

Vel, jeg synes det å fjerne alle fnutter er en uting. Det er få tilfeller at det er noe problem, men når det ikke er behov for dette når ting gjøres riktig så blir det bare for dumt. Et par eksempler:

  • Peter O'Tool prøver å registrereseg som bruker
  • En person prøver å skrive inn gateadressen "Tarjei Vesaas' vei 5"

Det finnes andre eksempler også. Klart, de intreffer ikke ofte, men du endrer på korrekte data for å unngå noe du i utganspunktet burde ha løst på en annen måte.

Lenke til kommentar

Oh, obscurity. Hvor lekkert. Helt til den dagen to løsnigner skal samkjøres, eller du skal teste data opp mot hverandre. For all del, funker sikkert greit i enkle webløsninger, og plutselig en dag ender du opp med å lage noe seriøst, og får trøbbel fordi du har køddet til dataene. Og det er ikke spesielt kuult, tro meg :)

Lenke til kommentar

Jeg jobber mye med større prosjekter, men jeg har bare blitt vant til, fra starten av, å validere all inputen min selv :p

 

Kall det gjerne en uvane, og muligens noe jeg bør rette opp, men jeg har til dags dato ikke hatt noen problemer. (Annet enn når j0rn79 koste seg med sql injection på en ikke helt ferdig webside :p)

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...