1

クライアントは、クエリ文字列で値を渡しているため、URL を暗号化するよう求めています。暗号化を使用しており、URL を暗号化できます。ただし、既存のコードはquerystring["var"]非常に多くの場所で使用されており、URL が暗号化されているために失敗します。したがって、ページの読み込み時に、URL を復号化する必要があります。を使用してクエリ文字列を復号化して変更するとresponse.redirect、再びクエリ文字列が URL に表示され、悪用される可能性があります。

助けてください。

編集 RESTfull Web サービスについて読んでいました。私はまだ全体の概念を理解していません。これをアプリケーションで使用して、クエリ文字列を非表示にできるかどうか疑問に思います。その場合はお知らせください。

ありがとう。

4

2 に答える 2

1

One way to achieve this with little headache is to decrypt the query string as you currently do, then set its values to some object which can be stored in the session. Storing it in a session variable would be useful if you wanted to exclude this information (hide) from the query string - you'd essentially be passing the data around behind the scenes.

Once stored in session, you would then change your code, such that wherever you use querystring["var"], you will instead refer to the object that has been stored in the session.

Edit

Note, though, that this doesn't have to be relegated to a single value. This object can have multiple properties each representing a query string value:

MyQueryStringObject myQueryStringObject = new MyQueryStringObject(SomeUrl);
//MyQueryStringObject decrypts the query string and assigns the values to properties in its constructor
string abc = myQueryStringObject.abc;
string xyz = myQueryStringObject.xyz;

Now, that uses properties to represent each query string value. You may have tons of them. In that case, you can store the values into some sort of Dictionary or a NameValueCollection perhaps.

There are various ways to achieve this which I think is beyond topic, but, note that the key to all of this, the very essence is to simply decrypt the url on the server (during postback) and save the unencrypted data into a session variable should you want to hide it from the URL.

于 2012-06-13T16:00:52.077 に答える
1

これについてもっと良い方法があります。私は同じ要件を持つクライアントに対処します。このクラスは、セキュリティ スキャンでも急増しています。

Public Class QueryStringManager

    Public Shared Function BuildQueryString(ByVal url As String, ByVal queryStringValues As NameValueCollection) As String
        Dim builder As New StringBuilder()
        builder.Append(url & "?")
        Dim count = queryStringValues.Count
        If count > 0 Then

            For Each key In queryStringValues.AllKeys
                Dim value As String = queryStringValues(key)
                Dim param As String = BuildParameter(key, value)
                builder.Append(param)
            Next

        End If
        Return builder.ToString()
    End Function

    Public Shared Function DeconstructQueryString(ByVal Request As HttpRequest) As NameValueCollection
        Dim queryStringValues As New NameValueCollection

        For Each key In Request.QueryString.AllKeys
            Dim value As String = Request.QueryString(key)
            value = DeconstructParameter(value)
            queryStringValues.Add(key, value)
        Next

        Return queryStringValues
    End Function

    Private Shared Function BuildParameter(ByVal key As String, ByVal value As String) As String
        Dim builder As New StringBuilder()
        builder.Append(key.ToString() & "=")
        value = GetSafeHtmlFragment(value)
        Dim encrypt As Security = New Security()
        value = encrypt.Encrypt(value)
        builder.Append(value)
        builder.Append("&")
        Return builder.ToString()
    End Function

    Public Shared Function DeconstructParameter(ByVal value As Object) As String
        Dim decrypt As New Security()
        value = decrypt.Decrypt(value)
        value = GetSafeHtmlFragment(value)
    End Function


End Class

使用する

Dim nvc As NameValueCollection = New NameValueCollection()
nvc.Add("value", 1)
Dim builtUrl As String = QueryStringManager.BuildQueryString(url, nvc)
Response.Redirect(builtUrl, false);

次に、ページに到達したら、次のように記述します。

Dim decryptedValues As NameValueCollection = QueryStringManager.DeconstructQueryString(Request)

私が使用する理由NameValueCollectionは、それが QueryString と同じ型だからです。クラスを構築して、オブジェクトのプロパティとその値にも基づいてオブジェクトを QueryString に追加できます。これにより、複雑で面倒なロジックがすべてカプセル化されます。

于 2012-06-13T17:29:51.487 に答える