我有一个存储过程,它将根据用户在标准搜索文本框中输入的内容返回搜索结果。在搜索框中按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注入是安全的,即使用这样的参数吗?
谢谢,
答案 0 :(得分:3)
不,这不容易受SQL注入,因为它使用SQL参数。假设有人试图通过提供@query
的值来执行SQL injection:
'; DROP TABLE STUDENTS;
您使用所提供的代码仍然是安全的,因为除了非SQL参数外,查询全部都是您的;这是一个字符串。即使字符串包含SQL,也不会执行它,除非您的存储过程实际上executed。从来没有这样做过(除非你有充分的理由(但即便如此,你应该先重新设计))。只需使用参数来清理用户输入,就可以轻松避免SQL注入。