HTTP'获取'安全性

use*_*755 4 get http

什么是HTTP'获取'安全最佳实践?

HTTP Get get查询字符串值何时应该被遮挡?

编辑 - 我继承的应用程序具有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
Run Code Online (Sandbox Code Playgroud)

然后,对于应用程序中的每个页面,我将创建一个具有每个查询字符串值的属性的派生类.


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
Run Code Online (Sandbox Code Playgroud)

然后当我将查询字符串传递给弹出窗口或其他页面我实例化相关类时,将其存储在会话中并在查询字符串上传递唯一ID


Dim qs as new QSPage1("123456")
Session(qs.ID) = qs
Server.Transfer("Page1.aspx?" & qs.IDQueryString())
'or
CreatePopup("Page1.aspx?" & qs.IDQueryString())
Run Code Online (Sandbox Code Playgroud)

在页面中,我通过提取唯一ID并引用存储的会话值来访问值:


AccountID = CType(Session(Request.QueryString("ID")), QSPage1).AccountID()
Run Code Online (Sandbox Code Playgroud)

当然,可以将其放入页面中的函数或类中.

这种方法的一些好处是:

  • 除了不相关的ID之外,查询字符串都不可见.
  • 在现有代码中实现起来相当容易.

一些缺点是:

  • 长会话可以累积许多这些查询字符串对象
  • 唯一ID需要为该会话"真正独特"

任何人都可以想到任何其他好处/缺点或更好的方法(除了重写应用程序)?

编辑 -

感谢所有使用HTTPS和POST的人.不幸的是,我正在寻找与仅使用'GET'有关的答案.(除非你能解释如何在不使用QueryString,Session或Javascript的情况下将数据发布到弹出窗口?)

Jef*_*eff 7

如果您有任何值得模糊的内容,那么我建议您使用HTTPS并转储HTTP.

通常,我不会在查询字符串中放置与客户,供应商或订单标识符相关的任何内容.但那就是我.