|
| Autoimatisk aflæsning af form/cookie/query~ Fra : Rune Jensen |
Dato : 08-06-10 10:36 |
|
Måske har dette relation til Leifs spørgsmål.
Jeg vil have en automatisk "aflæsning" af alle elementer og -værdier,
sådan at der kommer et FORM_ foran en variabel, hvis den er aflæst fra
en form, QUERY_ foran querystring og COOKIE_ foran cookie.
Man gennemløber f.eks. querystring, som har disse variable:
domæne.dk/index.asp?pagenumber_NU=2&edit_NU=1&name_AN=Joe+Jackson
Herefter skal variablene udlæses i scriptet som:
QUERY_PAGENUMBER_NU og QUERY_EDIT_NU og QUERY_NAME_AN
....sådan de får værdierne henholdsvist 2 og 1 og "Joe Jackson", og så
man kan arbejde direkte videre med dem.
Værdierne bagefter variablen siger noget om typen, som skal bruges til
en grov-validering udfra disse. _NU er numerisk, _AL er alpha/bogstaver,
_AN er alfa-numerisk og _DT er datoer.
Er dette muligt?
MVH
Rune Jensen
| |
Leif Neland (08-06-2010)
| Kommentar Fra : Leif Neland |
Dato : 08-06-10 11:59 |
|
Den 08-06-2010 11:36, Rune Jensen skrev:
> Måske har dette relation til Leifs spørgsmål.
>
> Jeg vil have en automatisk "aflæsning" af alle elementer og -værdier,
> sådan at der kommer et FORM_ foran en variabel, hvis den er aflæst fra
> en form, QUERY_ foran querystring og COOKIE_ foran cookie.
>
> Man gennemløber f.eks. querystring, som har disse variable:
>
> domæne.dk/index.asp?pagenumber_NU=2&edit_NU=1&name_AN=Joe+Jackson
>
> Herefter skal variablene udlæses i scriptet som:
>
> QUERY_PAGENUMBER_NU og QUERY_EDIT_NU og QUERY_NAME_AN
>
> ...sådan de får værdierne henholdsvist 2 og 1 og "Joe Jackson", og så
> man kan arbejde direkte videre med dem.
>
> Værdierne bagefter variablen siger noget om typen, som skal bruges til
> en grov-validering udfra disse. _NU er numerisk, _AL er alpha/bogstaver,
> _AN er alfa-numerisk og _DT er datoer.
>
> Er dette muligt?
Det er det sikkert, men det lyder usikkert at brugeren kan "injecte"
alle de variable, han har lyst til.
Se efter de variable, du forventer, og ignorer resten.
Leif
| |
Leif Neland (08-06-2010)
| Kommentar Fra : Leif Neland |
Dato : 08-06-10 12:26 |
|
Den 08-06-2010 11:36, Rune Jensen skrev:
> domæne.dk/index.asp?pagenumber_NU=2&edit_NU=1&name_AN=Joe+Jackson
>
> Herefter skal variablene udlæses i scriptet som:
>
> QUERY_PAGENUMBER_NU og QUERY_EDIT_NU og QUERY_NAME_AN
>
> ...sådan de får værdierne henholdsvist 2 og 1 og "Joe Jackson", og så
> man kan arbejde direkte videre med dem.
>
> Værdierne bagefter variablen siger noget om typen, som skal bruges til
> en grov-validering udfra disse. _NU er numerisk, _AL er alpha/bogstaver,
> _AN er alfa-numerisk og _DT er datoer.
>
> Er dette muligt?
>
Jeg ville egentlig have skrevet:
- - - - - -
I din iver efter at optimere koden, og i relation til din kommentar
"men en lille ting, så må det kunne gøres mere optimalt end at kalde
request for hver variabel"
glemmer du at vbscript er et fortolket sprog, der bliver oversat hver
gang siden vises, og forolkningen derefter smides væk til næste gang.
Så det er praktisk taget ligegyldigt om du bruger QUERY_PAGENUMBER_NU
eller Request.QueryString("PAGENUMBER_NU")
- - - - - - -
Men så testede jeg at assigne fra en variabel (p=x) eller fra en request
(p=request.querystring("x") inde i en løkke:
100000 gennemløb i løkke:
p=x i løkke:
Tid = 0,0625s
p=request.querystring("x") i løkke
Tid = 0,671875s
Så ganske vist er det en faktor 10, men du må afgøre om det er så småt
at det alligevel er ligegyldigt.
Leif
| |
Rune Jensen (08-06-2010)
| Kommentar Fra : Rune Jensen |
Dato : 08-06-10 14:03 |
|
Den 08-06-2010 13:26, Leif Neland skrev:
> Så ganske vist er det en faktor 10, men du må afgøre om det er så småt
> at det alligevel er ligegyldigt.
Til store sider ville jeg tage alt, jeg kunne få. Til mindre, som den
jeg lige har gang i, der er den del ikke så afgørende.
Selv om man godt kan tilføje, at der er ingen grund til at misbruge
requests heller. Men en anden ting, så:
Idéen med at angive variablene med en token for type, det var jo, at man
kunne foretage en grovsortering helt i starten af siden. Her er bl.a.
Google en synder, fordi den forsøger at "gætte" mine querystring
variable, og det er jeg ikke interesseret i. Og så er der harvesterbots
og injectors også.
Men jeg tænkte så på at lave en generel "sanitizer", dvs. én som kan
bruges både til query string, cookie og form. Her er det vigtigt netop,
at man kender typen, hvis man vil lave en sådan (grov)sortering.
F.eks. så har jeg to variable i querystring, som jeg *ved* er numeriske,
men jeg er nødt til at vente med at tjekke dette til lige før jeg skal
bruge dem, de bliver ikke brugt på alle sider. Det samme med nogle
form-elementer, jeg *ved* de må kun være numeriske, eller jeg *ved* de
må kun indeholde alpha-karakterer (bogstaver).
Så idéen var allerede i sidens top, og ved hjælp af en efterstillet
token for typen at kunne lave denne grovsortering. Der er flere variable
end man tror i sådan en hjemmeside, form felter, cookies, og alle skal
inputvalideres, men ikke alle behøver nødvendigvis tjekkes for andet end
om de overholder typen.
Derfor ar pointen: Tjek for korrekt indhold i forhold til type, og hvis
den ikke er korrekt, lav en redirect med en fejlcookie sat (ell. lign.),
med den variabel sat til "nothing" (eller f.eks. 1 hvis det er en
numerisk variabel).
Det er, kort sagt, for at være sikker på, der er en eller anden form for
tjek på samtlige input, også dem man risikerer at glemme i fremtiden.
Sådan en slags "sanitizer-function".
MVH
Rune Jensen
| |
Rune Jensen (08-06-2010)
| Kommentar Fra : Rune Jensen |
Dato : 08-06-10 14:13 |
|
Den 08-06-2010 15:03, Rune Jensen skrev:
> Men jeg tænkte så på at lave en generel "sanitizer", dvs. én som kan
> bruges både til query string, cookie og form. Her er det vigtigt netop,
> at man kender typen, hvis man vil lave en sådan (grov)sortering.
Mht. det token, så ville jeg tjekke numeriske værdier med isNumeric,
datoer med isDate, alpha-strenge samt alpha-numeriske strenge via regEx.
Så er der nogle stykker tilbage, hvor jeg er nødt til at tjekke helt i
bund før de skal bruges, f.eks. i text-areas, hvor det skal være muligt
at skrive simpel HTML.
Men generelt vil en sådan sanitizer kunne tage en god del af det grove
arbejde. Og helt smart vil det være hvis den virker på *alt* input som
er nu og her, dvs. kun variable som bliver brugt. Og dvs. ved at
gennemløbe querystring variable en for en, cookie og form. Så går der
ikke noget arbejde til spilde.
MVH
Rune Jensen
| |
Stig Johansen (10-06-2010)
| Kommentar Fra : Stig Johansen |
Dato : 10-06-10 07:14 |
|
Leif Neland wrote:
> glemmer du at vbscript er et fortolket sprog, der bliver oversat hver
> gang siden vises, og forolkningen derefter smides væk til næste gang.
Ikke helt.
Disse meget lavt performende 'sprog' ASP/PHP forsøger at cache den
precompliere kode (uder givne omstændigheder).
> Så det er praktisk taget ligegyldigt om du bruger QUERY_PAGENUMBER_NU
> eller Request.QueryString("PAGENUMBER_NU")
Nej, men det har du opdaget.
> - - - - - - -
> Men så testede jeg at assigne fra en variabel (p=x) eller fra en request
> (p=request.querystring("x") inde i en løkke:
>
> 100000 gennemløb i løkke:
>
> p=x i løkke:
> Tid = 0,0625s
> p=request.querystring("x") i løkke
> Tid = 0,671875s
>
> Så ganske vist er det en faktor 10, men du må afgøre om det er så småt
> at det alligevel er ligegyldigt.
Forskellen er, at p=x er en 'fast' variabel i memory, hvorimod
p=request.querystring("x") er en lookup i en liste.
Skal man bruge den een gang er det bedst med lookup, da assignment til en
variabel er overhead, skal man bruge den to gange er det muligvis breakeven
- skal man bruge den mange gange er det bedst (som du også har set) at
gemme lookup'en i en variabel.
--
Med venlig hilsen
Stig Johansen
| |
|
|