我遇到了我正在配置的软件的问题。我无权访问源代码,只能访问配置。
问题如下,在配置中,软件希望我输入一个字符串,但我希望字符串跳出比较而改为执行功能。
使用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进行比较。
我真的坚持这个,希望有人知道该怎么做(我知道没有源代码是一个真正的问题。
答案 0 :(得分:1)
query parameters(例如@Pattern
)的一大优势是它们可以帮助protect against SQL injection(这就是您要做的事情)。
所以答案是你不能做你想做的事。没有办法逃避@Pattern
参数并将一些自己的SQL添加到该查询中,因为作为@Pattern
传递的所有内容都将被解释为数据,而不会被解释为SQL命令文本(这就是为什么你的SQL文本在单引号内结束的原因,以及为什么你的引用会自动转义为''
。)。