加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

vb.net – SQL注入:为什么下面的代码很危险?

发布时间:2020-12-17 07:27:39 所属栏目:百科 来源:网络整理
导读:实习生编写了以下vb.net代码: Public Sub PopulateUsersByName (name As String) 'Here,the parameter 'name' is unsantized,coming straight from the form Dim query As String = "" query += vbNewLine + " SELECT Id,FirstName,LastName FROM dbo.[User
实习生编写了以下vb.net代码:

Public Sub PopulateUsersByName (name As String)
        'Here,the parameter 'name' is unsantized,coming straight from the form

        Dim query As String = ""
        query += vbNewLine + " SELECT Id,FirstName,LastName FROM dbo.[Users]"
        query += vbNewLine + " WHERE FirstName LIKE '" + REPLACE(name,"'","''") + "'"
        query += vbNewLine + "     OR LastName LIKE '" + REPLACE(name,"''") + "'"

        'Execute SQLCommand with above query and no parameters
        'Then do some other stuff

    END Sub

我已经解释过,一般来说,在尝试执行上述操作时,不应该使用字符串连接.最佳实践是使用SP或带参数的SQLClient.SQLCommand.

他的逻辑是:通过用两个单引号替换所有单引号(并在字符串的开头和结尾添加额外的单引号)来清理任何sql varchar(xxx).

我无法提供一个用户可以输入的东西的例子 – 我希望我能找到比“更有说服力的东西”但是,作为一般校长,你应该避免这个 – 你知道……因为. ..好吧,不要和我争辩 – 我是老板,我的愿望就是你的命令.“

注意:代码将始终连接到我们的Microsoft SQL Server.但我可以想象它无法清理其他SQL实现的输入.

更新:

为了使它更清楚一点,我正在寻找的是参数名称的可能值,这将允许某人将SQL注入查询.

解决方法

尝试使用他的代码使用’%_%'(有和没有单引号)作为输入….与SQL中的相同….

select SELECT Id,LastName FROM dbo.[Users] from TBL_EMPLOYEES where FirstName like '%_%' or LastName like '%_%'

无论它是否失败,他的代码都很糟糕……公平地说这个只是一个单行,但除此之外的任何东西,包括复杂的SQL语句都难以维护和调试..无论如何,使用Sps让他习惯使用它们并允许他利用T-SQL的灵活性和强大功能……大声笑,我很想想我编写的一些SQL在代码中会是什么样子……

你知道,我总是遇到这样的代码(而且情况更糟)……只是因为它可能会工作一段时间并不意味着它是正确的方法……如果你的实习生没有听取经验,他永远不会成为一个好的开发人员,这是一个可悲的事实

我曾经减少了一个初级开发人员尝试导入CSV文件(5000万行),就像你的实习生一样,从她的300行代码(从来没有工作)到只有一行LINQ将其转换为XML(我们不能使用批量插入或bcp)和花哨的SP …是防弹,工作完成….

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读