无效的回发或回调参数,发布到其他页面

时间:2013-03-14 18:08:38

标签: asp.net webforms

背景

我正在开发一个非常古老的项目,其中标题是UserControl,标签,链接,按钮及其上的所有内容都添加了output.Write。它是一个非常大的文件,需要让它保持原样。

功能

我正在创建一个div,当用户点击链接转到更安全的一方时要求输入密码,我执行ajax请求,如果密码有效则返回令牌,我将此令牌设置为隐藏字段,然后单击按钮将该令牌提交到其他页面。

问题:

我正在使用输出生成。写表单,输入和按钮,当我尝试提交时,我得到无效的回发或回调参数。

这就是我生成它的方式:

        mystringbuilder.Append("<div id='blackout' style='display: none'>")
        mystringbuilder.Append("</div>")
        mystringbuilder.Append("<div id='adminPassword' style='display: none;' class='popupcont'>")
        mystringbuilder.Append("   <a href='#' onclick=""return closeDiv('adminPassword','',0);"" class=""pclose""></a>")
        mystringbuilder.Append("  <br />")
        mystringbuilder.Append("Password: <input type='password' name='txtPassword' id='txtPassword'/><br>")
        mystringbuilder.Append("<button type='button' id='btnLogin'> Login </button>")
        mystringbuilder.Append(String.Format(" <input style='display:none' type='text' name='hidUsername' id='hidUsername' value='{0}'/>", User.UserName))
        mystringbuilder.Append(" <FORM action='/tokenLogin.aspx' method='post'>")
        mystringbuilder.Append(" <input style='display:none' type='text' name='hidAuthToken' id='hidAuthToken'/>")
        mystringbuilder.Append("<button type='submit' style='display:none' id='btnTransfer'> Transfer </button>")
        mystringbuilder.Append("</FORM>")
        mystringbuilder.Append("</div>")

我尝试添加此功能,但我仍然得到相同的结果:

 Page.ClientScript.RegisterForEventValidation("hidAuthToken")

 Page.ClientScript.RegisterForEventValidation("btnTransfer")

我可以尝试一下吗?我无法禁用验证,因为这是在标题中,我将禁用所有页面。

1 个答案:

答案 0 :(得分:1)

任何类型的工作都会让你感受到漏洞,但我最喜欢的是虚拟按钮。

您可以在页面上放置ASP按钮,并将其显示设置为无。然后你劫持它的帖子,以便你总是有一个有效的回发事件。我一直这样做,以便在网格中动态创建按钮。

我的假设是您的登录按钮执行ajax调用,然后触发提交按钮的单击事件。这就是我要说出这个答案的方式。

所以,如果你放置:

<asp:button runat="server" ID="btnPhantom" UseSubmitBehavior="false" Visible="false" />

在您的页面上,然后您将修改您的代码:

mystringbuilder.Append(string.format"<input type='button' style='display:none' id='btnTransfer' value='Transfer' onclick='javascript: {0}'/>", Page.ClientScript.getPostBackEventReference(btnPhantom,null) )

然后在您的页面加载中,您需要注意幻像按钮的事件:

C#

String tEventTarget = Request("__EVENTTARGET).ToString();
if(tEventTarget == btnPhantom.UniqueID){
    //read input from request and redirect
}

VB

Dim tEventTarget as String = Request("__EVENTTARGET).ToString

If tEventTarget = btnPhantom.UniqueID Then
   //read input from request and redirect 
End IF

我一直都在为页面无法识别的动态控件执行此操作。这有点像黑客,就像我说它可能不是最安全的方法,但是然后在文本框中存储纯文本授权令牌也不安全;)。