本文將從GB/T 22239《信息安全技術(shù) 網(wǎng)絡(luò)安全等級保護(hù)基本要求》規(guī)定的安全計算環(huán)境中解讀、摘要若干安全要求,結(jié)合Abp框架,對站點進(jìn)行安全升級。
【身份鑒別】應(yīng)對登錄的用戶進(jìn)行身份標(biāo)識和鑒別,身份標(biāo)識具有唯一性,身份鑒別信息具有復(fù)雜度要求并定期更換。
解決方案
-
設(shè)置密碼最小長度
-
密碼由數(shù)字、字母和特殊字符組合而成
-
設(shè)置密碼每隔90天需要更換一次
實施
在AbpSettings表中配置開啟PasswordComplexity密碼復(fù)雜度校驗,設(shè)置密碼最小長度為7位
配置密碼強(qiáng)制過期策略,參考用Abp實現(xiàn)找回密碼和密碼強(qiáng)制過期策略
【身份鑒別】應(yīng)具有登錄失敗處理功能,應(yīng)配置并啟用結(jié)束會話、限制非法登錄次數(shù)和當(dāng)?shù)卿涍B接超時自動退出等相關(guān)措施。
解決方案
-
登錄后無操作15分鐘,系統(tǒng)自動退出登錄狀態(tài)。
-
連續(xù)登錄失敗5次后,鎖定賬戶15分鐘
實施
在WebCoreModule中,將Jwt Bearer Token的過期時間從默認(rèn)的1天改為15分鐘
配置用戶登錄失敗鎖定
默認(rèn)將新增用戶的IsLockoutEnabled打開
public User()
{
this.IsLockoutEnabled = true;
}
在AbpSettings表中配置開啟用戶登錄失敗鎖定,并配置失敗嘗試次數(shù)和鎖定時長
【身份鑒別】應(yīng)采用口令、密碼技術(shù)、生物技術(shù)等兩種或兩種以上組合的鑒別技術(shù)對用戶進(jìn)行身份鑒別,且其中一種鑒別技術(shù)至少應(yīng)使用密碼技術(shù)來實現(xiàn)。
解決方案
采用兩種以上組合的鑒別技術(shù)對用戶進(jìn)行身份鑒別,采用用戶名+手機(jī)短信驗證碼方式登錄
實施
對Abp框架改造,加入兩步驗證功能,參考用Abp實現(xiàn)兩步驗證(Two-Factor Authentication,2FA)登錄(一):認(rèn)證模塊
【訪問控制】應(yīng)對登錄的用戶分配賬戶和權(quán)限;并授予管理用戶所需的最小權(quán)限,實現(xiàn)管理用戶的權(quán)限分離。
解決方案
-
刪除或者禁用默認(rèn)賬戶,
-
禁用超級管理員,
-
設(shè)置獨立的審計管理員、安全管理員等。
實施
更改AbpPermissions,AbpRoles,AbpUserRoles表,合理安排用戶角色的權(quán)限配置。
【入侵防范】應(yīng)通過設(shè)定終端接入方式或網(wǎng)絡(luò)地址范圍對通過網(wǎng)絡(luò)進(jìn)行管理的管理終端進(jìn)行限制。
解決方案
限制管理員的登錄地址范圍,僅允許特定IP進(jìn)行登錄管理。
實施
使用IP白名單限制管理員賬戶登錄。
AppSettingNames.cs:
public static class AppSettingNames
{
...
public const string AdminIpAddressWhitelist = "CAH.AdminIpAddressWhitelist";
}
AppSettingProvider.cs:
public class AppSettingProvider : SettingProvider
{
public override IEnumerable<SettingDefinition> GetSettingDefinitions(SettingDefinitionProviderContext context)
{
return new[]
{
...
new SettingDefinition(AppSettingNames.AdminIpAddressWhitelist, "127.0.0.1,::1,localhost,0.0.0.0", scopes: SettingScopes.Application | SettingScopes.Tenant | SettingScopes.User, isVisibleToClients: true),
};
}
}
在身份驗證終節(jié)點方法Authenticate中,添加對管理員賬戶IP白名單的校驗:
var ipAddress = this._logInManager.ClientInfoProvider.ClientIpAddress;
var adminIpAddressWhitelist = await SettingManager.GetSettingValueForTenantAsync(AppSettingNames.AdminIpAddressWhitelist, loginResult.Tenant.Id);
var IpCheckRequired = false;
var roles = await userManager.GetRolesAsync(loginResult.User);
if (roles.Contains(StaticRoleNames.Tenants.Admin) || roles.Contains(StaticRoleNames.Tenants.Super))
{
IpCheckRequired = true;
}
if (!string.IsNullOrEmpty(adminIpAddressWhitelist))
{
if (!adminIpAddressWhitelist.Split(',').Contains(ipAddress) && IpCheckRequired)
{
throw new UserFriendlyException("IP不在允許的列表中");
}
}
【入侵防范】應(yīng)提供數(shù)據(jù)有效性檢驗功能,保證通過人機(jī)接口輸入或通過通信接口輸入的內(nèi)容符合系統(tǒng)設(shè)定要求。
解決方案
- 對上傳接口進(jìn)行文件格式限制轉(zhuǎn)義處理。
- 對系統(tǒng)配置防范XSS跨站腳本攻擊
實施
文件系統(tǒng)中配置僅允許業(yè)務(wù)相關(guān)的文件類型上傳
"FileStorage": {
...
"AllowOnlyConfiguredFileExtensions": true,
"FileExtensionsConfiguration": ".jpg,.png",
}
配置上傳文本中高危腳本過濾,參考[Asp.Net Core] 網(wǎng)站中的XSS跨站腳本攻擊和防范
【安全審計】應(yīng)對審計記錄進(jìn)行保護(hù),定期備份,避免受到未預(yù)期的刪除、修改或覆蓋等
解決方案
審計日志存儲6個月以上。
實施
對AbpAuditLogs中的數(shù)據(jù)定期異地備份,保存時長至少6個月以上。
【數(shù)據(jù)完整性、保密性】應(yīng)采用校驗技術(shù)或密碼技術(shù)保證重要數(shù)據(jù)在存儲過程中的完整性以及保密性,包括但不限于鑒別數(shù)據(jù)、重要業(yè)務(wù)數(shù)據(jù)、重要審計數(shù)據(jù)、重要配置數(shù)據(jù)、重要視頻數(shù)據(jù)和重要個人信息等
解決方案
- 采用AES加密對身份證號碼等重要數(shù)據(jù)進(jìn)行加密后再存儲
- 傳輸報文中對敏感數(shù)據(jù)進(jìn)行脫敏處理
- 頁面中對敏感數(shù)據(jù)進(jìn)行脫敏處理
實施
使用加密轉(zhuǎn)換器對身份證號字段進(jìn)行加密存儲,參考在EF Core中為數(shù)據(jù)表按列加密存儲
modelBuilder.Entity<User>().Property(c => c.IdentificationNumber).HasConversion<EncryptionConverter<string>>();
修改User到UserDto的字段映射,對手機(jī)號,身份證號和郵箱地址進(jìn)行正則替換。
public UserMapProfile()
{
CreateMap<UserDto, User>();
CreateMap<UserDto, User>()
.ForMember(x => x.Roles, opt => opt.Ignore())
.ForMember(x => x.CreationTime, opt => opt.Ignore())
.ForMember(x => x.IdentificationNumber, opt => opt.Ignore())
.ForMember(x => x.EmailAddress, opt => opt.Ignore())
.ForMember(x => x.PhoneNumber, opt => opt.Ignore());
CreateMap<User, UserDto>()
.ForMember(
dest => dest.PhoneNumber,
opt => opt.MapFrom(
src => Regex.Replace(src.PhoneNumber, "(\\d{3})\\d{4}(\\d{4})", "$1****$2")))
.ForMember(
dest => dest.IdentificationNumber,
opt => opt.MapFrom(
src => Regex.Replace(src.IdentificationNumber, "(?<=\\w{3})\\w(?=\\w{4})", "*")))
.ForMember(
dest => dest.EmailAddress,
opt => opt.MapFrom(
src => Regex.Replace(src.EmailAddress, "(^\\w)[^@]*(@.*$)", "$1****$2")));
CreateMap<CreateUserDto, User>();
CreateMap<CreateUserDto, User>().ForMember(x => x.Roles, opt => opt.Ignore());
}
頁面中修改更新方式
【數(shù)據(jù)備份恢復(fù)】應(yīng)提供重要數(shù)據(jù)的本地數(shù)據(jù)備份與恢復(fù)功能
解決方案
在本地定期備份配置數(shù)據(jù)、業(yè)務(wù)數(shù)據(jù)。根據(jù)實際業(yè)務(wù)需求定期對備份數(shù)據(jù)進(jìn)行恢復(fù)測試,保存相關(guān)的恢復(fù)測試記錄。
實施
項目按照SQL server完全備份指南進(jìn)行備份作業(yè),文章來源:http://www.zghlxwxcb.cn/news/detail-417418.html
由運維人員定期對業(yè)務(wù)數(shù)據(jù)進(jìn)行異地備份,根據(jù)實際業(yè)務(wù)需求定期對備份數(shù)據(jù)進(jìn)行恢復(fù)測試,并對恢復(fù)測試進(jìn)行記錄文章來源地址http://www.zghlxwxcb.cn/news/detail-417418.html
到了這里,關(guān)于Abp框架Web站點的安全性提升的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!