Хранимая процедура SQL-инъекции - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь предотвратить SQL-инъекцию с помощью моей хранимой процедуры и получить значения с помощью C # или ASP.NET Web Forms. Это код, с которого начинается код

 public DataTable getDataTable(string sSQL, List<OleDbParameter> param, string sConnectionString)
 { return getOledbDataTable(sSQL, param, sConnectionString); }

 public DataTable getOledbDataTable(string sSQL, List<OleDbParameter> param ,string sConnectionString)
 {
    OleDbConnection cn = new OleDbConnection();
    OleDbCommand oCmd = new OleDbCommand();
    OleDbDataAdapter oDA = new OleDbDataAdapter();
    DataTable oDataTable = new DataTable();

    oCmd.CommandType = CommandType.StoredProcedure;

    cn.ConnectionString = sConnectionString;
    cn.Open();
    oCmd.CommandText = sSQL;
    oCmd.Parameters.AddRange(param.ToArray());
    oCmd.Connection = cn;
    oDA.SelectCommand = oCmd;
    oDA.Fill(oDataTable);
    cn.Close();

    return oDataTable;
 }

Затем, когда я хочу запросить / сохранить данные, здесь происходит вызов функции и этот метод, который предотвращает внедрение SQL: ПРИМЕЧАНИЕ (Это всего лишь фрагмент кода примера 1, проверяющий, является ли пользователь администратором или нет)

 public DataTable User(string sUser)
 {
    List<OleDbParameter> param = new List<OleDbParameter>();
    param.Add(new OleDbParameter("@USER", sUser));

    return mda.getDataTable("[SECURITY].upSelectUser", param, MyDataAccess.sCollateralMgrConnectionString);
 }

Это старый код, прежде чем я реализую код выше:

 public DataTable User(string sUser)
 {
     return mda.getDataTable("[SECURITY].upSelectUser '" + sUser + "'", MyDataAccess.sCollateralMgrConnectionString);
 }

Так что мой главный вопрос - , если у меня есть троичный оператор или такой код. Как реализовать это, используя список сбора?

 public DataTable AllCollateral(MySecurity oMySec, string sStatus)
 {
    return mda.getDataTable("[DBO].[upSelectAllCollateral]" + (string.IsNullOrEmpty(sStatus) ? string.Empty : " '" + sStatus + "', '" + oMySec.Userid + "' 1"), MyDataAccess.sCollateralMgrConnectionString);
 }

А это фрагмент хранимой процедуры в [DBO]. [UpSelectAllColficial]

 CREATE PROCEDURE [dbo].[upSelectAllCollateral]
   @Status varchar(255) = NULL,
   @USERID varchar(8)
 AS
   .....

Для ошибки SQL-инъекции. Я запускаю свое приложение в Veracode.

Это то, что я пытался, и ничего не работает / не получит данные, которые я хотел.

 public DataTable AllCollateral(MySecurity oMySec, string sStatus)
 {
     List<OleDbParameter> param = new List<OleDbParameter>();
     param.Add(new OleDbParameter("@USERID", oMySec.Userid));    
     param.Add(new OleDbParameter("@Status", sStatus));

     return mda.getDataTable("[DBO].[upSelectAllCollateral]"), param, MyDataAccess.sCollateralMgrConnectionString);
 }

 public DataTable AllCollateral(MySecurity oMySec, string sStatus)
 {
     List<OleDbParameter> param = new List<OleDbParameter>();
     param.Add(new OleDbParameter("@USERID", oMySec.Userid));    
     param.Add(new OleDbParameter("@Status", sStatus));

     return mda.getDataTable("[DBO].[upSelectAllCollateral] " + (string.IsNullOrEmpty("@USERID") ? string.Empty : " @Status, @USERID 1"), param, MyDataAccess.sCollateralMgrConnectionString);
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...