有哪些HTTP“Get”安全最佳实践?
何时应该模糊HTTP Get查询字符串值?
编辑 - 我继承的应用程序对所有查询字符串参数进行了异或“加密”。它还在查询字符串中传递像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
然后,当我将查询字符串传递给弹出窗口或其他页面时,我会实例化相关类,将其存储在会话中,并在查询字符串中传递唯一的ID。
Dim qs as new QSPage1("123456")
Session(qs.ID) = qs
Server.Transfer("Page1.aspx?" & qs.IDQueryString())
'or
CreatePopup("Page1.aspx?" & qs.IDQueryString())
在页面中,我通过获取唯一的ID并引用存储的会话值来访问这些值:
AccountID = CType(Session(Request.QueryString("ID")), QSPage1).AccountID()
当然,这可以放入页面中的函数或类中。
这种方法的一些优点是:
- 除了不相关的ID外,查询字符串中没有任何内容可见。 - 在已有的代码中实现相当容易。
其中一些缺点是:
- 长时间会话可能会积累许多这些查询字符串对象。 - 唯一ID需要在该会话中“真正唯一”。
有人能想到其他的好处/缺点或更好的方法吗(除了重写应用程序)?
编辑 -
感谢所有建议使用HTTPS和POST的人。不幸的是,我正在寻找与仅使用“GET”有关的答案。(除非您可以解释如何在不使用QueryString、Session或Javascript的情况下向弹出窗口发布数据?)