Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Strull med databas och sql fråga.

Postades av 2004-05-19 11:40:11 - Kristoffer Ljungqvist, i forum asp - allmänt, Tråden har 17 Kommentarer och lästs av 606 personer

<%
If Replace(Request.QueryString("default"),"'","''") ="" or replace(request.querystring("default"),"'","''") = "Null" then
default = 1
Else
End if

Set Con = Server.CreateObject("Adodb.Connection")
Con.open "Driver={Microsoft Access Driver (*.mdb)};Dbq=" & Server.MapPath("../../../../Db/marcella.mdb") & ";"
set rst = con.execute("Select id,rubrik,sida From Marcella where id=" & request.querystring("default"))

If not rst.eof then
Response.write rst("rubrik")
Else
end if
%>

Där Id är vanliga tal så som 1,2 osv.
Där av att jag inte kör '" och "'
Men ändå får jag klagomål på id'.
med följande felmedelande:


Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'id='.

/offer/marcella/top/top.asp, line 9


Vad är då fel?


Svara

Sv: Strull med databas och sql fråga.

Postades av 2004-05-19 12:22:19 - Anders Biederbeck

kort fundering:
Om ditt villkor uppfylls så ställer du ändå frågan, fast med "" eller null...fast du har satt Default till 1...??
Ska det vara så?
Vad är det du ska göra?

/bix


Svara

Sv: Strull med databas och sql fråga.

Postades av 2004-05-19 16:50:58 - Göran Andersson

Du har ett värde i querystring som din If-sats inte reagerar på, men ändå inte innehåller något. Exempelvis ett mellanslag.

Du kan använda funktionen IsDigits från mitt arkiv för att kolla ifall det är ett tal.
http://www.guffa.com/Programming_archive.asp?id=13


Svara

Sv: Strull med databas och sql fråga.

Postades av 2004-05-20 20:12:07 - Per Karlsson

Testa det här:
<CODE>
<%
If Replace(Request.QueryString("default"),"'","''") ="" or replace(request.querystring("default"),"'","''") = "Null" then
default = 1
Else
default = Request.QueryString("default")
End if

Set Con = Server.CreateObject("Adodb.Connection")
Con.open "Driver={Microsoft Access Driver (*.mdb)};Dbq=" & Server.MapPath("../../../../Db/marcella.mdb") & ";"
set rst = con.execute("Select id,rubrik,sida From Marcella where id=" & default)

</CODE>

/PK


Svara

Sv: Strull med databas och sql fråga.

Postades av 2004-05-20 23:18:58 - Andreas Hillqvist

JAg skulle skrivit det på följande sätt:
<code>
<%
Dim rs
Dim Con
Dim Default

Default = Trim(Request.QueryString("default"))
If IsNumeric(Default) Then
Default = CLng(Default)
Else
Default = 1
End If

Set Con = Server.CreateObject("Adodb.Connection")
Con.open "Driver={Microsoft Access Driver (*.mdb)};Dbq=" & Server.MapPath("../../../../Db/marcella.mdb") & ";"

