Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.
Toon posts:

[ASP.NET] lege Query string parameter probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,

In een pagina wil ik de querystring uitlezen.

voor de url www.mijnwebsite.nl/pagina1.aspx?CustomerID=1&OrderID=1
wil ik bijvoorbeeld de CustomerID en OrderID uitlezen.

in ASP.NET kan men dit bereiken met

code:
1
2
CustomerID = int.Parse(Page.Request.QueryString["CustomerID "]);
OrderID= int.Parse(Page.Request.QueryString["OrderID"]);


Het gekke is dat hij alleen de eerste querystring parameter kan uitlezen en de daarop volgende parameters niet. Hieronder een aantal snippets

asp.net pagina
code:
1
 <asp:HyperLink runat="server" ID="lnk1" NavigateUrl="~/pagina1.aspx?CustomerID={0}&OrderID={1}">Klik hier</asp:HyperLink>


code behind
code:
1
  lnk1.NavigateUrl = string.Format(lnk1.NavigateUrl, CustomerID, OrderID);


Heb het zelf geprobeerd met HttpUtility.UrlEncode. Helaas zonder resultaat.

Dit probleem kan waarschijnlijk opgelost worden door de verschillende ID's in een request object te stoppen. Echter is dit niet een hele mooie oplossing.

Weet iemand hoe je het bovenstaande probleem kan oplossen?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op vrijdag 11 juli 2008 @ 17:30:
code:
1
CustomerID = int.Parse(Page.Request.QueryString["CustomerID "]);
Je hebt sowieso een spatie achter CustomerID staan...
En kijk eens naar int.TryParse want je gaat ongelofelijk de mist in als ik ga rommelen in de querystring en customerid verander naar 'test' ;)

[ Voor 82% gewijzigd door RobIII op 11-07-2008 17:36 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • dominic
  • Registratie: Juli 2000
  • Laatst online: 02-11 11:36

dominic

will code for food

Het zwakste punt in de beveiliging van je applicatie zit hem altijd in de gegevensinvoer. Check daarom altijd al je parameters en log pogingen om de invoer te betoeteren! Zie onderstaande code.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
string qs_CustomerID = (Request.QueryString["CustomerID"] != null) ? Request.QueryString["CustomerID"]:String.Empty;

if (qs_CustomerID.Length > 0)
{
  try
  {
    int CustomerID = Convert.ToInt32(qs_CustomerID);
  
    // rest van je code
  }
  catch (Exception Err)
  {
    // no valid customer id
    // log error (Err)
  }
}

[ Voor 6% gewijzigd door dominic op 11-07-2008 17:43 ]

Download my music on SoundCloud


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
dominic schreef op vrijdag 11 juli 2008 @ 17:40:
Het zwakste punt in de beveiliging van je applicatie zit hem altijd in de gegevensinvoer. Check daarom altijd al je parameters! Zie onderstaande code.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
string qs_CustomerID = (Request.QueryString["CustomerID"] != null) ? Request.QueryString["CustomerID"]:String.Empty;

if (qs_CustomerID.Length > 0)
{
  try
  {
    int CustomerID = Convert.ToInt32(qs_CustomerID);
  
    // rest van je code
  }
  catch (Exception Err)
  {
   // no valid customer id
  }
}
Sanitizen van userinput heet dat ;) En je try/catch constructie vind ik wat omslachtig (zie vorige post) en garandeert nog steeds niet dat je customerid "valid" is (mijn oplossing overigens ook niet). Een 'valid' customerid kan namelijk ook nog eens als eis hebben dat het deelbaar moet zijn door 13 of uberhaupt moet bestaan in de DB ;)

[ Voor 4% gewijzigd door RobIII op 11-07-2008 17:43 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • dominic
  • Registratie: Juli 2000
  • Laatst online: 02-11 11:36

dominic

will code for food

RobIII schreef op vrijdag 11 juli 2008 @ 17:42:
[...]

Sanitizen van userinput heet dat ;) En je try/catch constructie vind ik wat omslachtig (zie vorige post) en garandeert nog steeds niet dat je customerid "valid" is (mijn oplossing overigens ook niet). Een 'valid' customerid kan namelijk ook nog eens als eis hebben dat het deelbaar moet zijn door 13 of uberhaupt moet bestaan in de DB ;)
Heheh precies. Misschien een aparte method maken die onderstaande call mogelijk maakt.

