Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 574ff56

Browse files
committed
Add isUnsafeSql / isUnsafeSqlFragment filters
1 parent ce5bf47 commit 574ff56

File tree

3 files changed

+10
-5
lines changed

3 files changed

+10
-5
lines changed

src/ServiceStack.OrmLite/OrmLiteUtils.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -463,9 +463,12 @@ public static string SqlValue(this object value)
463463
public static Regex VerifyFragmentRegEx = new Regex("([^\\w]|^)+(--|;--|;|%|/\\*|\\*/|@@|@|char|nchar|varchar|nvarchar|alter|begin|cast|create|cursor|declare|delete|drop|end|exec|execute|fetch|insert|kill|open|select|sys|sysobjects|syscolumns|table|update)([^\\w]|$)+",
464464
RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.IgnoreCase);
465465

466+
public static Regex VerifySqlRegEx = new Regex("([^\\w]|^)+(--|;--|;|%|/\\*|\\*/|@@|@|char|nchar|varchar|nvarchar|alter|begin|cast|create|cursor|declare|delete|drop|end|exec|execute|fetch|insert|kill|open|table|update)([^\\w]|$)+",
467+
RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.IgnoreCase);
468+
466469
public static Func<string,string> SqlVerifyFragmentFn { get; set; }
467470

468-
public static bool isUnsafeSql(string sql)
471+
public static bool isUnsafeSql(string sql, Regex verifySql)
469472
{
470473
if (sql == null)
471474
return false;
@@ -482,13 +485,13 @@ public static bool isUnsafeSql(string sql)
482485
.StripQuotedStrings('`')
483486
.ToLower();
484487

485-
var match = VerifyFragmentRegEx.Match(fragmentToVerify);
488+
var match = verifySql.Match(fragmentToVerify);
486489
return match.Success;
487490
}
488491

489492
public static string SqlVerifyFragment(this string sqlFragment)
490493
{
491-
if (isUnsafeSql(sqlFragment))
494+
if (isUnsafeSql(sqlFragment, VerifyFragmentRegEx))
492495
throw new ArgumentException("Potential illegal fragment detected: " + sqlFragment);
493496

494497
return sqlFragment;

src/ServiceStack.OrmLite/TemplateDbFilters.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,8 @@ public int dbExec(TemplateScopeContext scope, string sql, Dictionary<string, obj
8484
public string sqlTake(int? limit) => padCondition(OrmLiteConfig.DialectProvider.SqlLimit(null, limit));
8585
public string ormliteVar(string name) => OrmLiteConfig.DialectProvider.Variables.TryGetValue(name, out var value) ? value : null;
8686

87-
public bool isUnsafeSql(string sql) => OrmLiteUtils.isUnsafeSql(sql);
87+
public bool isUnsafeSql(string sql) => OrmLiteUtils.isUnsafeSql(sql, OrmLiteUtils.VerifySqlRegEx);
88+
public bool isUnsafeSqlFragment(string sql) => OrmLiteUtils.isUnsafeSql(sql, OrmLiteUtils.VerifyFragmentRegEx);
8889

8990
private string padCondition(string text) => string.IsNullOrEmpty(text) ? "" : " " + text;
9091
}

src/ServiceStack.OrmLite/TemplateDbFiltersAsync.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,8 @@ public Task<object> dbExec(TemplateScopeContext scope, string sql, Dictionary<st
8686
public string sqlTake(int? limit) => padCondition(OrmLiteConfig.DialectProvider.SqlLimit(null, limit));
8787
public string ormliteVar(string name) => OrmLiteConfig.DialectProvider.Variables.TryGetValue(name, out var value) ? value : null;
8888

89-
public bool isUnsafeSql(string sql) => OrmLiteUtils.isUnsafeSql(sql);
89+
public bool isUnsafeSql(string sql) => OrmLiteUtils.isUnsafeSql(sql, OrmLiteUtils.VerifySqlRegEx);
90+
public bool isUnsafeSqlFragment(string sql) => OrmLiteUtils.isUnsafeSql(sql, OrmLiteUtils.VerifyFragmentRegEx);
9091

9192
private string padCondition(string text) => string.IsNullOrEmpty(text) ? "" : " " + text;
9293
}

0 commit comments

Comments
 (0)