2016-11-16 21 views
0

現在、Oracle DBでビューを表示しています。現在、入力パラメータを1つ受け取り、where句の特定のフィールドで使用するWeb APIを作成しました。以下はサービスのためのコード入力パラメータに従ってwhere句を動的に変更します。

public HttpResponseMessage Getdetails(string JRS_NO) 
{ 

    List<OracleParameter> prms = new List<OracleParameter>(); 
    List<string> selectionStrings = new List<string>(); 
    string connStr = ConfigurationManager.ConnectionStrings["TGSDataConnection"].ConnectionString; 
    using (OracleConnection dbconn = new OracleConnection(connStr)) 
    { 
     DataSet userDataset = new DataSet(); 
     var strQuery = "SELECT * from LIMS_SAMPLE_RESULTS_VW where JRS_NO =" + JRS_NO; 

     var returnObject = new { data = new OracleDataTableJsonResponses(connStr, strQuery, prms.ToArray()) }; 
     var response = Request.CreateResponse(HttpStatusCode.OK, returnObject, MediaTypeHeaderValue.Parse("application/json")); 
     ContentDispositionHeaderValue contentDisposition = null; 
     if (ContentDispositionHeaderValue.TryParse("inline; filename=ProvantisStudyData.json", out contentDisposition)) 
     { 
      response.Content.Headers.ContentDisposition = contentDisposition; 
     } 
     return response; 
    } 
} 

ビューは、私が離れている場合、我々は、入力パラメータとしてフィールドのいずれかを取得することができますし、我々はそれに応じて私たちのwhere句を変更することができますチェックしていますit.Like REQUEST_ID,JRS_NO,ROOM,SUBMITDATE,DOBで16列などがありますがあります。 api/TGSSampData?JRS_NO=379&SUBMITDATE='01-JAN-2016'またはapi/TGSSampData?ROOM=111&DOB='22-AUG-2014'でAPIを呼び出す場合と同じです。私たちは、動的テキストをパラメータ化することにより、もちろんあなたはしかし、それを変更することができますので、あなたがしたい、入力パラメータ

答えて

1

あなたのクエリがstringあるに応じて、where句を変更することができるかどうかはわかりません。アクションメソッドにsecondeパラメータを追加する必要があります。

あなたがの場合は、のwhere句を変更するかどうかはまったく異なる質問です。すぐにはyesと答えることはできません。何かを含むことができるHTTP要求文字列から条件を受け取っていると考える必要があります。あなたの例はすでにこれを行っていますが、これは非常に危険です。

var strQuery = "SELECT * from LIMS_SAMPLE_RESULTS_VW where JRS_NO =" + JRS_NO; 

SQLインジェクションのためにフラッドゲートを開いています。 JRS_NOの検証は行わず、クエリ文字列に直接追加します。これは巨大なセキュリティリスクです。動的列名を使用して文字列を作成する場合は、攻撃者の可能性を増やします。

答えは次のとおりです。コードをより動的にすることはできますが、クエリ文字列を作成しないでください。そこにSQLインジェクションからあなたを守り、あなたのクエリでの使用パラメータ:

"SELECT * from LIMS_SAMPLE_RESULTS_VW where JRS_NO = @Value" 

あなたはすでにあなたにOracleParameterを追加するprmsを持っています。

フィールドを動的にするためには、サーバー側で有効な列のリストを作成し、それに対する入力を検証します。値が正当であると確信できる場合にのみ、それを使用してクエリを構成します。

関連する問題