2011年12月7日 星期三

Oracle除錯_ORA-01756: 引號字串未以恰當方式終止

通常我們會使用QueryString來傳遞網頁與網頁中的參數,當我們決定這麼做的同時,弱點掃瞄工具就會塞很多可能造成程式錯誤或SQL Injection的內容,今天幫同事修正弱點掃描的內容,其中一項就是因為掃描工具將「」塞到QueryString中,造成Oracle在查詢時出現『引號字串未以恰當方式終止』這個錯誤。

而根本的解決之道並不是將該值置換或是進行其他字串的處理,而是在進行查詢時以參數的方式代入查詢內容,而非直接組SQL的查詢字串。


Imports Oracle.DataAccess.Client

sSql = "select * from Table Name = :Name "
Dim sCon As New Oracle.DataAccess.Client.OracleConnection(Constr)
Dim sCmd As New Oracle.DataAccess.Client.OracleCommand(sSql, sCon)
sCon.Open()

Dim param As OracleParameter = sCmd.CreateParameter()
param.ParameterName = ":Name "
param.Value = Name
param.OracleDbType = OracleDbType.Varchar2
sCmd.Parameters.Add(param)


說明:
1. Oracle的參數用冒號(:)
2. 使用OracleDbType 要先引入Oracle.DataAccess.Client

上述參數設定部分也可以簡化成

sCmd.Parameters.Add("Name ", OracleDbType.Varchar2).Value = Name

沒有留言:

張貼留言