本文將從GB/T 22239《資訊保安技術 網路安全等級保護基本要求》規定的安全計算環境中解讀、摘要若干安全要求,結合Abp框架,對站點進行安全升級。
設定密碼最小長度
密碼由數位、字母和特殊字元組合而成
設定密碼每隔90天需要更換一次
在AbpSettings表中設定開啟PasswordComplexity密碼複雜度校驗,設定密碼最小長度為7位
設定密碼強制過期策略,參考用Abp實現找回密碼和密碼強制過期策略
登入後無操作15分鐘,系統自動退出登入狀態。
連續登入失敗5次後,鎖定賬戶15分鐘
在WebCoreModule中,將Jwt Bearer Token的過期時間從預設的1天改為15分鐘
設定使用者登入失敗鎖定
預設將新增使用者的IsLockoutEnabled開啟
public User()
{
this.IsLockoutEnabled = true;
}
在AbpSettings表中設定開啟使用者登入失敗鎖定,並設定失敗嘗試次數和鎖定時長
採用兩種以上組合的鑑別技術對使用者進行身份鑑別,採用使用者名稱+手機簡訊驗證碼方式登入
對Abp框架改造,加入兩步驗證功能,參考用Abp實現兩步驗證(Two-Factor Authentication,2FA)登入(一):認證模組
刪除或者禁用預設賬戶,
禁用超級管理員,
設定獨立的審計管理員、安全管理員等。
更改AbpPermissions,AbpRoles,AbpUserRoles表,合理安排使用者角色的許可權設定。
限制管理員的登入地址範圍,僅允許特定IP進行登入管理。
使用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),
};
}
}
在身份驗證終節點方法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不在允許的列表中");
}
}
檔案系統中設定僅允許業務相關的檔案型別上傳
"FileStorage": {
...
"AllowOnlyConfiguredFileExtensions": true,
"FileExtensionsConfiguration": ".jpg,.png",
}
設定上傳文字中高危指令碼過濾,參考[Asp.Net Core] 網站中的XSS跨站指令碼攻擊和防範
審計紀錄檔儲存6個月以上。
對AbpAuditLogs中的資料定期異地備份,儲存時長至少6個月以上。
使用加密轉換器對身份證號欄位進行加密儲存,參考在EF Core中為資料表按列加密儲存
modelBuilder.Entity<User>().Property(c => c.IdentificationNumber).HasConversion<EncryptionConverter<string>>();
修改User到UserDto的欄位對映,對手機號,身份證號和郵箱地址進行正則替換。
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());
}
頁面中修改更新方式
在本地定期備份設定資料、業務資料。根據實際業務需求定期對備份資料進行恢復測試,儲存相關的恢復測試記錄。
專案按照SQL server完全備份指南進行備份作業,
由運維人員定期對業務資料進行異地備份,根據實際業務需求定期對備份資料進行恢復測試,並對恢復測試進行記錄
本文來自部落格園,作者:林曉lx,轉載請註明原文連結:https://www.cnblogs.com/jevonsflash/p/17329317.html