Set rst = con.execute("SELECT id, rubrik, sida FROM Marcella WHERE id = " & Default

If rst.eof then
Response.Write "Post saknas för id: " & Default
Else
Response.write rst("rubrik")
End if

rst.Close
Set rst = Nothing

Con.Close
Set Con = Nothing
%>
</code>


Svara

Sv: Strull med databas och sql fråga.

Postades av 2004-05-21 23:12:37 - Per Karlsson

OK. Snyggare.

Men... varför konvertera default till en long? Den används ju ändå bara som en sträng sedan.


Svara

Sv: Strull med databas och sql fråga.

Postades av 2004-05-22 10:30:51 - Andreas Hillqvist

Enkelt svar: SÄKERHET!

För att förhindra "SQL inject" bör värdet vallideras och ogiltliga värden hindras i från att fyllas i SQL satsen.

Låt oss säga at det rört sig om MS SQL Server. Vilket ger möjlighet att köra flera SQL satser eftervarandra i ett anrop.

Då kan en hacker ange föjande värde:
<code>
Default ="0 DELETE FROM Marcella"
</code>

Ojsan. Han "råkade" tömma hela tabellen. Dett kräver ju att han känner till datastrukturen. Men kan ju påpeka att vi ju genom denna tråd talat om namnet för Marcella tabellen.

Okej, så det är access databas, vilket bara stödjer en SQL sats per anrop, i dagsläget. Men om han låter det vara och någon dag uppgraderar till MS SQL Server. Så finns säkerhgets hålet kvar...

Jag hoppas jag nu tydligjort att det är viktigt att validera värden. IsNumeric() funktionen undviker att fel uppstår på sidan. Givetvis kan ett fel uppstå då talet är större eller mindre än det long(16-bitars heltal/integer) tillåter.

Jag är inte insatt i hur fel på en sidan belastar servern. Men om ett fel kräver servern på mer resurser än ett fungerande anrop bör man hantera felen. Då annars detta kan användas för en DOS - "Denial of Service" attack (Man belastar servern så mycket att servern nekad användare tillträde till den).

Om man skall utveckla webbsidor så anser jag man bör lägga storvikt på säkerhet då det flesta applikationer ligger exponerade för världens "alla" hackers.

JAg tar i detta inlägg upp mycket lite om säkerhet vad det gäller programmering. Ofta fokuserar en hacker i första hand på server program varan. Vilket är "lättare" att ta ner en server med. Om inte senast service pack är installerad kan leda till att hackern kan instalera en trojan. Öppna upp systemet och ta över servern.
Om hackern inte hittar "hål" i serverprogramvare eller konfigarationen av serverprogramvaran så tror jag att server applikationer på servern kan vara ett nästa angrips punkt.

Jag tar gärna emot konstruktiv kritik om detta inlägg.

Med vänliga hällsningar - Andreas Hillqvist


Svara

Sv: Strull med databas och sql fråga.

Postades av 2004-05-22 13:45:51 - Per Karlsson

Absolut. Indatakontroller är enormt viktigt, speciellt när det gäller webbapplikationer. Dock behövs i det här fallet inte någon konvertering, utan Isnumeric() borde vara tillräckligt. Vi kanske dock börjar glida iväg från ämnet för den här tråden, förmodligen är problemet redan löst...

Med tanke på dels indatavalidering och dels serverbelastning borde man väl egentligen alltid använda typade variabler, och aldrig skriva någonting i stil med
<CODE>
Dim rs
Dim Con
Dim Default
</CODE>
Detta innebär väl att alla variabler blir Variant:s, vilket är prestandakrävande, och kan leda till att felaktiga och potentiellt farliga värden hamnar i en SQL-sats. Istället bör man använda typade variabler, t.ex.
<CODE>
Dim Default as Long
</CODE>

Just ASP-hackare verkar alltid hoppa över just detta med typning.
Finns det något särskilt skäl till detta?

/PK


Svara

Sv: Strull med databas och sql fråga.

Postades av 2004-05-22 17:33:44 - Andreas Hillqvist

Just att jag typar den beror på att jag vill undvika att databasen gör detta. IsNumeric() funktionen gör som den säger. Kontrollerar om ett värde är ett tal.

Man får väl skriva en egen IsLong funktion:
<code>
Function IsLong(Value)
If IsNumeric Then
On Error Resume Next
CLng Value
IsLong = (Err.Number = 0)
End If
End Function
</code>
(Ej testad. Men "bör" funka.)


>
>Detta innebär väl att alla variabler blir Variant:s, vilket är prestandakrävande, och kan leda till att felaktiga och potentiellt farliga värden hamnar i en SQL-sats.
>Istället bör man använda typade variabler.
>

Har du arbetat mot ASP sidor?
ASP arbetar med VB script, vilket bara stödjer variant datatypen. Så du och jag har inget val att använda typade variabler. Vårt alternativ blir att övergå till ASP.NET.


Svara

Sv: Strull med databas och sql fråga.

Postades av 2004-05-22 22:58:28 - Per Karlsson

Du har rätt. ASP har ingen hård typning. Det var ca 4 år sedan jag senast gjorde något i klassisk asp, så jag är lite rostig...

Däremot stämmer det inte det du säger angående typningen av variabler i en sql-sats. När en Long konkateneras med en sträng (i detta fall sql-satsen) görs en implicit konvertering av den till en sträng. Det enda sättet att undvika detta är att använda en s.k. parameterized query, dvs att inte skicka in sql-satsen som en sträng till databasen. Eftersom vi tidigare var inne på säkerhet, kan jag säga att parameterized queries är det absolut säkraste sättet att skicka in värden till en databas. Bland annat görs då typkontroller på alla värden som skickas in och SQL injection blir i det närmaste omöjligt. Jag tror dock att parameterized queries kräver att man använder lagrade procedurer.

Undrar förresten om problemet löste sig för killen...


Svara

Sv: Strull med databas och sql fråga.

Postades av 2004-05-22 23:40:03 - Andreas Hillqvist

Är du ute efter sista ordet? ;o)

>
>Däremot stämmer det inte det du säger angående typningen av variabler i en sql-sats.
>

Vad stämmer inte? Det finns bara en datatyp Variant. Denna har flera undertyper, vilket "Long" (16-bitars heltal) är en av dem:
<code>
'VB 3/5/6 exemple kod
Public Sub TestVB()
Dim X As Variant
Debug.Print TypeName(X)

X = "1"
Debug.Print TypeName(X)

