2009-07-13 18 views
0

ASP.NetでQueryStringパラメータが不明瞭に失われています。私は(私のブラウザのアドレスバーから貼り付け)以下のようなURLがあります。ASP.Netでクエリ文字列パラメータが認識されない

//Short example 
http://localhost/AllAboutThatWeb/SPARQL?partialResults=True&query=SELECT%20*%20WHERE%20{%3Fs%20%3Fp%20%3Fo}&timeout=1000 

//Long example 
http://localhost/AllAboutThatWeb/SPARQL?query=PREFIX%20rdf%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%3E%0D%0APREFIX%20rdfs%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E%0D%0APREFIX%20xsd%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema%23%3E%0D%0APREFIX%20aat%3A%20%3Chttp%3A%2F%2Fwww.dotnetrdf.org%2FAllAboutThat%2F%3E%0D%0ASELECT%20*%20WHERE%20{%3Fs%20%3Fp%20%3Fo}&timeout=1000&partialResults=True 

をしかし、私はアプリケーションをデバッグする場合partialResultsパラメータが常に不足して行く、私はRequest.QueryString.AllKeys配列も含まれていないことが判明します「partialResults」キーには、「クエリ」キーと「タイムアウト」キーが含まれています。これは引数の順序にかかわらず発生し、引数を異なる順序で配置すると、partialResultsパラメータが消えます。

URLはアプリケーション内のASP.Net汎用ハンドラ用で、アプリケーション内の別のページによって生成され、URLエンコードを使用して各パラメータのデータ値をエンコードしてから、Response.Redirectを使用してハンドラに要求を渡します。 。

パラメータが欠落している理由についてのアイデアはありますか?

答えて

2

partialResultsの代わりにpartialResultzなどを使用し、Request.QueryString.AllKeysをチェックしてみてください。別の名前を使用するときに表示される場合は、アプリケーションの一部がパラメータを抽出しています。

また、少数の人しかアクセスできない場合でも、生のSQLをユーザが編集可能な場所に置くことは絶対に避けてください。私が見ることができる唯一の例外は、ユーザが自分のSQLを書くことになっているアプリケーションがある場合、またはあなただけのためにテストアプリケーションを作成している場合です。

+0

これは実際にはRDFのクエリ言語であるSPARQLであり、SQLがSQLのインジェクション攻撃となるような形でデータを変更することはできません。 〜へ第2段落 – RobV

+0

ああ大丈夫、私は参照してください。 – Blixt

+0

私はこの問題を解決するための答えとしてこれを受け入れています。上記のURLはアプリケーションのURLで処理されていましたが、IHttpModuleとそのフォームのURLは書き換えられました。汎用ハンドラの実際のURLだから、私が追加した他のパラメータとその名前に関係なく、 – RobV

-1

"Default Timeout = 4;"

関連する問題