好的,首先我想说我不知道我在做什么。
我的MVC项目中有几个页面经常会从另一个页面中受到攻击。例如,我的某个模型的编辑页面可以来自详细信息页面或Crud Index页面上的管理链接。完成编辑后,我想将用户送回正确的位置。考虑到我不理解Identity returnUrl的东西,我编写了自己的方法来创建两个cookie,最终我可能不需要两个,但是现在我有两个,这样我就可以监视它们在Chrome F12工具中更新并确保每个时间我在Controller Action中使用这个方法它正在做正确的事情。我也想说我也没有对此进行任何测试。我的测试是反复试验和Chrome F12。
以下是代码:
private void LastActionHero()
{
string lastUrl = null;
var currentUrl = Request.Url.LocalPath;
if (Request.Cookies["currentUrl"] != null)
{
lastUrl = Request.Cookies["currentUrl"].Value;
}
if (lastUrl != currentUrl)
{
var current = new HttpCookie("currentUrl", currentUrl)
{Expires = DateTime.Now.AddDays(1)};
Response.Cookies.Set(current);
var previous = new HttpCookie("lastUrl", lastUrl)
{ Expires = DateTime.Now.AddDays(1) };
Response.Cookies.Set(previous);
}
}
问题: 有没有更好的方法来做到这一点,这样安全吗?该网站的一部分不在登录后面。那有关系吗?
您对我应该如何实现这一点有任何想法吗?
我还在研究如何使用它。
以下是Cookie的屏幕截图,它们似乎工作正常我在使用该方法的3或4个操作中来回多次,这里显示了正确的最后2个网址:
答案 0 :(得分:1)
只要同一会话中的用户一次只打开一个页面,您的“cookie方法”就会起作用。如果用户输入这样的页面,例如在一个标签中,然后在从另一个标签离开那个标签之前它将不再起作用。
此问题的一个解决方案是向该页面提供“return-url”。因此,您可以调用/Edit/1
之类的/Edit/1?returnUrl=CurrentUrl
来代替{{1}},然后在编辑页面上使用该参数,以便在编辑完成后返回正确的页面。