X = 1
Debug.Print TypeName(X)

X = CLng(1)
Debug.Print TypeName(X)

End Sub

'VB Script
Public Sub TestASP()
Dim X
Response.Write TypeName(X)

X = "1"
Response.Write TypeName(X)

X = 1
Response.Write TypeName(X)

X = CLng(1)
Response.Write TypeName(X)

End Sub
</code>

>När en Long konkateneras med en sträng (i detta fall sql-satsen) görs en implicit konvertering av den till en sträng.
>

Är det något fel med det?

>Det enda sättet att undvika detta är att använda en s.k. parameterized query, dvs att inte skicka in sql-satsen som en sträng till databasen.
>

Tänker du på prestanda förlusten om att göra om ett tal till text? Kräver det inte mer resurser att instansiera ett commandobjekt tilldela det parametrarna och anropa det.

>Eftersom vi tidigare var inne på säkerhet, kan jag säga att parameterized queries är det absolut säkraste sättet att skicka in värden till en databas.
>Bland annat görs då typkontroller på alla värden som skickas in och SQL injection blir i det närmaste omöjligt.
>

Jag tycker om parameterized queries. Men mitt svara berörde bara datatyper i ASP. Det är som att klaga på att en presentation om den nya matberedaren inte kan göra en pizza.

>Jag tror dock att parameterized queries kräver att man använder lagrade procedurer.

Om en sparad fråga i Access(motsvarar en vy) har parametrar kan man anropa den som om den vore en lagrade procedur.

För exempel på en sådan, se inlägg: ADODB: Command.Prepered ([ADODB: Command.Prepered])


Svara

Sv: Strull med databas och sql fråga.

Postades av 2004-05-23 00:16:48 - Per Karlsson

Ha ha
Jag hoppas du inte tror att jag klagar. Jag bara diskuterar.

Det enda jag egentligen invände mot var användandet av clng, som var onödigt eftersom en koll redan hade gjorts mha IsNumeric. OK, det är väl lite fånigt att anmärka på sådana detaljer som varken gör till eller från, men ibland så vill man... och det kan ju leda till långdragna diskussioner om helt andra saker...

Det var inte prestanda jag tänkte på. Det är nog betydligt mer prestandakrävande att använda command-objekt. Anledningen till att jag förespråkar detta är istället säkerhetsaspekterna. Anledningen till att jag gled in på säkerhet var ditt tidigare inlägg om sql injection. Bygger man webbapplikationer bör man tänka på detta och då är det bra att ta för vana att använda parameterized queries.

Nu måste du skriva något riktigt kontroversiellt för att jag ska svara.


Svara

Sv: Strull med databas och sql fråga.

Postades av 2004-05-23 01:29:29 - Andreas Hillqvist

>
>Bygger man webbapplikationer bör man tänka på detta och då är det bra att ta för vana att använda parameterized queries.
>

Håller fullständigt med dig vad det gäller det. Men den som använder refres metoden på parameter collectionen för commandobjekt skall skämas.

Gör du det?


Svara

Sv: Strull med databas och sql fråga.

Postades av 2004-05-24 11:52:16 - Göran Andersson

> Dock behövs i det här fallet inte någon konvertering, utan Isnumeric() borde vara tillräckligt.

Jag förespråkar att man ska se till att variablerna <b>alltid</b> innehåller en viss datatyp. Just eftersom VBScript saknar typade variabler så bör man hålla hårt på datatyperna.

Jag döper mina variabler efter datatypen som de ska innehålla, på Microsoft-maner:

Dim objRS, objCon, lngDefault

Det är ganska vanligt att man får problem med datatyperna ifall man inte håller efter dem. Jag tror att det vanligaste är att jämförelser inte fungerar, eftersom man jämför en sträng med ett tal.


Svara

Sv: Strull med databas och sql fråga.

Postades av 2004-05-24 11:54:18 - Andreas Hillqvist

Trevligt att ha någon på min sida. ;o)


Svara

Sv: Strull med databas och sql fråga.

Postades av 2004-05-24 16:04:03 - Kristoffer Ljungqvist

Vill tacka för alla svar.
SKa skriva ut och läsa dom.
Sitter på skolan där jag studerar och där får vi inte sitta längre mer än 16:00 då vi slutar på fredag.
Men vill tacka alla och ska läsa alla inlägg.
Bara på 5 dagar har jag fått över 14 svar på min fråga.
Så många på så kort tid har jag alldrig fått när jag har ställt en fråga.
Har fått så här många inlägg 14 på kanske 2-3 månader efteråt att jag fråga om problem lösning.
Jag vill tacka alla.


Svara

Nyligen

  • 08:28 Butiksskyltar: Hur upplever utbude
  • 22:31 Slappna av
  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 786
27 960
271 761
485
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies