试图转义sp_executesql变量

时间:2014-10-05 08:54:50

标签: sql-server sql-injection parameterized-query

我遇到了我正在配置的软件的问题。我无权访问源代码,只能访问配置。

问题如下,在配置中,软件希望我输入一个字符串,但我希望字符串跳出比较而改为执行功能。

使用sql profiler我得到这样的东西:

exec sp_executesql N'SELECT * FROM dummyTable WHERE (Name LIKE @Pattern)',N'

这在我的设置中不起作用,因为模式在高级时没有明确定义。我需要拿走 变量作为模式传递并通过sql函数运行但我无法弄清楚如何。通常,Pattern包含一个char,在我的示例中为“1”。我已经尝试改变模式以使用转义字符并在其上运行我的函数,但我想我错过了一些(如果这是可能的话)。 我从config发送的变量如下:

{0}' or Name like dbo.RunCalulation({0}) 

给我以下内容:

'…@Pattern nvarchar(43)',@Pattern=N'1'' or Name like dbo.RunCalulation(1) '

这会执行,但不会给出任何响应,所以我认为esacpe char不起作用,并将整个字符串与Name进行比较。

我真的坚持这个,希望有人知道该怎么做(我知道没有源代码是一个真正的问题。

1 个答案:

答案 0 :(得分:1)

query parameters(例如@Pattern)的一大优势是它们可以帮助protect against SQL injection(这就是您要做的事情)。

所以答案是你不能做你想做的事。没有办法逃避@Pattern参数并将一些自己的SQL添加到该查询中,因为作为@Pattern传递的所有内容都将被解释为数据,而不会被解释为SQL命令文本(这就是为什么你的SQL文本在单引号内结束的原因,以及为什么你的引用会自动转义为''。)。