Oma*_*aer 5 t-sql vb.net sanitization sql-injection
实习生编写了以下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
Run Code Online (Sandbox Code Playgroud)
我已经解释过,一般来说,在尝试执行上述操作时,不应该使用字符串连接.最佳实践是使用SP或带参数的SQLClient.SQLCommand.
他的逻辑是:通过用两个单引号替换所有单引号(并在字符串的开头和结尾添加额外的单引号)来清理任何sql varchar(xxx).
我无法提供一个用户可以输入的东西的例子 - 我希望我能找到比"更有说服力的东西"但是,作为一般校长,你应该避免这个 - 你知道......因为. ..好吧,不要和我争辩 - 我是老板,我的愿望就是你的命令."
注意:代码将始终连接到我们的Microsoft SQL Server.但我可以想象它无法清理其他SQL实现的输入.
更新:
为了使它更清楚一点,我正在寻找的是参数的可能值,name这将允许有人将SQL注入查询.