SQL 中單引號和一些特殊字元的處理 | sql injection單引號
為了防止程式SQL語句錯誤以及SQL注入,單引號必須經過處理。有2種辦法:1、使用引數,比如SELECT*FROMyourTableWHEREname=@name;在JAVA中就是用預處理PreparedStatement來新增引數。2、如果不用引數,而用字串拼接的話,單引號必須經過判斷並替換,在資料庫中,用2個單引號代表1個實際的單引號。所以,如果是拼接方式,需要用String.Replace("’","”")來替換一下,將1個單引號替換為2個就沒有問題了。一.SQLInjection及其防範的基本知識 可能大家都知道,SQL注入主要是利用字元型引數輸入的檢查漏洞。 比如說,程式中有這樣的查詢: st...
為了防止程式SQL語句錯誤以及SQL注入,單引號必須經過處理。有2種辦法:
1、使用引數,比如SELECT * FROM yourTable WHERE name = @name;
在JAVA中就是用預處理PreparedStatement來新增引數。
2、如果不用引數,而用字串拼接的話,單引號必須經過判斷並替換,在資料庫中,用2個單引號代表1個實際的單引號。所以,如果是拼接方式,需要用String.Replace("’", "”")來替換一下,將1個單引號替換為2個就沒有問題了。
一. SQL Injection及其防範的基本知識 可能大家都知道,SQL注入主要是利用字元型引數輸入的檢查漏洞。 比如說,程式中有這樣的查詢: string sql = "SELECT * FROM SiteUsers WHERE UserName=" + userName + ""; 其中的userName引數是從使用者介面上輸入的。 如果是正常的輸入,比如"Peter",SQL語句會串接成: "SELECT * FROM SiteUsers WHERE UserName=Peter"; 如果攻擊者輸入的是下面的字串: "xxx; DROP TABLE SiteUsers WHERE 1=1 or UserName=xxx" 此時SQL語句會變成下面這個樣子: "SELECT * FROM SiteUsers WHERE UserName=xxx; DROP TABLE SiteUsers WHERE 1=1 or UserName=xxx"; 其結果,得到執行的是兩個SQL語句,第二個語句的後果就比較嚴重了。 防止注入的方法其實很簡單,只要把使用者輸入的單引號變成雙份就行了: string sql = "SELECT * FROM SiteUsers WHERE UserName=" + userName.Replace("","") + ""; 這樣,如果輸入的是上面那種惡意引數,整個SQL語句會變成: "SELECT * FROM SiteUsers WHERE UserName=xxx; DROP TABLE SiteUsers WHERE 1=1 or UserNa...