建立应用软件注册安全机制

阿亞灬承

阿亞灬承

2016-02-19 17:27

生活已是百般艰难,为何不努力一点。下面图老师就给大家分享建立应用软件注册安全机制,希望可以让热爱学习的朋友们体会到设计的小小的乐趣。

  软件的安全性是个永恒的话题, 一直困扰着人们,程序员们常常因此熬夜。Novell公司的网络操作系统NetWare 以其完善可靠的安全管理机制著称,为实现用户登录的安全性和防止非法入侵者闯入,系统提供了几种有效的限制措施和检测功能。本文讨论如何 建立完善的软件注册安全机制,有效地管理用户登录,为应用软件提供可靠的保护,并在Delphi3.0下实现。

  Delphi作为一个优秀的编程工 具,功能极其强大,令开发周期大大缩短,生成的代码运行速度快,使得Windows 软件设计成为一种乐趣。基本思路是:建立Paradox格式的用户帐户表Users.DB,并加密保护,由管理员维护。预先在此表中登记并有注册权限的用户,可持本人有效口令登录进入系统。

  实现步骤如下:

  1.在应用软件主目录(假设为C:Register) 下创建两个子目录,分别命名为Login和Data。

  2.从Delphi的Tools菜单中启动Database Desktop,并选择Tools/AliasManager创建一个新别名。方法是:在Alias Manager对话框中点New,给出新别名UserInfo,并指向C:RegisterData 目录,按KeepNew、OK等按钮保存新别名。

  3.利用DatabaseDesktop创建Paradox 5.0forWindows数据表Users.DB,结构见表1。事实上,对于商业软件还需要更多的域。

  表1表Users.DB的结构

  域名类型大小关键字说明

  NameA16*用户名

  PasswordA16*注册口令

  FullnameA32用户全名

  GroupI用户组号

  EnabledL注册允许

  4.设定Name,Group和Enabled 为非空域(RequiredField),Group的最小值为0,最大值为3,默认值为3,Enabled的默认值为True。用户组0为系统管理员,可进行几乎任何操作;用户组1为 软件操作人员,可进行除用户帐户管理以外的操作,包括建立和删除数据;用户组2为普通用户,可使用系统资源,无修改权限,而用户组3仅可浏览系 统有限信息。

  5.用口令UserPassword 保护Users.DB表,存于Data目录下。利用DatabaseDesktop向表中输入若干样本用户(见表2),然后关闭DatabaseDesktop。

  表2表Users.DB的样本用户

  NamePa ordFullnameGroupEnabledSupervisorAAAAAASuper User 0TrueDirectorBBBBBBDirector User1TrueGuest  3TrueUser1CCCCCCGeneral User11FalseUser1DDDDDDGeneral User12TrueUser2EEEEEEGeneral User23True

  表2显示,允许同一用户以不同身 份(用户组)登录进入系统,享有不同的权限。如用户User1,以不同密码登 记,分属用户组1和2。

  6.返回DelphiIDE,新建项目Register.dpr 并存入C:Register目录,主窗体单元命名为Main.pas。用户注册成功后,方能启动主窗体进入系统。本系统仅显示用户信息及登录的日期和时间以 表示注册成功(见图5),并不做其它任何事情,这里便是读者应用系统的接口。为此,在主窗体上放入一个TGroupBox组件,TLabel和TEdit组件各五个。 将所有TEdit的Text属性清空,ReadOnly属性值设为True,窗体和组件其余属性按表3设置。

  7.创建主窗体的OnActivate事 件处理程序,登录成功并激活主窗体时执行,显示用户信息、登录日期和时 间。过程如下:

  

procedureTMainForm.FormActivate(Sender:TObject);beginifTime=StrToTime(12:00:00)thenCaption:=上午好,您已成功登录!elseCaption:=下午好,您已成功登录!;//显示登录用户信息、登录日期和时间NameEdit.Text:=LoginUser.UserName;FullNameEdit.Text:=LoginUser.UserFullName;GroupEdit.Text:=IntToStr(LoginUser.UserGroup);DisplayDateEdit.Text:=DateToStr(Date);DisplayTimeEdit.Text:=TimeToStr(Time);end;

  表3主窗体中组件属性设置

  组件属性设置

  

