[ASP] Applicatie beveiliging, scriptcode in querystring

Pagina: 1
Acties:

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 04-05 11:56
Ik ben bezig mijn ASP webapplicatie goed te beveiligen. Natuurlijk heb ik P&W FAQ - Hoe beveilig ik een website? al doorgelezen en het stuk over SQL Injection attacks, dit is nu zo goed als gefixed en ben ik nog bezig om door te lopen:

Waar ik nu niet uitkom is dat als iemand bijv dit doet: (dus de URL zou aanpassen met een scriptcode erin) -->
HTML:
1
http://mijndomein.nl/klanten.asp?locatie=klanten&page=1&zoekenin=&zoekennaar=&sort=<script>alert('test');</script>

Mijn pagina geeft nu een Javascript foutmelding als ik deze URL inplak om naar de volgende pagina te gaan, met deze functie vang ik een aantal dingen op die mis zouden kunnen gaan:
HTML:
1
2
3
4
5
Function FixHTML(Variable)
 FixHTML = Server.HTMLEncode(Variable)
 FixHTML = Replace(FixHTML,Chr(34),"&quot;")
 FixHTML = Replace(FixHTML,"'","'")
End Function

Als ik nu de laatste querystring, waar dus een <script> tagblok sta door deze functie heenhaal krijg ik dit in de HTML code -->
HTML:
1
onclick="document.location.href='?locatie=klanten&amp;page=2&amp;zoekenin=&amp;zoekennaar=&amp;sort=&lt;script&gt;alert('test');&lt;/script&gt;';"

Echter krijg ik op deze regel een Javascript foutmelding:
Expected ';'

Weet iemand waarom?
Welke karakters zou ik nog meer moeten replacen in de functie FixHTML om dit soort dingen allemaal op te vangen zodra deze geschreven worden op de pagina?
Of is er een betere manier om dit goed en 100% op te vangen? _/-\o_

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
je kunt voor zover ik weet in javascript in ieder geval al geen html-entities gebruiken in querystrings (dus & moet eruit)

ik denk zelf dat "/" het teken is wat de foutmelding genereerd

overigens kun je wanneer je in asp aan het beveiligen gaat het beste:
  • voor verbindingen met je database parameterized queries gebruiken
  • je variabelen handmatig "strong typed" maken, dus functies schrijven die een waarde ophalen uit je sessie / je querystring / je form en die daarna controleren op het gewenste datatype...

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • Urk
  • Registratie: Maart 2000
  • Laatst online: 04-05 11:56
faabman schreef op woensdag 16 maart 2005 @ 09:27:
je kunt voor zover ik weet in javascript in ieder geval al geen html-entities gebruiken in querystrings (dus & moet eruit)
Ja, dat weet ik! Maar een gebruiker kan natuurlijk wel zelf HTML invoeren in de querystring. Mochten ze hier misbruik van willen maken, ik wil dus dat als dat gebeurd er geen foutmelding in het ASP script of in een javascript ontstaat.
faabman schreef op woensdag 16 maart 2005 @ 09:27:
ik denk zelf dat "/" het teken is wat de foutmelding genereerd
Dan moet ik deze dus opvangen en vervangen, toch? Vang ik deze op door hier \ / (aan elkaar) van te maken?
faabman schreef op woensdag 16 maart 2005 @ 09:27:
overigens kun je wanneer je in asp aan het beveiligen gaat het beste:
  • voor verbindingen met je database parameterized queries gebruiken
  • je variabelen handmatig "strong typed" maken, dus functies schrijven die een waarde ophalen uit je sessie / je querystring / je form en die daarna controleren op het gewenste datatype...
I know,
Ik heb mijn queries nu direct op de SQL database.
Ik weet dat parametrized queries beter en veiliger zijn en heb dit ook geprobeerd na het lezen van dit artikel: P&W FAQ - SQL
Zelfs ook in mijn Wrox Beginning Active Server Pages 3.0 boek gekeken maar kom er niet uit. Bovenstaande link is een voorbeeld van parametrized met ASP.NET en C#, ik gebruik gewoon ASP, hoe doe ik dit dus met gewoon ASP, kan je juiste werkende syntax nergens vinden. Kan iemand me hiermee op weg helpen? _/-\o_

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 04-05 11:56
faabman schreef op woensdag 16 maart 2005 @ 09:27:
ik denk zelf dat "/" het teken is wat de foutmelding genereerd
De / is het in ieder geval niet zo te zien. Als ik deze namelijk opvang en vervang door de ascii code voor de slash dan krijg ik deze code:
HTML:
1
onclick="document.location.href='?locatie=klanten&amp;page=2&amp;zoekenin=&amp;zoekennaar=&amp;sort=&lt;script&gt;alert('test');&lt;/script&gt;';"

