-1

我有点困惑,我想保护经典 asp 中的一页不被 Get Method 访问。有人可以将数据从另一台服务器发布到我的页面吗?

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

感谢帮助。

4

1 回答 1

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)

You don't need the random number but using it means that the same user can have multiple forms open in different windows/tabs and each one will work.

于 2012-11-13T03:11:46.627 回答