Form1CaptionNameMainFormPositionpoScreenCenterGroupBox1Caption用户信息Label1Caption用户名称:Label2Caption用户全名:Label3Caption用户组号:Label4Caption登录日期:Label5Caption登录时间:Edit1NameNameEditEdit2NameFullnameEditEdit3NameGroupEditEdit4NameDisplayDateEditEdit5NameDisplayTimeEdit

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  8.数据模板。选择File/NewData Module建立数据模板LogDataModule,放入一个Ttable组件,如图1。属性 按表4设置,命名其单元为MD.pas,存入Login目录。

  表4数据模板中组件属性设置

  组件属性设置

  

Table1DatabaseNameUserInfoNameUsersTableTableNameUsers.DB

  9.创建注册窗体。选择File/New Form创建一个新窗体,并加入组件TLabel、TEdit和TbitBtn各两个。窗体和组件属性按表5设置,命名其单元为Login.pas,存于Login目录。

  表5注册窗体中组件属性设置

  组件属性设置

  

Form2ActiveControlUserNameEditCaption请注册NameLoginDialogFormPositionpoScreenCenterLabel1Caption用户:Label2Caption密码:Edit1NameLoginNameEditTextEdit2NamePasswordEditPasswordChar*TextBitBtn1Caption注册(&L)EnabledFalseKindbkOKNameLoginBitBtnBitBtn2Caption取消(&C)EnabledTrueKindbkCancelNameCancelBitBtn

  10.选择File/New命令,从NewItems 的New页中选择Unit项建一个无窗体单元Addition.pas存入Login目录,在其interface段输入下列语句:

  

usesClasses,Forms,Sysutils;typeTApplicationUser=class(TComponent)privateFUserName:string;FFullName:string;FUserGroup:Integer;publicpropertyUserName:stringreadFUserNamewrite FUserName;propertyUserFullName:stringreadFFullName writeFFullName;propertyUserGroup:IntegerreadFUserGroup writeFUserGroup;end;varLoginUser:TApplicationUser;

  在implementation段加入下列语句:

  initialization

  LoginUser:=TapplicationUser.Create(Application);

  11.创建注册窗体(LoginDialogForm) 的OnCreate事件处理程序。在private段中声明CountDown为Integer变量,作为计数器,并将下述语句插入begin与end之间:

  CountDown:=3;//允许尝试注册3次

  12.建立用户名输入框(LoginNameEdit) 的OnChange事件处理程序,使窗体LoginDialogForm创建时注册按钮为灰色,用户输入登录名后才可用。不难实现,源代码略。

  13.创建注册过程。双击注册按 钮(LoginBitBtn),在begin和end之间输入其OnClick事件处理程序代码:

  

ModalResult:=mrNone;trySession.AddPassword(UserPassword);LogDataModule.UsersTable.Open;//注册信息处理ifnotLogDataModule.UsersTable.FindKey([LoginNameEdit.Text,PasswordEdit.Text]) thenbegin//处理注册次数dec(CountDown);ifCountDown=0thenModalResult:=mrCancel elsebeginMessageBeep($FFFF);Application.MessageBox(请您重试一次!,无效注册信息,mb_iconstop+mb_OK);//重设输入焦点LoginNameEdit.SetFocus;end;exit;end;//检查注册允许值ifnotLogDataModule.UsersTable.FieldByName(Enabled).AsBoolean thenbeginMessageBeep($FFFF);Application.MessageBox(抱歉,您不能进入系统!,使用权限终止,mb_iconexclamation+mb_OK);ModalResult:=mrCancel;exit;end;//获取注册用户信息withLogDataModuledobeginLoginUser.UserName:=UsersTable.FieldByName(Name).AsString;LoginUser.UserFullName:=UsersTable.FieldByName(Fullname).AsString;LoginUser.UserGroup:=UsersTable.FieldByName(Group).AsInteger;End;ModalResult:=mrOK;//关闭表,清除密码finallyLogDataModule.UsersTable.Close;Session.RemovePassword(UserPassword);end;

  14.在Main.pas单元的uses中 加入Addition,在Login.pas单元的implementation段增加uses 语句:

  usesMD,Addition;

  15.打开过程文件Register.dpr, 在uses语句中加入Controls,将Application.run;改为下列语句,只有注册成功时才启动系统,同时释放注册窗体,以确保安 全和减少内存占用。

  

