Каковы некоторые рекомендации по безопасности HTTP 'Get'?
Когда следует скрывать значения HTTP Getstring?
Редактировать - Приложение, которое я унаследовал, имеет все параметры строки запроса XOR «зашифрованы». Это также передает вещи как AccountID в строке запроса. Поэтому мне интересно, если это хорошие практики и как бы я исправить эти вещи, если это не так.
Редактировать -
Одним из методов, который я мог бы использовать для решения этой проблемы, было бы создание базового класса (это просто псевдокод):
public mustinherit class QSBase
public shared Unique as long = 0
private m_ID as string
public readonly property ID
get
return m_ID
end get
end property
public sub new()
m_ID = Unique 'somehow get a unique value for this querystring
Unique += 1
end sub
public function IDQueryString() as string
return "ID=" & m_ID
end function
end class
Затем для каждой страницы в приложении я бы создал производный класс со свойствами для каждого значения строки запроса.
public class QSPage1
inherits QSBase
private m_AccountID as string
public readonly property AccountID as string
get
return m_AccountID
end get
end property
public sub new(byval _AccountID as string)
m_AccountID = _AccountID
end sub
end class
Затем, когда я передаю строку запроса всплывающим окнам или другим страницам, я создаю экземпляр соответствующего класса, сохраняю его в сеансе и передаю уникальный идентификатор в строке запроса
Dim qs as new QSPage1("123456")
Session(qs.ID) = qs
Server.Transfer("Page1.aspx?" & qs.IDQueryString())
'or
CreatePopup("Page1.aspx?" & qs.IDQueryString())
На странице я получаю доступ к значениям, извлекая уникальный идентификатор и ссылаясь на сохраненное значение сеанса:
AccountID = CType(Session(Request.QueryString("ID")), QSPage1).AccountID()
Конечно, это можно поместить в функцию или класс на странице.
Некоторые преимущества этого подхода:
- Ни одна из строк запроса не видна, кроме несвязанного идентификатора.
- Это довольно легко реализовать в уже существующем коде.
Некоторые недостатки:
- Длинный сеанс может накапливать многие из этих объектов строки запроса
- Уникальный идентификатор должен быть "действительно уникальным" для этого сеанса
Кто-нибудь может подумать о каких-либо других преимуществах / недостатках или о лучшем способе сделать это (кроме переписывания приложения)?
Редактировать -
Спасибо всем, кто говорит, использовать HTTPS и POST. К сожалению, я ищу ответы, которые связаны только с использованием GET. (Если вы не можете объяснить, как публиковать данные во всплывающих окнах без использования QueryString, Session или Javascript?)