/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Problemer med SQL sætninger og forms
Fra : SWULP


Dato : 26-10-02 13:26

Jeg skal have udskrevet en post fra en database ud fra hvilket
varenr brugeren har indtastet i min form. Som ser således ud:

<form method="post">
<input type="int" name="sletvarenr">
<input type="submit" value="Søg">
</form>


Jeg får dog konstant følgende fejl:

Microsoft VBScript compilation error '800a0401'

Expected end of statement

/andy/tpede/vaelgslet.asp, line 35

i sætningen:

strQuery= "SELECT * FROM produktsortiment WHERE varenr=
Request.Form("sletvarenr")"
^
når jeg kører siden.

Hvordan kan jeg undgå dette problem?

MVH Thomas

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Jens Gyldenkærne Cla~ (26-10-2002)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 26-10-02 13:57

SWULP skrev:

> <form method="post">
> <input type="int" name="sletvarenr">

Der er ikke nogen <input type="int">. Brug i stedet
<input type="text"...>.

> strQuery= "SELECT * FROM produktsortiment WHERE varenr=
> Request.Form("sletvarenr")"

Du kan ikke bare sætte din Request.Form ind i strengvariablen. Du
er nødt til at sammensætte strQuery af flere tekststykker - hvor et
tekststykke enten kan være markeret ved dobbelte anførselstegn
eller gemt i en variabel. Prøv med:

strQuery = "SELECT * FROM produktsortiment WHERE varenr=" & _
           Request.Form("sletvarenr")

Du bør i øvrigt kontrollere indholdet af Request.Form("sletvarenr")
inden du sender det til databasen. Dels for at undgå fejl og dels
for at undgå misbrug. Forestil dig fx effekten af følgende værdier
af sletvarenr: "23-45" [1], "11 og 24" [2], "0; DELETE * FROM
produktsortiment" [3]

Noter:
======

[1] Opfattes som et minusstykke og svarer derfor til værdien -22
[2] Værdien er ikke numerisk og Access vil derfor returnere en
fejlmeddelelse
[3] Bevidst angreb - udfører en helt ny sætning efter den sætning du har
angivet. Det kan kun udføres hvis en bruger kan gætte et af dine
tabelnavne, og samtidig regne ud hvordan den sætning du allerede
bruger skal afsluttes korrekt - men hvis det lykkes er der i
princippet ingen grænser for hvor mange skader en misbruger kan
anrette. Det kan godt betale sig at sikre sig mod den slags.
--
Jens Gyldenkærne Clausen
MF (medlem af FIDUSO - www.fiduso.dk)
I ovenstående tekst benyttes nyt komma.

Jørn Andersen (27-10-2002)
Kommentar
Fra : Jørn Andersen


Dato : 27-10-02 13:03

On Sat, 26 Oct 2002 14:56:37 +0200, Jens Gyldenkærne Clausen
<jens@gyros.invalid> wrote:

>strQuery = "SELECT * FROM produktsortiment WHERE varenr=" & _
>            Request.Form("sletvarenr")
>
>Du bør i øvrigt kontrollere indholdet af Request.Form("sletvarenr")
>inden du sender det til databasen. Dels for at undgå fejl og dels
>for at undgå misbrug.

Man kunne måske tilføje, at det ofte er en fordel at begrænse
text-formfelter til fordel for selectboxe eller andet (fx
server-genererede links etc.).

For brugeren vil det være lettere end at skulle finde et varenummer,
som derefter skal indtastes. Og sikkerhedsmæssigt bliver det lidt mere
besværligt at indtaste forkerte værdier - tilfældigt eller med vilje.

--
Jørn Andersen,
Brønshøj

Jakob Andersen (27-10-2002)
Kommentar
Fra : Jakob Andersen


Dato : 27-10-02 15:08

"Jens Gyldenkærne Clausen" <jens@gyros.invalid> wrote
> [3] Bevidst angreb - udfører en helt ny sætning efter den sætning du har
> angivet. Det kan kun udføres hvis en bruger kan gætte et af dine
> tabelnavne, og samtidig regne ud hvordan den sætning du allerede
> bruger skal afsluttes korrekt - men hvis det lykkes er der i
> princippet ingen grænser for hvor mange skader en misbruger kan
> anrette. Det kan godt betale sig at sikre sig mod den slags.

Dog er det ikke helt så farligt med Access da driveren ikke tillader flere
linjers SQL i et kald.

Men derfor er det alligevel rart at have sikret sig hvis man evt. skifter
database på et tidspunkt.

--
Jakob Andersen



Søg
Reklame
Statistik
Spørgsmål : 177551
Tips : 31968
Nyheder : 719565
Indlæg : 6408837
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste