来自其他服务器的经典ASP HTTP发布

时间:2012-11-12 13:42:32

标签: asp-classic http-headers http-post http-get

我很困惑,我想保护经典asp中的一个页面不被Get Method访问。 是否有人可以将数据从其他服务器发布到我的页面?

如果是,请如何检测并仅允许从我的服务器发布。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

如果您当前正在使用Request(“ParameterName”)来检索参数,那么您应该更改为Request.Form(“ParameterName”),该参数只有在POST时才会获取参数。

或者,您可以从Request.ServerVariables集合中查找用于访问页面的方法,如果不是POST,则结束脚本。这是一个例子:

If Request.ServerVariables("REQUEST_METHOD") <> "POST" Then Response.End

我注意到您还说您只想接受来自服务器的帖子。上述更改仍允许将其他网页设置为POST到您的页面。如果您想确保只有您的网页可以发布,那么您需要添加更多保护。这是一种做法。

1)渲染表单时,创建一个随机数并创建一个由随机数命名的会话变量,并带一个值以便稍后检查。

Randomize
strVarName = Int((999999 - 100000 + 1) * Rnd() + 100000)
Session(strVarName) = "Authorised"

2)在表单中添加一个隐藏字段,其中包含随机数的值。

<input type="hidden" name="varname" value="<%= strVarName %>" />

3)在处理已发布表单的脚本中获取隐藏字段的值。

strVarName = Request.Form("varname")

4)检查会话变量是否已设置且值为True。

If Session(strVarName) <> "Authorised" Then
    'Failed! Either show the user an error message or stop processing
    Response.End
End If

5)删除会话变量,以便不能重新提交相同的表单。

Session.Items.Remove(strVarName)

您不需要随机数,但使用它意味着同一个用户可以在不同的窗口/标签中打开多个表单,每个表单都可以使用。