微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL注入使用替换单引号和验证整数

如何解决SQL注入使用替换单引号和验证整数

如果这是一个用这种方式编码的遗留项目,那么虽然不是最佳方案,但我目前还不知道它会受到sql注入的任何影响,只要以这种方式对待每个字符串并且查询就很简单如您所显示的。

但是,我不能再说确定性了。如果不使用参数化查询,则总有可能存在尚未考虑的某些漏洞。

自己手动转义引号容易出错,有时可能会以难以预料的方式失败。例如下表

CREATE TABLE myTable(title VARCHAR(100))
INSERT INTO myTable VALUES('Foo')

以及使用带有字符串连接的动态sql构建的存储过程

CREATE PROC UpdateMyTable
@newtitle NVARCHAR(100)
AS
/*
Double up any single quotes
*/
SET @newtitle = REPLACE(@newtitle, '''','''''')

DECLARE @UpdateStatement VARCHAR(MAX)

SET @UpdateStatement = 'UPDATE myTable SET title='''  + @newtitle + ''''

EXEC(@UpdateStatement)

您可以尝试以下

正常更新

EXEC UpdateMyTable N'Foo'
SELECT * FROM myTable /*Returns "Foo"*/

sql注入尝试挫败

EXEC UpdateMyTable N''';DROP TABLE myTable--'
SELECT * FROM myTable  /*Returns "';DROP TABLE myTable--"*/

sql注入尝试成功并删除

EXEC UpdateMyTable N'始;DROP TABLE myTable--'
SELECT * FROM myTable  /*Returns "Invalid object name 'myTable'."*/

这里的问题是,第三个查询传递的是U + 02BC而不是标准的撇号,然后在varchar(max)发生卫生情况后将字符串分配给a ,从而将其地转换为常规的撇号。

解决方法

这个问题已经在这里有了答案

8年前关闭。

可能的重复项:是否

可以通过转义单引号和用单引号引起来的用户输入来防止SQL注入?

我只是想知道,如果我每更换'''的用户输入,例如string.Replace("'","''")和验证号码(确保它们是数字,不包含任何其他字符),是SQL注入仍然是可能的?如何?

我正在使用动态SQL查询SqlCommand。像这样的东西:

cmd.CommandText = "SELECT * FROM myTable WHERE ID = " + theID.ToString();

或者

cmd.CommandText = "UPDATE myTable SET title='" + title.Replace("'","''") + "' WHERE ID = " + theID.ToString();

输入整数将在ASP.NET MVC中自动验证(检查它们是否为实数)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。