【问题标题】:Classic ASP HTTP Post from another server来自另一台服务器的经典 ASP HTTP Post
【发布时间】:2012-10-31 22:34:33
【问题描述】:

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

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

感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    如果您当前正在使用 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)
    

    您不需要随机数,但使用它意味着同一用户可以在不同的窗口/选项卡中打开多个表单,并且每个表单都可以工作。

    【讨论】:

    • 非常感谢约翰。我不相信,所以任何人都可以在网络上发布一些东西?所以如果你在网页中删除,一些恶意代码可以做同样的事情吗? IIS 中是否有任何配置可以禁用它?
    • 是的,除非有保护措施,否则任何人都可以 POST 到另一台服务器上的表单。我认为 IIS 中没有任何设置可以防止这种情况(除了通过禁用匿名身份验证来保护密码)。有很多方法可以防止它。您可以使用某种形式的用户身份验证,仅允许授权用户访问删除或更新数据的脚本。
    • 我无法进行身份验证,因为它是一个互联网流行网站。因此,例如,我有一个页面,人们可以在其中发布他们的 cmets,除非我使用您的解决方案,否则恶意的人可以批量执行 cmets。我记得当我年轻时(大约 13 岁),人们习惯于使用 GET 和查询字符串参数发送数据,所以当搜索引擎抓取网站时,会有很多删除插入,没有人知道发生了什么。我一直坚信帖子是解决这个问题的方法,谢谢 Jhon
    猜你喜欢
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 2023-03-24
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 2012-05-10
    相关资源
    最近更新 更多