string[] theParms = ['parm1', 'parm2'];
string theQuery = "SELECT something, somethingAgain " +
"FROM aDBTable " +
"WHERE something = '{?}'" +
"AND something <> '{?}'";
でクエリでパラメータを交換してください。C#が、私は<strong>theParms</strong>で定義されたPARMSで{?}さんを交換する必要が午前定義された値
は、私は、文字列をループするために使用して、見つかったそれぞれを置き換えることができ、{?}対応PARM値とにおけるループの何らかのタイプC#はありますか?このような
何か:
まずループ:
SELECT something, somethingAgain
FROM aDBTable
WHERE something = 'parm1' AND something <> '{?}'
第二のループ:
SELECT something, somethingAgain
FROM aDBTable
WHERE something = 'parm1' AND something <> 'parm2'
REGEX以上を行うことができ、共通のフレームワークの機能のいくつかの種類がありますか?あなたが自分でそれを処理する必要はありません
SQLインジェクションのチェック
bool injectionCheckin = new injectionCheck().inCheck(theFinalQuery);
public class injectionCheck
{
public bool inCheck(string queryString)
{
var badWords = new[] {
"EXEC", "EXECUTE", ";", "-", "*", "--", "@",
"UNION", "DROP","DELETE", "UPDATE", "INSERT",
"MASTER", "TABLE", "XP_CMDSHELL", "CREATE",
"XP_FIXEDDRIVES", "SYSCOLUMNS", "SYSOBJECTS",
"BC_HOME_ADDRESS1", "BC_HOME_ADDRESS2", "BC_HOME_CITY", "BC_HOME_COUNTY", "BC_HOME_POSTAL", "BC_MAIL_ADDRESS1",
"BC_MAIL_ADDRESS2", "BC_MAIL_CITY", "BC_MAIL_COUNTY", "BC_MAIL_POSTAL", "BC_MAIL_STATE", "FLSA_STATUS", "GRADE",
"GRADE_ENTRY_DT", "HIGHEST_EDUC_LVL", "LAST_INCREASE_DT", "BC_SALP_DESCR", "BC_SALP_DESCRSHORT", "SAL_ADMIN_PLAN"
};
string pattern = "(?<!\\w)(" + Regex.Escape(badWords[0]);
foreach (var key in badWords.Skip(1))
{
pattern += "|" + Regex.Escape(key);
}
pattern += ")(?!\\w)";
dynamic _tmpCount = Regex.Matches(queryString, pattern, RegexOptions.IgnoreCase).Count;
if (_tmpCount >= 1)
return true;
else
return false;
}
}
注射の問題を避けるためにパラメータを使うべきでしょうが、 '{?}'の最初のインスタンスをあなたのパラメータに置き換える単純な 'for'ループとは何か? – Adwaenyth
@Adwaenythループでは、{?} ...第3回目の発生などの第2回目の発生はどうですか? – StealthRT
実際には、パラメータ化されたクエリを使用します。 – Pikoh