我很困惑,我想保护经典asp中的一个页面不被Get Method访问。 是否有人可以将数据从其他服务器发布到我的页面?
如果是,请如何检测并仅允许从我的服务器发布。
感谢您的帮助。
答案 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)
您不需要随机数,但使用它意味着同一个用户可以在不同的窗口/标签中打开多个表单,每个表单都可以使用。