Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit0275e34

Browse files
committed
增加ToSql接口,处理@column重命名列名时的sql注入的情况
1 parentafe7e8a commit0275e34

File tree

2 files changed

+98
-6
lines changed

2 files changed

+98
-6
lines changed

‎APIJSON.NET/APIJSONCommon/Properties/AssemblyInfo.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
// 控制。更改这些特性值可修改
77
// 与程序集关联的信息。
88
[assembly:AssemblyTitle("ApiJson.Common")]
9-
[assembly:AssemblyDescription("单表查询的返回节点指定为Infos")]
9+
[assembly:AssemblyDescription("增加ToSql接口,处理sql注入的情况")]
1010
[assembly:AssemblyConfiguration("")]
1111
[assembly:AssemblyCompany("")]
1212
[assembly:AssemblyProduct("ApiJson.Common")]
@@ -32,5 +32,5 @@
3232
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
3333
//通过使用 "*",如下所示:
3434
// [assembly: AssemblyVersion("1.0.*")]
35-
[assembly:AssemblyVersion("0.0.4.0")]
36-
[assembly:AssemblyFileVersion("0.0.4.0")]
35+
[assembly:AssemblyVersion("0.0.6.0")]
36+
[assembly:AssemblyFileVersion("0.0.6.0")]

‎APIJSON.NET/APIJSONCommon/SelectTable.cs

Lines changed: 95 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,19 @@ public object ExecFunc(string funcname, object[] param, Type[] types)
6666
returnresult;
6767
}
6868

