RegularExpressionValidator 是否足够可靠,可以防止 SQL 注入?

Is a RegularExpressionValidator reliable enough to protect against SQL injections?

提问人:BYU 提问时间:1/14/2021 最后编辑:BYU 更新时间:1/15/2021 访问量:82

问:

我正在使用一个工具,该工具有助于了解我的代码的哪些部分可以进行SQL注入,并且该工具表明以下代码中存在漏洞:

Aspx 部分:

<asp:FileUpload ID="fuXlsWorkflow" runat="server" EnableViewState="true" />
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="<%$ Resources:Message,ERR_FORMAT%>"ValidationExpression="^([a-zA-Z]|\x20|\x2E|:|\\|[0-9])*\.(xls|xlsx)$" ControlToValidate="fuXlsWorkflow" />

aspx.vb

If Not fuXlsWorkflow.FileName.Equals("") Then
    If xlsFile Is Nothing Or Not fuXlsWorkflow.FileName.Equals(xlsFile) Then
        xlsFileTempPath = SantEnv.TempFolder & " " & fuXlsWorkflow.FileName
        fuXlsWorkflow.SaveAs(SantEnv.TempFolder & " " & fuXlsWorkflow.FileName)
        Try
            getIdApplicationFromXls()
            ...

Private Sub getIdApplicationFromXls()
    Dim myConnection As OleDbConnection
    Dim myCommand As OleDbDataAdapter
    dsIdApplication = New Data.DataSet()
    Try
        myConnection = New OleDbConnection("Provider=" & SantEnv.ExcelProvider & ";Data Source=" + xlsFileTempPath + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'")
        myCommand = New OleDbDataAdapter("select * from [Sheet1$]", myConnection)
        myCommand.Fill(dsIdApplication)
    Catch ex As Exception
        cvError.Text = ex.Message
        cvError.IsValid = False
        Throw New Exception(ex.Message, ex)
    End Try
            ...

基本上,我使用文件名打开 OleConnection,根据我使用的工具,这似乎是一个问题。我不明白的是应该已经阻止用户上传具有可疑名称的文件。asp:RegularExpressionValidator

当涉及到该代码块时,您有什么建议来避免在我的工具中出现该警告?

编辑: 这是该工具写给我的:

应用程序的 getIdApplicationFromXls 方法执行 SQL 查询 替换为 mycommand,位于 workflow\workflowList.aspx.vb 的第 201 行。这 应用程序通过嵌入不受信任的字符串来构造此 SQL 查询 到查询中,没有进行适当的清理。串联的字符串是 提交到数据库,在那里进行解析和执行 因此。

攻击者将能够将任意数据注入 SQL 查询,只需更改用户输入文件名,该文件名由 第 151 行的 EnvoieFichier_Click 方法 workflow\workflowList.aspx.vb。然后,此输入流经代码 到数据库服务器,无需清理。

这可能会引发 SQL 注入攻击。

.NET vb.net 验证 SQL 注入

评论

0赞 Tomalak 1/15/2021
不要依赖一个正则表达式计算器,而是在使用文件名之前检查 Excel 文件是否存在。
1赞 Tomalak 1/15/2021
此外,你的正则表达式是一种不必要的冗长的说法,可以进一步压缩为 .锚点 和 是多余的,因为正则表达式验证器无论如何都只考虑完整的字符串。使表达式不区分大小写,并使用 instead 确保文件扩展名前至少有一个字符。^[a-zA-Z .0-9]*\.xlsx?$(?i)[a-z .0-9]+\.xlsx?^$(?i)+*
0赞 Mary 1/15/2021
我想知道该工具将如何对 OleDbConnectionStringBuilder 做出反应。learn.microsoft.com/en-us/dotnet/api/......警告消息看起来很奇怪,因为命令中没有嵌入的字符串。

答: 暂无答案