提问人:Sébastien 提问时间:6/15/2017 更新时间:6/15/2017 访问量:232
动态查询作为存储过程和 SQL 注入中的参数
Dynamic query as a parameter in stored procedure and SQL Injection
问:
我有以下存储过程(针对这篇文章进行了修改):
ALTER PROCEDURE [dbo].[SEL_ARTICLE](
@FILTER VARCHAR(8000) = ''
) AS
BEGIN
DECLARE @SQLQuery varchar(8000);
SET @SQLQuery = 'SELECT DISTINCT ArticleNo, desc, ...
FROM Article INNER JOIN
...
{0}
ORDER BY ArticleNo, ...';
SET @SQLQuery = REPLACE(@SQLQuery, '{0}', @FILTER);
EXEC(@SQLQuery);
END
我在我的 prog 中这样称呼这个 proc:
Public Function get_Article(ByVal strFilter As String) As DataTable
Dim tblData As New DataTable
Dim par As SqlParameter = New SqlParameter("@FILTER", SqlDbType.VarChar)
par.Value = strFilter
Load_Data("SEL_ARTICLE", tblData, par) 'SqlCommand used
Return tblData
End Function
参数的值是动态的(字段、值),具体取决于我们搜索的内容。下面是一个示例:strFilter
" AND ((Article = [input from User]) OR (Description LIKE '%[input from User]%'))"
用户必须能够输入字符(法语单词),这就是为什么我像这样在服务器端替换它的原因:'
strFilter &= String.Format(" AND ((Article = {0}) OR (description LIKE '%{1}%'))", strArticleNo, strArticleName.Replace("'", "''"))
我阻止用户输入以下字符:,,,,<
>
{
}
;
现在我的问题: 此代码对SQL注入攻击安全吗?
谢谢!
答: 暂无答案
评论
'
SqlParameter