T-SQL SQL 使用 JDBCConnector 和 StoredProcedures 注入
T-SQL SQL injection using JDBCConnector and StoredProcedures
我想知道是否可以将 sql 查询注入过程参数。我有特殊情况:
ALTER PROCEDURE [Test].[Injection]
@Query varchar(250) = null
AS
SET NOCOUNT ON
SET @Query = REPLACE(@Query,'','') COLLATE Latin1_General_CI_AI
... more sql code
SELECT * FROM Customers
WHERE (@Query IS NULL OR (Name COLLATE Latin1_General_CI_AI like '%'+@Query+'%'))
ORDER BY ExternalCode ASC
我想使用 @Query 变量注入 sql 查询,并可能注释其余代码。使用 JDBCConnector 通过 Web 服务调用过程。我尝试通过(以及许多其他组合):
'''abc'','''','''');SELECT * FROM [DummyTable][Dummy];--'
作为@Query 参数,但没有成功。
不用担心,SQL这样注入是不可能的。
SQL 注入的工作方式是潜入(注入)SQL 代码到目标查询中。
这对参数来说是不可能的,因为 SQL 参数被视为数据,而不是代码。您可以在参数中传递任何您想要的 SQL 代码,但它不会造成 SQL 注入威胁。
但是 - 请注意,如果您在存储过程中使用动态 SQL,并将参数连接到 SQL 字符串中,那么您的查询 是易受攻击的 到 SQL 注入攻击。
此代码不安全!
DECLARE @Sql nvarchar(max) = N'SELECT * FROM Customers
WHERE ('+ @Query +' IS NULL '....
EXEC(@SQL)
要在 SQL 服务器中安全地 运行 动态 SQL 您可以使用 sp_executeSql 并将参数作为参数传递:
DECLARE @Sql nvarchar(max) = N'SELECT * FROM Customers
WHERE (@TheQuery IS NULL '....
EXEC sp_ExecuteSql
@Sql,
N'@TheQuery varchar(250)',
@TheQuery = @Query
我想知道是否可以将 sql 查询注入过程参数。我有特殊情况:
ALTER PROCEDURE [Test].[Injection]
@Query varchar(250) = null
AS
SET NOCOUNT ON
SET @Query = REPLACE(@Query,'','') COLLATE Latin1_General_CI_AI
... more sql code
SELECT * FROM Customers
WHERE (@Query IS NULL OR (Name COLLATE Latin1_General_CI_AI like '%'+@Query+'%'))
ORDER BY ExternalCode ASC
我想使用 @Query 变量注入 sql 查询,并可能注释其余代码。使用 JDBCConnector 通过 Web 服务调用过程。我尝试通过(以及许多其他组合):
'''abc'','''','''');SELECT * FROM [DummyTable][Dummy];--'
作为@Query 参数,但没有成功。
不用担心,SQL这样注入是不可能的。
SQL 注入的工作方式是潜入(注入)SQL 代码到目标查询中。 这对参数来说是不可能的,因为 SQL 参数被视为数据,而不是代码。您可以在参数中传递任何您想要的 SQL 代码,但它不会造成 SQL 注入威胁。
但是 - 请注意,如果您在存储过程中使用动态 SQL,并将参数连接到 SQL 字符串中,那么您的查询 是易受攻击的 到 SQL 注入攻击。
此代码不安全!
DECLARE @Sql nvarchar(max) = N'SELECT * FROM Customers
WHERE ('+ @Query +' IS NULL '....
EXEC(@SQL)
要在 SQL 服务器中安全地 运行 动态 SQL 您可以使用 sp_executeSql 并将参数作为参数传递:
DECLARE @Sql nvarchar(max) = N'SELECT * FROM Customers
WHERE (@TheQuery IS NULL '....
EXEC sp_ExecuteSql
@Sql,
N'@TheQuery varchar(250)',
@TheQuery = @Query