ifLoginDialogForm.ShowModal=mrOKthenbeginLoginDialogForm.Free;Application.Run;end;

  16.编译、运行。注册窗口见图2, 输入用户名和密码后点注册按钮。

  如果注册信息有误,系统出现提 示框,允许重新注册,见图3。若三次尝试均不成功,注册窗口将保护性关闭。

  访问权已被管理员终止的用户(Enabled 的值为False),例如用户User1以口令CCCCCC注册至用户组1,系统拒绝进入。

  注册成功后将启动系统主程序。 例如用户Supervisor以口令AAAAAA注册。

  上述方案具有以下特点:

  1.Supervisor用户具有至高无 上的权利,由系统创建,不能删除,仅Password和Fullname字段的值允许自行修改。主要负责系统维护和用户帐户管理等工作,是系统的永久性特权用户。

  2.确保用户帐户表Users.DB的 安全致关重要,本方案采用了较为可靠的关键性技术,就是注册过程(见步 骤13)中tryfinallyend结构的应用。仅当用户按下注册按钮时,注册模块转送表Users.DB的密码并将其打开,以处理 注册信息。而无论成功与否,在finally部分都能及时关闭表Users.DB,并立即清除内存中的密码。

  3.用户帐户管理模块设在主程序中,完成表Users.DB的维护功能,包括建立用户帐户和用户组,增、删用户,分配访问权限等。只有Supervisor或其授权用户才可进入。

  4.组帐户管理:用户按不同级 别分组,再按组进行权限分配,以简化管理。如系统可根据登录用户所属的用户组,十分方便地屏蔽相应菜单项,以达到限制用户使用权限的目的。对用户群大的系统,此项技术的优越性尤为显著。

  5.默认帐户限制:建立用户帐户时,系统默认其Group=3,仅具备浏览有限信息之权限,不致因管理员一时疏忽使新建用户越权使用,危及系统安全。

  6.单独帐户限制:用户注册时,必须提供完整的个人有效信息才能进入系统。

  7.注册允许限制:管理员可随时取消或恢复单个用户、用户组甚至系统所有用户(Supervisor除外)的注册权限,只需设置注册允许字段Enabled的值为False或True。

  8.非法入侵限制:三次注册尝 试不成功便保护性关闭注册窗口,以防非法非法入侵者无限制尝试。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  本文介绍了应用软件注册安全性 问题的综合解决方案,容易实现,便于扩充如增加注册时间限制和记帐收费功能等,可建立较完善的注册安全机制,适合大型商用软件开发。

展开更多 50%)
分享

猜你喜欢

建立应用软件注册安全机制

编程语言 网络编程
建立应用软件注册安全机制

自动记录应用软件工作

编程语言 网络编程
自动记录应用软件工作

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

蹲坑必备应用软件大推荐

手机软件 应用软件
蹲坑必备应用软件大推荐

查看应用软件Hosts的方法

软件教程
查看应用软件Hosts的方法

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

苹果iPhoneSE如何下载应用软件

手机软件 应用软件
苹果iPhoneSE如何下载应用软件

学生必备10款手机应用软件

手机软件 应用软件
学生必备10款手机应用软件

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Win 8.1新功能支持NFC打印及WiFi热点

Win 8.1新功能支持NFC打印及WiFi热点

CSS技巧:我们一起认识CSS闭合浮动元素

CSS技巧:我们一起认识CSS闭合浮动元素
下拉加载更多内容 ↓