Deze geeft nog steeds de javascript foutmelding:
Expected ';'

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
Urk schreef op woensdag 16 maart 2005 @ 11:11:
Bovenstaande link is een voorbeeld van parametrized met ASP.NET en C#, ik gebruik gewoon ASP, hoe doe ik dit dus met gewoon ASP, kan je juiste werkende syntax nergens vinden. Kan iemand me hiermee op weg helpen? _/-\o_
http://gathering.tweakers...D=&select_forum=#hitstart

http://gathering.tweakers...-A&select_forum=#hitstart

Er staan op msdn een aantal kleine voorbeelden

Als je echt goed aan het werk wil gaan met ASP dan kan ik je aanraden om de volgende SDKs te downloaden:
  • Windows Script Technologies SDK
  • Microsoft Platform SDK: is behoorlijk groot, alsin 100-en mbs, maar heeft documentatie voor alle MS com objecten die je in ASP wilt gebruiken

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • Urk
  • Registratie: Maart 2000
  • Laatst online: 04-05 11:56
OK, bedankt voor je reactie.
Is er dan nog iemand die me verden kan helpen met betrekking tot het javascript probleem en de html code in de querystring?

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
Urk schreef op woensdag 16 maart 2005 @ 12:31:
OK, bedankt voor je reactie.
Is er dan nog iemand die me verden kan helpen met betrekking tot het javascript probleem en de html code in de querystring?
met VuurVos in 30 secondjes

HTML:
1
onclick="document.location.href='?locatie=klanten&amp;page=2&amp;zoekenin=&amp;zoekennaar=&amp;sort=&lt;script&gt;alert(&quot;test&quot;);&lt;/script&gt;';"

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • Urk
  • Registratie: Maart 2000
  • Laatst online: 04-05 11:56
faabman schreef op woensdag 16 maart 2005 @ 13:34:
[...]


met VuurVos in 30 secondjes

HTML:
1
onclick="document.location.href='?locatie=klanten&amp;page=2&amp;zoekenin=&amp;zoekennaar=&amp;sort=&lt;script&gt;alert(&quot;test&quot;);&lt;/script&gt;';"
Hmmm...thanks! Maar is er ook nog een andere oplossing, ik gebruik deze functie namelijk voor meer variabelen waarvan de HTML gefixed word met de functie:
HTML:
1
2
3
4
5
6
Function FixHTML(Variable)
 FixHTML = Server.HTMLEncode(Variable)
 FixHTML = Replace(FixHTML,Chr(34),"&quot;")
 FixHTML = Replace(FixHTML,"'","'")
 FixHTML = Replace(FixHTML,"/","/")
End Function

Nu vervangt hij alle single quotes door dubbele quotes, in de querystring gaat het dan wel goed. maar dit kan wel problemen opleveren in andere delen.

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
Om je heel eerlijk te zeggen snap ik niet waarom je eigenlijk gebruik maakt van die functie... Ik zie eigenlijk geen enkele toegevoegde waarde...
Urk schreef op dinsdag 15 maart 2005 @ 23:01:
Ik ben bezig mijn ASP webapplicatie goed te beveiligen. Natuurlijk heb ik P&W FAQ - Hoe beveilig ik een website? al doorgelezen en het stuk over SQL Injection attacks, dit is nu zo goed als gefixed en ben ik nog bezig om door te lopen:

Waar ik nu niet uitkom is dat als iemand bijv dit doet: (dus de URL zou aanpassen met een scriptcode erin) -->
HTML:
1
http://mijndomein.nl/klanten.asp?locatie=klanten&page=1&zoekenin=&zoekennaar=&sort=<script>alert('test');</script>
En kun jij mij gelijk even vertellen hoe een hacker mijn site kan kraken door een stukje javascript toe te voegen aan een URL??

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • Urk
  • Registratie: Maart 2000
  • Laatst online: 04-05 11:56
faabman schreef op woensdag 16 maart 2005 @ 20:58:
Om je heel eerlijk te zeggen snap ik niet waarom je eigenlijk gebruik maakt van die functie... Ik zie eigenlijk geen enkele toegevoegde waarde...


[...]


