Расшифровка строки зашифрованного запроса - PullRequest
0 голосов
/ 04 января 2012

Я использую метод, описанный в следующем LINK , и использую следующий код для шифрования:

'Page1.aspx    
Protected Sub butEncrypt_Click(sender As Object, e As EventArgs) Handles butEncrypt.Click
    Dim QueryString As String = "type=Int&pk=" & _primaryKey
    QueryString = Tools.encryptQueryString(QueryString)
    Response.Redirect(/SearchResults.aspx?Val=" & QueryString)
End Sub

, а затем, наконец, дешифрую:

        'SearchResults.aspx
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If (Not IsPostBack) Then
         If Not String.IsNullOrEmpty(HttpContext.Current.Request(CIAppGlobals.GlobalVar.Val)) Then
            Dim qs As String = Request.QueryString(CIAppGlobals.GlobalVar.Val)
            qs = Tools.decryptQueryString(qs)

            Dim Values As String() = qs.Split(CChar("&"))

            _imageType = String.Empty
            _primaryKey = 0

            For Each value As String In Values
               Dim data As String() = value.Split(CChar("="))

               Select Case data(0).ToUpper
                  Case "TYPE"
                     _imageType = data(1)
                  Case "PK"
                     _primaryKey = CInt(data(1))
               End Select
            Next
            Else
               _imageType = HttpContext.Current.Request("type")
               _primaryKey = CInt(HttpContext.Current.Request("pk"))
         End If
    End If
   End Sub

У меня вопрос: должен ли я использовать другой метод для извлечения декодированных значений строки запроса, отличных от того, что я делаю?Заранее благодарим за ваши конструктивные ответы.

Решение

Изучив ответ Дарина, я решил включить его в свой проект, вот мой обновленный код:

'Page1.aspx    
Protected Sub butEncrypt_Click(sender As Object, e As EventArgs) Handles butEncrypt.Click
  Dim query = HttpUtility.ParseQueryString(String.Empty)
  query("type") = "Int"
  query("pk") = CStr(_primaryKey)

  Dim QueryString As String = Tools.encryptQueryString(query.ToString())
  Response.Redirect(/SearchResults.aspx?Val=" & QueryString)
End Sub

Я все еще хочу зашифровать строку запроса, потому что хочу запретить пользователям изменять значения строки запроса вручную

1 Ответ

1 голос
/ 04 января 2012

Во-первых, вы неправильно строите строку запроса.Вы используете конкатенации строк и неправильно их кодируете.Что если _primaryKey содержит символы & или =?Вы можете использовать метод ParseQueryString для правильного построения строки запроса:

Dim query = HttpUtility.ParseQueryString(String.Empty)
query("type") = "Int"
query("pk") = _primaryKey
Dim queryString = query.ToString()

Этот же метод можно использовать для анализа декодированной строки запроса:

Dim values = HttpUtility.ParseQueryString(qs)
Dim type = query("type")
Dim primaryKey = query("pk")
' work with the type and primaryKey values

Никогда не используйте конкатенации строк и расщепление при работе с URL.Всегда используйте правильный инструмент для правильной работы.

Это касается создания / анализа строк запроса.Что касается шифрования / дешифрования значений, вы ничего не показали / не сообщили нам о используемом классе Tools, поэтому я не могу дать вам никаких конструктивных комментариев по этому поводу.

Вы знаете,что лучшее шифрование - это никогда не отправлять фактическое значение клиенту.Таким образом, вы можете сохранить его в некотором внутреннем хранилище на сервере, а затем использовать уникальный идентификатор в URL.Этот идентификатор может быть использован на целевой странице для получения исходного значения.Таким образом, вам не нужно ничего шифровать / дешифровать.

...