2012-06-06 52 views
1

我有以下WHERE條件在SELECT語句:逃逸用戶輸入參數

WHERE ('.' + column_name LIKE @prefix)) 

@prefix參數被設置如下:

cmd.Parameters.AddWithValue("@prefix", "%[^a-z]" & prefix & "%") 

prefix變量從形式取輸入。

我遇到的問題是當用戶輸入'%'或'['或其他特殊字符。我怎樣才能確保這些逃脫而不是被視爲特殊字符?

相關:一般來說,您如何阻止人們在輸入中輸入'%'並將其視爲通配符?

+0

可能的重複[如何清理SQL Server中的動態SQL - 防止SQL注入](http://stackoverflow.com/questions/4102387/how-to-cleanse-dynamic-sql-in-sql-server-預防-Sql注入) –

+0

@PreetSangha我認爲這個問題範圍較窄,因爲它要求在'LIKE'表達式中轉義元字符。 – dasblinkenlight

回答

2

SQL's LIKE operator提供了一個可選ESCAPE條款:

match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ] 

您可以將轉義字符設置爲您喜歡的一個字符,並用它逃離的元字符。

+0

你能給我舉個例子嗎? – Flash

+0

@Andrew您可以使用'Regex.Replace(prefix,「[〜%_ [\\]]」,「!$ 0」)'用您的感嘆號'!'轉義您的前綴,然後在您的感嘆號escape子句:'column_name LIKE @prefix ESCAPE'!''。 – dasblinkenlight

+0

謝謝。我已更改爲'prefix = Regex.Replace(prefix,「[!〜%_ [\]]」,「!$ 0」)'。我收集'!'需要被轉義,因爲它是轉義字符。另外,你爲什麼包括'〜'? – Flash