En kun jij mij gelijk even vertellen hoe een hacker mijn site kan kraken door een stukje javascript toe te voegen aan een URL??
Dat zal ik dan proberen uit te leggen:
Het gaat er ook helemaal niet om dat iemand hiermee iets kan hacken, dat is niet het geval, echter kan iemand hierdoor wel Javascript fouten genereren op de pagina, ik plak namelijk de querystring weer aan een knopje die naar de volgende pagina gaat, deze querystrings blijven hetzelfde en neemt hij dus mee.
Als er een HTML code in die querystring word geplaats werkt het knopje niet meer, dit wil ik voorkomen...
Hoop dat het nu wat duidelijker is....
Hoe doen andere websites dit trouwens? Hoe vangen die HTML code in de querystring op? Of gebeurt dat niet omdat dit niet meer word gebruikt? Lijkt me sterk want een waarde in een querystring is er niet voor niets.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:52

gorgi_19

Kruimeltjes zijn weer op :9

Maar als ik het goed begrijp, wil je dus nu voorkomen dat iemand z'n eigen pagina gaat slopen?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Urk
  • Registratie: Maart 2000
  • Laatst online: 04-05 11:56
gorgi_19 schreef op donderdag 17 maart 2005 @ 01:39:
Maar als ik het goed begrijp, wil je dus nu voorkomen dat iemand z'n eigen pagina gaat slopen?
Dat is net hoe je het zou willen zien, ik wil de software gewoon bug vrij en goed beveiligd hebben.
Ik neem toch aan dat dit bij andere grote website ook word voorkomen, niet?

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 04-05 11:56
En dan nog iets:
Waarom genereerd dit wel een javascript foutmelding:
HTML:
1
onclick="document.location.href='?locatie=klanten&amp;page=2&amp;zoekenin=&amp;zoekennaar=&amp;sort=&lt;script&gt;alert('test');&lt;/script&gt;';"

en dit niet:
HTML:
1
onclick="document.location.href='?locatie=klanten&amp;page=2&amp;zoekenin=&amp;zoekennaar=&amp;sort=&lt;script&gt;alert(&quot;test&quot;);&lt;/script&gt;';"

:?

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
gorgi_19 schreef op donderdag 17 maart 2005 @ 01:39:
Maar als ik het goed begrijp, wil je dus nu voorkomen dat iemand z'n eigen pagina gaat slopen?
Of hem zo bij een zoekmachine aanmeld.....

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 04-05 11:56
raptorix schreef op donderdag 17 maart 2005 @ 10:01:
[...]

Of hem zo bij een zoekmachine aanmeld.....
Nee, want hij komt niet in een zoekmachine, het is een beveiligde applicatie. Wellicht word alleen de index pagina geindexeert.
Heeft er iemand nog antwoorden op bovenstaande vragen?

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
Urk schreef op donderdag 17 maart 2005 @ 01:54:
En dan nog iets:
Waarom genereerd dit wel een javascript foutmelding:
HTML:
1
onclick="document.location.href='?locatie=klanten&amp;page=2&amp;zoekenin=&amp;zoekennaar=&amp;sort=&lt;script&gt;alert('test');&lt;/script&gt;';"

en dit niet:
HTML:
1
onclick="document.location.href='?locatie=klanten&amp;page=2&amp;zoekenin=&amp;zoekennaar=&amp;sort=&lt;script&gt;alert(&quot;test&quot;);&lt;/script&gt;';"

:?
verschil tussen dubbele quote en enkele quote...
Urk schreef op donderdag 17 maart 2005 @ 01:38:
[...]

Dat zal ik dan proberen uit te leggen:
Het gaat er ook helemaal niet om dat iemand hiermee iets kan hacken, dat is niet het geval, echter kan iemand hierdoor wel Javascript fouten genereren op de pagina, ik plak namelijk de querystring weer aan een knopje die naar de volgende pagina gaat, deze querystrings blijven hetzelfde en neemt hij dus mee.
Als er een HTML code in die querystring word geplaats werkt het knopje niet meer, dit wil ik voorkomen...
Hoop dat het nu wat duidelijker is....
Hoe doen andere websites dit trouwens? Hoe vangen die HTML code in de querystring op? Of gebeurt dat niet omdat dit niet meer word gebruikt? Lijkt me sterk want een waarde in een querystring is er niet voor niets.
misschien moet je dan niet blind de querystring aan je knopje plakken, maar de geinterpreteerde variablelen...

waarom heb jij eigenlijk een javascript gebaseerde knop en niet gewoon een anchor??

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • Urk
  • Registratie: Maart 2000
  • Laatst online: 04-05 11:56
