gpt4 book ai didi

sql-server - SQL Server如何防止动态sql中的sql注入(inject)

转载 作者:行者123 更新时间:2023-12-01 09:54:26 24 4
gpt4 key购买 nike

我有一个 ASP.Net MVC 应用程序,它使用 SQL 2012 作为数据库服务器。我使用过 View 、存储过程(有/没有动态 sql 查询)。我听说动态 sql 可能成为 sql 注入(inject)的受害者。

这是我的示例动态查询之一..

DECLARE @Username AS Varchar(100);
DECLARE @Password AS Varchar(100);

SET @Username = 'user1';
SET @Password = '123';

DECLARE @Query AS VARCHAR(MAX);

SET @Query = 'SELECT * FROM USERS WHERE Username ='+ @Username+ ' AND Password = '+@Password+';

EXEC(@Query)

如何编写此查询以防止 sql 注入(inject)?

最佳答案

SQL 中的前提与应用程序代码中的前提基本相同...切勿直接将输入连接作为代码,而是将其视为参数。因此,如果您的查询是这样的:

SET @Query = 'SELECT * FROM USERS WHERE Username = @Username AND Password = @Password';

然后你可以使用sp_executesql 带参数执行它:

exec sp_executesql @Query, N'@Username varchar(100), @Password varchar(100)', @Username, @Password

关于sql-server - SQL Server如何防止动态sql中的sql注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31348367/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com