Я пытаюсь предотвратить 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);
}