faabman schreef op donderdag 17 maart 2005 @ 14:15:
[...]
verschil tussen dubbele quote en enkele quote...
[...]
Ja dat snap ik, maar een enkele quote als ascii karakter (zie in mijn vergelijking hierboven) zou dan toch geen javascript foutmelding moeten geven?? Dus dat is heel raar lijkt me. :?
faabman schreef op donderdag 17 maart 2005 @ 14:15:
[...]
misschien moet je dan niet blind de querystring aan je knopje plakken, maar de geinterpreteerde variablelen...

waarom heb jij eigenlijk een javascript gebaseerde knop en niet gewoon een anchor??
Omdat het om een <input type="button"> gaat.

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
Urk schreef op vrijdag 18 maart 2005 @ 01:56:
Omdat het om een <input type="button"> gaat.
en wat is niet nut daarvan dan?? no-offi hoor, maar, met css kun je een anchor zo stylen dat deze er net zo als een button uitziet en daarmee ontloop je dus je probleem...

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • Urk
  • Registratie: Maart 2000
  • Laatst online: 04-05 11:56
faabman schreef op vrijdag 18 maart 2005 @ 10:27:
[...]


en wat is niet nut daarvan dan?? no-offi hoor, maar, met css kun je een anchor zo stylen dat deze er net zo als een button uitziet en daarmee ontloop je dus je probleem...
Waarom een probleem, ik zie niet in waarom dit een probleem is, een <a></a> tag i.p.v. een <input type="button"> tag, lijkt me...
Nog steeds niet echt een goede oplossing voor mijn eerdere probleem...

  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
mischien dat Server.URLEncode een oplossing bied?

Wat wij altijd doen is de invoer altijd converteren naar de type dat de var zou moeten bevatten, aangezien vbscript alles een variant is, kun je met de Cstr, Cdbl, Cint etc een hoop ellende afvangen, en dan is het ook makkelijker om een error af te vangen en een nette melding naar het scherm te schrijven.

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:27

crisp

Devver

Pixelated

4of9 is de eerste die het juiste antwoord geeft; query-parameters moet je url-encoden en niet HTML-encoden. Wel moet je het geheel weer HTML-encoden als het gebruikt wordt in een HTML attribuut (zoals hier in een onclick). De enige juiste manier is deze:
HTML:
1
onclick="window.location.href='bla.php?locatie=klanten&amp;page=2&amp;zoekenin=&amp;zoekennaar=&amp;sort=%3Cscript%3Ealert%28%27test%27%29%3B%3C%2Fscript%3E';"

(en let op: het is window.location)

[ Voor 10% gewijzigd door crisp op 19-03-2005 13:07 . Reden: kut-HTML rechten :/ ]

Intentionally left blank


  • Urk
  • Registratie: Maart 2000
  • Laatst online: 04-05 11:56
Bedankt 4of9 en crisp! Eindelijk een goede oplossing.
Ik heb nu een aparte functie gemaakt voor variabelen waar de gebruiker via de querystring invloed op kan uitoefenen, dit is nu geworden:
ASP:
1
2
3
4
Function FixHTMLURL(Variable)
 FixHTMLURL = Server.URLEncode(Variable)
 FixHTMLURL = Server.HTMLEncode(FixHTMLURL)
End Function

Ik krijg nu idd geen javascript foutmelding meer, gebruik nu 3 functies, bovenstaande dus voor variabelen die de gebruiker via de querystring gewijzigd kan hebben en weer opnieuw in de URL kunnen komen, de volgende functie voor hetzelfde alleen dan zonder dat het opnieuw in de URL kan komen maar alleen op de site zelf:
ASP:
1
2
3
4
5
Function FixHTML(Variable)
 FixHTML = Server.HTMLEncode(Variable)
 FixHTML = Replace(FixHTML,Chr(34),"&quot;")
 FixHTML = Replace(FixHTML,"'","'")
End Function

En dan nog code die naar de SQL database via een query gaat:
ASP:
1
2
3
Function FixSQL(Variable)
 FixSQL = Replace(Variable,"'","''")
End Function

Het is namelijk ook belangrijk dat een gebruiker bijv. via een input veld naar bijv.: <script></script> kan zoeken zonder dat dit word aangepast en dus ook zo bij de database als zoekcriteria word aangeboden. Dan zijn bovenstaande functies toch helemaal correct?
Iemand nog aanvullingen of correcties? _/-\o_
Pagina: 1