我一直在经历一个开发项目的错误日志,并发现以下错误(名称改为保护有罪无辜) – 提供的防伪标记是为了用户“”,但当前用户是“pipe理员”。 这不是一个特别难以重现的问题, 在login页面打开应用程序 在login之前,在同一台计算机上的同 一个浏览器中打开第二个窗口或标签页至login页面 在第一个窗口login(或者其次,顺序无关紧要) 尝试login剩余的login窗口 堆栈跟踪是 – System.Web.Mvc.HttpAntiForgeryException(0x80004005):提供的防伪标记用于用户“”,但当前用户是“admin”。 在System.Web.Helpers.AntiXsrf.TokenValidator.ValidateTokens(HttpContextBase httpContext,IIdentity标识,AntiForgeryToken sessionToken,AntiForgeryToken fieldToken)System.Web.Helpers.AntiXsrf.AntiForgeryWorker.Validate(HttpContextBase httpContext)在System.Web.Helpers.AntiForgery。在System.Web.Mvc.ValidateAntiForgeryTokenAttribute.OnAuthorization(AuthorizationContext filterContext)上System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters(System.Web.Mvc.Async.AsyncControllerActionInvoker的ControllerContext controllerContext,IList`1filter,ActionDescriptor actionDescriptor)上的Validate()。 c__DisplayClass25.b__1e(AsyncCallback asyncCallback,Object asyncState) login方法签名是 – [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public ActionResult Login(LoginModel model, string returnUrl) { … } 这与Internet“ASP.NET MVC 4 Web应用程序”模板项目中的方法签名完全相同,这表示Microsoft或者觉得ValidateAntiForgeryToken是必需/最佳实践,或者仅仅因为使用了此属性而添加了属性其他地方。 很明显,我没有办法处理这个方法中的问题,因为它没有到达,ValidateAntiForgeryToken是一个预先请求的filter,它在请求到达控制器之前阻塞了它。 在提交表单之前,我可以检查用户是否通过Ajax进行了validation,如果是,则尝试redirect到它们,或者直接删除该属性。 问题是这个 – 我知道这个标记是devise来防止来自另一个站点(CSRF)的请求,当用户已经对你的站点进行了authentication的时候,所以在这个基础上把它从一个定义将被使用的表单通过未经authentication的用户 ? 据推测,这个实例中的属性旨在减轻为您的应用程序提供虚假login表单的恶意行为者(尽pipe在抛出exception的时候,用户可能已经input了他或她将要logging的详细信息,但可能会提醒他们是错的)。 否则,从外部网站向表单提交不正确的凭证将导致与网站本身的结果完全相同的结果? 我不是依靠客户端validation/卫生来清理潜在的不安全的input。 有其他开发者遇到这个问题(或者我们有非凡的创造性的用户),如果是的话,你是如何解决/缓解它? 更新:这个问题仍然存在于MVC5,完全故意,现在与错误消息“所提供的防伪令牌是针对不同的基于声明的用户比当前用户”。 当使用默认的模板和身份提供者。 Microsoft Developer […]
在使用ASP.Net Forms Authentication时,我遇到了.ASPXAUTH cookie。 我有几个问题: 这个cookie的目的是什么? 这个cookie的位置是什么?
正如我一直在testing网站,我发现reCAPTCHA越来越难以阅读。 这只是我还是别人也有这个问题呢? 与此同时,今天早上我有一个用户抱怨在他们的reCAPTCHA里收到了一个Bristish的磅字符。 当然用户不知道该怎么做,即使我有消息指出他们可以点击重载/刷新图标来获得新的validation码。 不幸的是,这个实现是在60岁以上的人经常使用的网站上,所以更复杂或者更令人困惑的CAPTCHA是一个问题,但是这个网站仍然收到很多试图发送垃圾邮件的人。
有没有一种方法来检查给定的path是否是完整path? 现在我要做这个: if (template.Contains(":\\")) //full path already given { } else //calculate the path from local assembly { } 但是一定要有更优雅的方式来检查这个吗?
我有一个情况,我正在上传用户从他的本地文件系统中select的图像。 我的表格在我看来,基本上有两个提交button。 一个用于正常提交表单,并执行所有的validation。 第二只是上传图像,在这种情况下,我不想validation。 我设法closures客户端validation,通过给我的“上传图像”提交button一个类的值“样式名称取消”,所以 <input type="submit" name="UploadImageButton" value="Upload Image" class="style-name cancel" /> 现在,当我回发时,我的模型有一个属性UploadImageButton,单击此button时,它将填充此属性(input的名称与Property相匹配)。 这样,我知道表单是由我的真正的提交button还是由UploadImageButton提交。 我的问题是这个…如何closuresServerSidevalidation? 我不希望用户单击此button时显示validation摘要信息。 我知道你可以使用这个添加自定义模型错误 ModelState.AddModelError("{key}", "{error msg}"); 我正在寻找一种方法来删除模型错误。 这可能吗? 编辑: 这是我想出来的: foreach (var key in ModelState.Keys.ToList().Where(key => ModelState.ContainsKey(key))) { //ModelState.Remove(key); //This was my solution before ModelState[key].Errors.Clear(); //This is my new solution. Thanks bbak }
我有一个表格,可以select通过Facebook连接预先填充。 一旦用户连接,他们的名字和电子邮件会自动填入。问题是,这不会触发远程validation,以检查电子邮件是否已经存在。 有没有办法我可以单独调用该字段的validation? 就像是: $('#email-field-only').validate() 会是想法。 通过文档search,没有运气。
给定一个信用卡号码,没有额外的信息,什么是最好的方式在PHP来确定它是否是一个有效的数字? 现在我需要一些能够与美国运通,Discover,MasterCard和Visa合作的东西,但是如果它也可以与其他types一起使用,这可能会有所帮助。
这在我之前没有发生,但由于某种原因,客户端和服务器端validation事件都没有被触发: <asp:TextBox ID="TextBoxDTownCity" runat="server" CssClass="contactfield" /> <asp:CustomValidator ID="CustomValidator2" runat="server" EnableClientScript="true" ErrorMessage="Delivery Town or City required" ClientValidationFunction="TextBoxDTownCityClient" ControlToValidate="TextBoxDTownCity" OnServerValidate="TextBoxDTownCity_Validate" Display="Dynamic" > </asp:CustomValidator> 服务器端validation事件: protected void TextBoxDTownCity_Validate(object source, ServerValidateEventArgs args) { args.IsValid = false; } 客户端validation事件: function TextBoxDCountyClient(sender, args) { args.IsValid = false; alert("test"); } 我认为至less在服务器端validation会触发,但不。 这从来没有发生过我。 这真的让我难住。 我看着输出,ASP.NET正在识别客户端function: ASP.NET JavaScript输出: var ctl00_ctl00_content_content_CustomValidator2 = document.all ? document.all["ctl00_ctl00_content_content_CustomValidator2"] […]
在C#中有没有一种方法来查看一个string是否是Base 64编码,而不是仅仅试图转换它,看看是否有错误? 我有这样的代码: // Convert base64-encoded hash value into a byte array. byte[] HashBytes = Convert.FromBase64String(Value); 我想避免“Base-64string中的无效字符”exception,如果该值不是有效的base 64string。 我想检查并返回false而不是处理exception,因为我期望有时这个值不会是一个基本的64string。 使用Convert.FromBase64String函数之前有什么方法可以检查吗? 谢谢! 更新: 感谢您的所有答案。 这是一个你可以使用的扩展方法到目前为止,似乎确保你的string将传递Convert.FromBase64String没有例外。 .NET似乎忽略所有尾随空格,当转换为基地64,所以“1234”是有效的,所以是“1234” public static bool IsBase64String(this string s) { s = s.Trim(); return (s.Length % 4 == 0) && Regex.IsMatch(s, @"^[a-zA-Z0-9\+/]*={0,3}$", RegexOptions.None); } 对于那些想testingvs捕捉和exception性能的人来说,在大多数情况下,对于这个64位的东西来说,检查比捕捉exception要快,直到达到一定的长度。 长度越小,速度越快 在我非常不科学的testing中:对于字符长度为10万到11万次的10000次迭代,先testing快2.7倍。 对于1000个字符长度的迭代,1-16个字符对于总共16000个testing来说是10.9倍。 我相信有一个地方,用基于exception的方法进行testing会更好。 我只是不知道那是什么。
我正在尝试validation一个(void)方法在一个DAO中被调用 – 我正在使用一个提交点发送一个结果列表,重置列表并继续。 假设我在列表中有4件事,并且我有一个提交点为1,我期望“发送”方法被调用4次。 我可以通过编写来validation该方法被调用一次 Mockito.verify(mock).send() 它通过..但我想validation次数被称为。 我会这样想的 Mockito.verify(mock.send(), times(4)) 将是足够的,但它说,参数是不正确的validation。 顺便说一句,如果我将Mockito.verify(mock).send()更改为Mockito.verify(mock.send())或Mockito.verify((mock).send())我得到相同的错误。 对此有何想法?