code:
1
int CustomerID = ValidateCustomerID((Request.QueryString["CustomerID"] != null) ? Request.QueryString["CustomerID"]:String.Empty);

Download my music on SoundCloud


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
dominic schreef op vrijdag 11 juli 2008 @ 17:46:
[...]


Heheh precies. Misschien een aparte method maken die onderstaande call mogelijk maakt.

code:
1
int CustomerID = ValidateCustomerID((Request.QueryString["CustomerID"] != null) ? Request.QueryString["CustomerID"]:String.Empty);
WTH?
Waarom doe je zo moeilijk in de ValidateCustomerID call en laat je het niet helemaal door ValidateCustomerID afhandelen? En waarom een 'string.empty' passen als je een int terugverwacht?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
in mijn code doe ik het volgende

code:
1
2
3
4
5
6
7
//page load

if (!string.IsNullOrEmpty(Page.Request.QueryString["CustomerID"])
 //parse

if (!string.IsNullOrEmpty(Page.Request.QueryString["OrderID"])
 //parse


De eerste querystring parameter pakt hij wel maar de daarop volgende niet.

Ik heb ook gekeken naar de gegevensinvoer. de link met querystring wordt netjes gegenereert (zelf geprobeerd om de link te encode).

  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 13-12-2024
..

[ Voor 96% gewijzigd door 4of9 op 11-07-2008 18:16 ]

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


  • dominic
  • Registratie: Juli 2000
  • Laatst online: 02-11 11:36

dominic

will code for food

RobIII schreef op vrijdag 11 juli 2008 @ 17:49:
[...]

WTH?
Waarom doe je zo moeilijk in de ValidateCustomerID call en laat je het niet helemaal door ValidateCustomerID afhandelen? En waarom een 'string.empty' passen als je een int terugverwacht?
Parameter is natuurlijk string, de method valideert de input en de waarde (Alsmede andere checks)..

Zelf zou ik deze handel heel anders oplossen waarbij je een Customer object bouwt met daarin een array aan geldige orders etc..

Maar genoeg offtopic..

[ Voor 16% gewijzigd door dominic op 11-07-2008 20:34 ]

Download my music on SoundCloud


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
dominic schreef op vrijdag 11 juli 2008 @ 20:27:
[...]


Parameter is natuurlijk string, de method valideert de input en de waarde (Alsmede andere checks)..
offtopic:
True, true. Ik ben schijnbaar niet helemaal wakker vandaag :P

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • dominic
  • Registratie: Juli 2000
  • Laatst online: 02-11 11:36

dominic

will code for food

RobIII schreef op vrijdag 11 juli 2008 @ 20:42:
[...]

offtopic:
True, true. Ik ben schijnbaar niet helemaal wakker vandaag :P
Maar waarom zou de 2e QueryString parameter van onze grote vriend naruto niet uitgelezen kunnen worden? Ik zit te denken aan de & die misschien niet goed ge-encode wordt en het CustomerID veld een waarde heeft van
code:
1
12345&amp;OrderID=123
?

Download my music on SoundCloud


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
dominic schreef op zaterdag 12 juli 2008 @ 00:51:
[...]


Maar waarom zou de 2e QueryString parameter van onze grote vriend naruto niet uitgelezen kunnen worden? Ik zit te denken aan de & die misschien niet goed ge-encode wordt en het CustomerID veld een waarde heeft van
code:
1
12345&amp;OrderID=123
?
Dan zullen we de HTML moeten zien ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Haan
  • Registratie: Februari 2004
  • Laatst online: 17-11 08:45

Haan

dotnetter

Anders eens proberen wat er met Request.QueryString[0] en [1] gebeurt. Als [1] een OutOfRangeException gooit, weet je genoeg ;) (of gewoon even met de debugger kijken wat er in zit natuurlijk)

[ Voor 20% gewijzigd door Haan op 12-07-2008 01:52 ]

Kater? Eerst water, de rest komt later


  • Cousin Boneless
  • Registratie: Juni 2008
  • Laatst online: 28-02 12:55
Hmm.. case sensitive?

[ Voor 70% gewijzigd door Cousin Boneless op 12-07-2008 11:34 . Reden: zit niet op te letten ]

Pagina: 1