背景
我正在开发一个非常古老的项目,其中标题是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")
我可以尝试一下吗?我无法禁用验证,因为这是在标题中,我将禁用所有页面。
答案 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
我一直都在为页面无法识别的动态控件执行此操作。这有点像黑客,就像我说它可能不是最安全的方法,但是然后在文本框中存储纯文本授权令牌也不安全;)。