2011-06-29 55 views
2

我必须连接到一个现有的存储过程,在数据库中保存一行文本。 现在我已经看到了sp,它是一个连接的字符串(我的文本被放置在该文件中)并且它与exec(@sql)一起执行。exec sql避免sql注入的替代方法是SP_EXECUTESQL?

由于文本来自公共网站,我必须确保没有SQL注入是可能的。

该数据库的家伙没有听说过SQL注入,所以他不知道该怎么做,但因为我不想暴露我的应用风险,我想知道可以做些什么来防止sql注入。然而,我是比sql更程序员。

现在我已经找到'SP_EXECUTESQL(@SQL)'存储过程,这将有助于防止sql注入,还是仍然有可能进行恶意调用?

在此先感谢您的帮助。

+0

向我们展示SQL语句的任何机会(当然是为公共消费消毒)?如果你已经在使用参数,那么你可能是安全的。 –

+0

原来,sql的人可以很容易地用正常的存储过程替换exec(@sql)。 – Michel

回答

2

请查看SP_EXECUTESQL(@SQL)的MSDN文档:http://msdn.microsoft.com/en-us/library/ms188001.aspx

报告警告说,

运行时编译的Transact-SQL语句 可以公开的应用程序 恶意攻击,如SQL注入 。

也可以看看这里:http://msdn.microsoft.com/en-us/library/ms175170.aspx

我会强烈建议不要从任何用户信任任何输入!

你能改变查询以某种方式参数化吗?

+0

是的,我已阅读文章,但它也说'Transact-SQL语句或批处理可以包含嵌入式参数'。我认为使用参数将有助于防止SQL注入? – Michel

+0

是的,使用参数可防止SQL注入。 'SP_EXECUTESQL()'支持比普通的'EXEC'更高效的运行,但是具有相同的安全问题。 –

+0

好的,谢谢,那我就找点别的了。 – Michel