4

Каков наилучший способ обфускации URL-адресов, созданных в динамических данных?Скремблирование URL-адресов для динамических данных

например \ Products \ List.aspx? ProductID = 2 может стать

\ Продукты \ List.aspx? Х = UHJvZHVjdElkPTI =

где "ProductID = 2" является базой 64 кодируются для предотвращения случайного слежка на

\ Продукты \ List.aspx? ProductID = 3

\ Продукты \ List.aspx? ProductID = 4

и т.д ...?

Я, вероятно, придется наследовать от существующего объекта и переопределить некоторые функции Вопрос, какой именно объект и какие функции

GetActionPath объекта Metamodel кажется интересным, но как делает DynamicRoute «{таблицы}/{Action} .aspx "play in in ...

Сейчас на сайте Asp.net 1.1 я использую пользовательскую реализацию следующего кода. http://www.mvps.org/emorcillo/en/code/aspnet/qse.shtml Это HTTPModule, который использует регулярное выражение для перезаписи всех повторов, а также с отражением изменяет коллекцию Querystring с декодированными значениями.

Так где же крюк влияет на изменение.

+0

Что именно вы спрашиваете - вы используете HTTPModule в качестве крючка. Вы хотите выбросить это и сделать это где-то в другом месте или вы хотите изменить способ шифрования строк запроса? – Hogan

+0

HTTPModule будет работать, но никогда не доверял регулярному выражению, которое оно использовало для обнаружения запросов. Я хочу, чтобы сделать изменение в динамическом веб-сайте данных, так что URLS не догадываются. На динамическом веб-сайте все URL-адреса генерируются «за кулисами». Мне нужно найти способ внести изменения ... После некоторого чтения мне кажется, что мне придется наследовать от DynamicDataRoute, я думаю ..... – ggonsalv

+0

Хмм. Динамические данные выглядят как другое имя для URL-адресов MVC. Так что не должен быть ваш пример/Products/List/3 not /Products/List.aspx?ProductID=3? – Hogan

ответ

2

Я нашел решение

С советами, я реализовал маршрут, который наследуется от DynamicDataRoute.

Перечисленные методы были GetVirtualPath и GetRouteData.

Вот global.asax страница

routes.Add(New EncodedDynamicDataRoute("{table}/{action}.aspx") With { _ 
.Defaults = New RouteValueDictionary(New With {.Action = PageAction.List}), _ 
.Constraints = New RouteValueDictionary(New With {.Action "List|Details|Edit|Insert"}), _ 
.Model = model}) 

Вот закодированные DynamicDataRoute.

Imports System.Web.DynamicData 
Imports System.Web.Routing 
''' <summary> 
''' The purpose of this class to base 64 encode the querystring parameters. 
''' It converts the keys to base64 encoded and back. 
''' </summary> 
Public Class EncodedDynamicDataRoute 
Inherits DynamicDataRoute 
Public Sub New(ByVal url As String) 
    MyBase.New(url) 
End Sub 

Public Overloads Overrides Function GetRouteData(ByVal httpContext As HttpContextBase) As RouteData 
    Dim routeData As RouteData = MyBase.GetRouteData(httpContext) 
    If Not (routeData Is Nothing) Then 
     DecodeRouteValues(routeData.Values) 
    End If 
    Return routeData 
End Function 
Private Sub EncodeRouteValues(ByVal routeValues As RouteValueDictionary) 
    Dim tableName As Object 
    If Not routeValues.TryGetValue("table", tableName) Then 
     Return 
    End If 
    Dim table As MetaTable 
    If Not Model.TryGetTable(DirectCast(tableName, String), table) Then 
     Return 
    End If 
    Dim strOutput As New StringBuilder 
    Dim val As Object 
    For Each column As MetaColumn In table.PrimaryKeyColumns 
     If routeValues.TryGetValue(column.Name, val) Then 
      strOutput.Append(column.Name & Chr(254) & val & Chr(255)) 
      routeValues.Remove(column.Name) 
     End If 
    Next 
    Dim out As String = (Convert.ToBase64String(Encoding.ASCII.GetBytes(strOutput.ToString))) 
    If routeValues.ContainsKey("x") Then 
     routeValues.Item("x") = out 
    Else 
     routeValues.Add("x", out) 
    End If 
End Sub 
Public Overloads Overrides Function GetVirtualPath(ByVal requestContext As RequestContext, ByVal values As RouteValueDictionary) As VirtualPathData 
    EncodeRouteValues(values) 
    Return MyBase.GetVirtualPath(requestContext, values) 
End Function 
Private Sub DecodeRouteValues(ByVal routeValues As RouteValueDictionary) 
    Dim tableName As Object 
    If Not routeValues.TryGetValue("table", tableName) Then 
     Return 
    End If 
    Dim table As MetaTable 
    If Not Model.TryGetTable(DirectCast(tableName, String), table) Then 
     Return 
    End If 
    Dim enc As New System.Text.ASCIIEncoding() 
    Dim val As Object 
    If routeValues.TryGetValue("x", val) AndAlso val <> "AAA" Then 
     Dim strString As String = enc.GetString(Convert.FromBase64String((val))) 
     Dim nameValuePairs As String() = strString.Split(Chr(255)) 
     Dim col As MetaColumn 
     For Each str11 In nameValuePairs 
      Dim vals() As String = str11.Split(Chr(254)) 
      If table.TryGetColumn(vals(0), col) Then 
       routeValues.Add(val(0), col) 
      End If 
     Next 
    End If 
    End Sub 
    End Class 
1

Вот как я это сделал:

Я создал 4 функции в модуле:

public static string EncryptInt(int val) 
public static int DecryptInt(string val) 
public static string DecryptStr(string str) 
public static string EncryptStr(string source) 

Когда я хотел, чтобы создать URL я сделал что-то вроде этого:

string.Format(@"\path\file.aspx?ID={0}&name={1}",encrypt.EncryptInt(inID),encrypt.EncriptStr(inName)); 

Когда мне захотелось получить результаты, я бы назвал функцию Decrypt на полученном параметре.

Я использовал два типа, потому что он добавил уровень безопасности системы в систему, но вы могли бы просто использовать его со строками, а затем называть int.Parse() по мере необходимости.

Ответит ли это на ваш вопрос?

Для динамических данных Microsoft Я считаю, что крючки будут найдены в коде для страниц шаблона.

+0

Вот ссылка на образец http://mattberseth.com/blog/2008/08/aspnet_dynamic_data_simple_5_t.html unfotrunately I не может найти живую демонстрацию – ggonsalv

+0

Уверен, что это тоже сработает с этой системой, вам просто нужно редактировать шаблоны страниц для шифрования и дешифрования всякий раз, когда они ищут/получают доступ к идентификатору. – Hogan

+0

К сожалению, код, создающий URL-адрес, скрыт за GetActionPath объекта Metamodel. Я все еще не понимаю, как параметры добавляются в строку для создания всего URL-адреса. – ggonsalv

 Смежные вопросы

  • Нет связанных вопросов^_^