69+
privatestringToSql(stringsubtable,intpage,intcount,intquery,stringjson)
70+
{
71+
JObjectvalues=JObject.Parse(json);
72+
page=values["page"]==null?page:int.Parse(values["page"].ToString());
73+
count=values["count"]==null?count:int.Parse(values["count"].ToString());
74+
query=values["query"]==null?query:int.Parse(values["query"].ToString());
75+
values.Remove("page");
76+
values.Remove("count");
77+
subtable=_tableMapper.GetTableName(subtable);
78+
vartb=sugarQueryable(subtable,"*",values,null);
79+
varxx=tb.Skip((page-1)*count).Take(10).ToSql();
80+
returnxx.Key;
81+
}
6982
/// <summary>
7083
///
7184
/// </summary>
@@ -187,8 +200,9 @@ public JObject Query(string queryJson)
187200
/// 单表查询
188201
/// </summary>
189202
/// <param name="queryObj"></param>
203+
/// <param name="nodeName">返回数据的节点名称 默认为 infos</param>
190204
/// <returns></returns>
191-
publicJObjectQuerySingle(JObjectqueryObj)
205+
publicJObjectQuerySingle(JObjectqueryObj,stringnodeName="infos")
192206
{
193207
JObjectresultObj=newJObject();
194208
resultObj.Add("code","200");
@@ -202,7 +216,7 @@ public JObject QuerySingle(JObject queryObj)
202216

203217
if(key.EndsWith("[]"))
204218
{
205-
total=QuerySingleList(resultObj,item,"Infos");
219+
total=QuerySingleList(resultObj,item,nodeName);
206220
}
207221
elseif(key.Equals("func"))
208222
{
@@ -222,6 +236,25 @@ public JObject QuerySingle(JObject queryObj)
222236
returnresultObj;
223237
}
224238

239+
/// <summary>
240+
/// 获取查询语句
241+
/// </summary>
242+
/// <param name="queryObj"></param>
243+
/// <returns></returns>
244+
publicstringToSql(JObjectqueryObj)
245+
{
246+
foreach(variteminqueryObj)
247+
{
248+
stringkey=item.Key.Trim();
249+
250+
if(key.EndsWith("[]"))
251+
{
252+
returnToSql(item);
253+
}
254+
}
255+
returnstring.Empty;
256+
}
257+
225258
/// <summary>
226259
/// 解析并查询
227260
/// </summary>
@@ -284,6 +317,7 @@ private int QuerySingleList(JObject resultObj, KeyValuePair<string, JToken> item
284317
inttotal=0;
285318

286319
jb.Remove("page");jb.Remove("count");jb.Remove("query");
320+
287321
varhtt=newJArray();
288322
foreach(vartinjb)
289323
{
@@ -307,6 +341,23 @@ private int QuerySingleList(JObject resultObj, KeyValuePair<string, JToken> item
307341
returntotal;
308342
}
309343

344+
privatestringToSql(KeyValuePair<string,JToken>item)
345+
{
346+
stringkey=item.Key.Trim();
347+
varjb=JObject.Parse(item.Value.ToString());
348+
intpage=jb["page"]==null?0:int.Parse(jb["page"].ToString());
349+
intcount=jb["count"]==null?10:int.Parse(jb["count"].ToString());
350+
intquery=jb["query"]==null?0:int.Parse(jb["query"].ToString());
351+
352+
jb.Remove("page");jb.Remove("count");jb.Remove("query");
353+
varhtt=newJArray();
354+
foreach(vartinjb)
355+
{
356+
returnToSql(t.Key,page,count,query,t.Value.ToString());
357+
}
358+
359+
returnstring.Empty;
360+
}
310361
//单表查询
311362
privateintQuerySingleList(JObjectresultObj,KeyValuePair<string,JToken>item)
312363
{
@@ -495,7 +546,13 @@ private void ProcessColumn(string subtable, string selectrole, JObject values, I
495546
if(colName=="*"||int.TryParse(colName,outintcolNumber)||(IsCol(subtable,colName)&&_identitySvc.ColIsRole(colName,selectrole.Split(','))))
496547
{
497548
if(ziduan.Length>1)
498-
str.Append(ziduan[0]+" as "+ziduan[1]+",");
549+
{
550+
if(ziduan[1].Length>20)
551+
{
552+
thrownewException("别名不能超过20个字符");
553+
}
554+
str.Append(ziduan[0]+" as "+ReplaceSQLChar(ziduan[1])+",");
555+
}
499556
else
500557
str.Append(ziduan[0]+",");
501558

@@ -744,5 +801,40 @@ private void FuzzyQuery(string subtable, List<IConditionalModel> conModels, KeyV
744801
conModels.Add(newConditionalModel(){FieldName=vakey.TrimEnd('$'),ConditionalType=conditionalType,FieldValue=fieldValue.TrimEnd("%".ToArray()).TrimStart("%".ToArray())});
745802
}
746803
}
804+
805+
publicstringReplaceSQLChar(stringstr)
806+
{
807+
if(str==String.Empty)
808+
returnString.Empty;
809+
str=str.Replace("'","");
810+
str=str.Replace(";","");
811+
str=str.Replace(",","");
812+
str=str.Replace("?","");
813+
str=str.Replace("<","");
814+
str=str.Replace(">","");
815+
str=str.Replace("(","");
816+
str=str.Replace(")","");
817+
str=str.Replace("@","");
818+
str=str.Replace("=","");
819+
str=str.Replace("+","");
820+
str=str.Replace("*","");
821+
str=str.Replace("&","");
822+
str=str.Replace("#","");
823+
str=str.Replace("%","");
824+
str=str.Replace("$","");
825+
str=str.Replace("\"","");
826+
827+
//删除与数据库相关的词
828+
str=Regex.Replace(str,"delete from","",RegexOptions.IgnoreCase);
829+
str=Regex.Replace(str,"drop table","",RegexOptions.IgnoreCase);
830+
str=Regex.Replace(str,"truncate","",RegexOptions.IgnoreCase);
831+
str=Regex.Replace(str,"xp_cmdshell","",RegexOptions.IgnoreCase);
832+
str=Regex.Replace(str,"exec master","",RegexOptions.IgnoreCase);
833+
str=Regex.Replace(str,"net localgroup administrators","",RegexOptions.IgnoreCase);
834+
str=Regex.Replace(str,"net user","",RegexOptions.IgnoreCase);
835+
str=Regex.Replace(str,"-","",RegexOptions.IgnoreCase);
836+
str=Regex.Replace(str,"truncate","",RegexOptions.IgnoreCase);
837+
returnstr;
838+
}
747839
}
748840
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp