4

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

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 注入是否安全,即使用这样的参数?

谢谢,

4

1 回答 1

3

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

'; DROP TABLE STUDENTS;

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

于 2013-03-30T03:27:32.363 回答