|  | 		    
					
        
         
          
         
	
          | |  | 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
 
 
 |  |  | 
 |  |