我一直在审核访问我们网站的用户访问地址栏的时间,并选择我们网站上另一个以前看过的地址,或者输入他们已经知道的地址。我不认为每个人都试图攻击我们,但他们正试图在复杂的页面中为自己的目的进行导航。
我在我们的团队中创造了这个URL跳跃,这可能是错误的,但它帮助我们保持主题。
我们正在使用ASP.Net版本4.0 VB.Net
我发现很少有关于如何使用标准操作处理此问题的信息,甚至更少来自我们的第三方服务器应用程序供应商。
我发现当URL跳转时,跳转的登陆页面将没有关于URL Referer的信息 -
如果IsNothing(Request.UrlReferrer)= True则......
所以这给了我一个处理问题的钩子。
因为有些时候我不介意用户跳来跳去,所以我已经为他们提供了跳过页面的能力。我还通过检查处理过的那些页面所期望的数据库值来开发了一个解决方案,但这不是完全证明。
有没有人知道ASP.Net的内置处理?或者这是一种问题,除了通过检查预期的数据库值来处理之外别无选择?
答案 0 :(得分:0)
看到其他成员的回复证明了自己并且基于我自己在网上进行了几天的深度搜索,我发现没有明确的asp.net标准处理来解决URL跳跃的问题。在这里我已经坚持使用AS,并扩展了我自己的解决方案。
在调用后的目标网页的Page_Load中
If Not Page.IsPostBack Then
...
End If
我把
If (Session("IsFirstTime") Is Nothing OrElse Session("IsFirstTime") <> True) Then
Session("IsFirstTime") = True
End If
但是在Page_Load的最开始我使用URLReferrer的检查,如果这返回Nothing我检查会话变量
If IsNothing(Request.UrlReferrer) = True Then
If IsNothing(Session("IsFirstTime")) = False Then
...
End If
End If
在所有页面上使用的代码块中,我按照应调用的顺序调用每个页面,以检查是否所有数据库字段都被占用。
Dim pageOne As PageOne = New PageOne()
If pageOne.PageContinuity = False Then
MyBase.ResponseRedirect("~/PageOne.aspx")
Else
Dim pageTwo As PageTwo = New PageTwo()
If pageTwo.PageContinuity = False Then
'PreviousPageNavigation(sender, e)
MyBase.ResponseRedirect("~/PageTwo.aspx")
Else
...
无论哪个页面返回false都是用户将登陆的页面,我在页面点击时使用一条消息告知用户使用网页控件进行是最安全的解决方案,但仍然允许他们继续,允许用户在对我的问题的初步回答中建议的自由。
Public Function PageContinuity()
Try
Dim cv = New CustomValidator
If PolicyHelper.GetDataSetValue("xxx") = "0" Then
cv.IsValid = False
End If
If cv.IsValid = True Then
If PolicyHelper.GetDataSetValue("xxx") = "0" Then
cv.IsValid = False
End If
Else
Return cv.IsValid
End If
Return cv.IsValid
Catch ex As Exception
Return False
End Try
End Function
我还要看一下将会话变量设置为我已识别要加载的页面,因此如果用户刷新屏幕,则页面将正常加载,而不是在此页面之前对所有页面执行检查。链