【优化】前端上传接口增加数据校验,防止出现恶意提交脚本数据的问题。

master
大灰灰 5 months ago
parent a8e0cded78
commit 9fbe8d6ec4

@ -664,5 +664,19 @@ namespace CoreCms.Net.Utility.Helper
return t;
}
#region 检测提交的内容是否包含非法信息
/// <summary>
/// 检测提交的内容是否包含非法信息。
/// </summary>
/// <param name="inputData"></param>
/// <returns></returns>
public static bool CheckData(string inputData)
{
var strRegex = @"<[^>]+?style=[\w]+?:expression\(|\b(alert|confirm|prompt)\b|^\+/v(8|9)|<[^>]*?=[^>]*?&#[^>]*?>|\b(and|or)\b.{1,6}?(=|>|<|\bin\b|\blike\b)|/\*.+?\*/|<\s*script\b|<\s*img\b|\bEXEC\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\s+(TABLE|DATABASE)";
return Regex.IsMatch(inputData, strRegex);
}
#endregion
}
}

@ -13,6 +13,7 @@ using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Aliyun.OSS;
using Aliyun.OSS.Util;
@ -291,6 +292,18 @@ namespace CoreCms.Net.Web.WebApi.Controllers
return jm;
}
// 使用StreamReader来读取文件内容
using (var reader = new StreamReader(file.OpenReadStream(), Encoding.UTF8))
{
var content = await reader.ReadToEndAsync(); // 注意:这可能会消耗大量内存对于大文件,所以需要限制上传大小
// 检查内容是否合法
if (CommonHelper.CheckData(content))
{
jm.msg = "请勿提交非法数据。";
return jm;
}
}
string url = string.Empty;
if (filesStorageOptions.StorageType == GlobalEnumVars.FilesStorageOptionsType.LocalStorage.ToString())
{

Loading…
Cancel
Save