1

我正在为我在 VB.NET 中的应用程序编写一个白名单。我正在使用 HttpWebRequest 方法和 HttpWebResponse。

如果白名单主机关闭,则绕过白名单,任何存在漏洞的人都可以使用该程序。

Public Function GetWhitelist(ByVal PageURL As String) As String
        Dim S As String = ""
        Try
            Dim Request As HttpWebRequest = WebRequest.Create("WHITELIST URL HERE")
            Dim Response As HttpWebResponse = Request.GetResponse()
            Using Reader As StreamReader = New StreamReader(Response.GetResponseStream())
                S = Reader.ReadToEnd
            End Using
        Catch ex As Exception
            Debug.WriteLine("Start Program Error. Handle:0")
        End Try
        Return S
    End Function

如果网站关闭,我想给用户一个错误,有什么想法吗?问候。

4

2 回答 2

2

你的错误情况是什么?仅此功能并不能防止发生异常时发生任何事情。该函数仍然退出并返回一个字符串。因此,任何消费代码都必须寻找错误条件并相应地处理它们。

如果请求失败,您应该有意义地处理异常。我脑海中浮现的两个想法包括:

1)让异常在堆栈中冒泡:

Public Function GetWhitelist(ByVal PageURL As String) As String
    Dim S As String = ""
    Dim Request As HttpWebRequest = WebRequest.Create("WHITELIST URL HERE")
    Dim Response As HttpWebResponse = Request.GetResponse()
    Using Reader As StreamReader = New StreamReader(Response.GetResponseStream())
        S = Reader.ReadToEnd
    End Using
    Return S
End Function

这将尝试联系主机,如果尝试失败,则抛出异常而不是返回字符串。

2)抛出一个自定义异常:

Public Function GetWhitelist(ByVal PageURL As String) As String
    Dim S As String = ""
    Try
        Dim Request As HttpWebRequest = WebRequest.Create("WHITELIST URL HERE")
        Dim Response As HttpWebResponse = Request.GetResponse()
        Using Reader As StreamReader = New StreamReader(Response.GetResponseStream())
            S = Reader.ReadToEnd
        End Using
    Catch ex As Exception
        Debug.WriteLine("Start Program Error. Handle:0")
        Throw New SomeCustomException(String.Format("Unable to contact host: {0}", PageURL), ex)
    End Try
    Return S
End Function

这将提供更有针对性的异常,而不是来自响应阅读器的任何异常,将为日志记录和分析提供有关错误的有用运行时信息(即 的运行时值PageURL),并朝着隐藏外部代码的实现细节迈出了一步这个对象的(因为该代码并不真正关心HttpWebRequestand HttpWebResponse,它只是想知道 URL 是否正确)。

请记住,抛出异常是一个完全可以接受的函数退出路径。它并不总是必须返回一个值。异常是指示错误条件的适当方式。但是,您当前的实现“吞下了”异常,并且没有向消费代码提供任何错误的指示。相反,它返回一个“神奇值” String.Empty,消费代码可能会或可能不会忽略该值。

于 2012-12-18T19:23:51.590 回答
0

更改您的异常处理程序。正确的方法是尝试请求并在失败时处理异常。

于 2012-12-18T19:18:53.787 回答