【发布时间】:2012-10-31 22:34:33
【问题描述】:
我有点困惑,我想保护经典 asp 中的一个页面不被 Get 方法访问。 有人可以将数据从另一台服务器发布到我的页面吗?
如果是,如何检测并只允许从我的服务器发帖。
感谢您的帮助。
【问题讨论】:
标签: asp-classic http-headers http-post http-get
我有点困惑,我想保护经典 asp 中的一个页面不被 Get 方法访问。 有人可以将数据从另一台服务器发布到我的页面吗?
如果是,如何检测并只允许从我的服务器发帖。
感谢您的帮助。
【问题讨论】:
标签: asp-classic http-headers http-post http-get
如果您当前正在使用 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)
您不需要随机数,但使用它意味着同一用户可以在不同的窗口/选项卡中打开多个表单,并且每个表单都可以工作。
【讨论】: