存储过程查询中的SQL注入

时间:2013-03-30 03:05:26

标签: asp.net sql tsql xss sql-injection

我有一个存储过程,它将根据用户在标准搜索文本框中输入的内容返回搜索结果。在搜索框中按Enter键时,我将查询传递给search.aspx?q =用户输入的内容。

search.aspx有一个sqldatasource,它接受一个查询字符串参数并调用一个连接多个表的存储过程,并包含以下where子句......

where (description like '%' + @query + '%' or title like '%' + @query + '%'  or     calls.call_id like @query or r.firstname = @query or r.lastname = @query
or n.note like '%' + @query + '%')

...这个sql注入是安全的,即使用这样的参数吗?

谢谢,

1 个答案:

答案 0 :(得分:3)

不,这不容易受SQL注入,因为它使用SQL参数。假设有人试图通过提供@query的值来执行SQL injection

'; DROP TABLE STUDENTS;

您使用所提供的代码仍然是安全的,因为除了非SQL参数外,查询全部都是您的;这是一个字符串。即使字符串包含SQL,也不会执行它,除非您的存储过程实际上executed。从来没有这样做过(除非你有充分的理由(但即便如此,你应该先重新设计))。只需使用参数来清理用户输入,就可以轻松避免SQL注入。