web-dev-qa-db-ja.com

安全なクエリ文字列パラメータ

シックボックスjQuery コンポーネントを使用してポップアップページを開くアプリケーションがあります。

そして、私はこのようにクエリ文字列で私のパラメータを渡します:

 <a id="btnShowPopup6" runat="server" class="thickbox" href='<%#"RollUp.aspx?TCode="+Eval("Code")+"...."+"&AR=1"+"&TBiframe=true&height=530&width=750"%>'>

これが唯一の選択肢です。このメソッドでセッション変数を使用したり、パラメーターをポストしたりすることはできないため、クエリ文字列を使用するだけです。

クエリ文字列をセキュリティで保護して、ユーザーが操作できないようにするにはどうすればよいですか?クエリ文字列を暗号化する最良の方法は何ですか?

6

ユーザー提供の値をeval()呼び出しに入れることは恐ろしい考えです。これは本質的にリモートコード実行の脆弱性に相当するためです。コードが次のようになっているとしましょう...

var data = eval(webRequest.Parameters["p"]);

これをpパラメータに入れると想像してみてください...

System.IO.File.Delete(@"c:\windows\system32\ntoskrnl.exe");

おっと!カーネルを削除しました。

ここではエスケープをいじる必要はありません-これは根本的に壊れた概念です。

パラメータの暗号化は、物事を複雑にするだけです。正しいアプローチに進み、言語が設計されているようにセッション変数を使用します。

pdate:明確にするために、私は一般的な意味でeval()について話しています。 C#のデータコントローラーでEvalバインディングメソッドを使用している場合、ユーザーパラメーターがそこにない限りOKでなければなりません。 SQLインジェクションを必要とせずに、コードがデータベースから任意の値をダンプする可能性があります。

5
Polynomial