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

2016-02-19 17:27 0 1 收藏

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

【 tulaoshi.com - 编程语言 】

  软件的安全性是个永恒的话题, 一直困扰着人们,程序员们常常因此熬夜。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

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

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

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

  组件属性设置

  

Table1DatabaseNameUserInfoNameUsersTableTableNameUsers.DB

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

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

  组件属性设置

  

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

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

  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://www.tulaoshi.com/n/20160219/1615244.html

延伸阅读
标签: windows 操作系统
提到“系统安全”这样的字眼,相信多数人会条件反射地想到各种防火墙工具、防病毒软件等,并且会片面认为只要在系统中有了它们的存在,系统安全就会高枕无忧。其实,系统的安全单纯靠“防”是防不住的,还需要你有足够的安全意识。你对系统进行操作的一举一动都可能在系统“暗角”留下访问痕迹,这些痕迹要是不及时被清理的话,就很有可能带...
标签: 电脑入门
点击任务栏中的搜索,输入PowerShell,然后在搜索结果中右键单击PowerShell,选择以管理员身份运行。 微软提供Win10自带Modern应用快速卸载方法 微软提供Win10自带Modern应用快速卸载方法 在PowerShell中输入下面的命令回车稍等片刻就可以将当前账户中的所有预装应用都删除。注意,过程中可能会出现错误提示,不过这并不影响最终效果...
ios9.3怎么删除iPhone自带应用软件   大家在使用iphone手机的时候,由于ios系统会内置不少预装软件,一些用户就会想要删除一些完全用不到的自带应用,那么ios9.3已经可以让用户删除iphone预装程序了哦,ios9.3怎么删除iPhone自带应用软件,下面图老师小编就给大家带来ios9.3删除iPhone内置预装应用教程 之前介绍过,ios9.3增加了...
要充分发挥电脑的作用,就得有大量的应用软件,完成不同的工作。在Windows环境中安装各种应用软件的思路与方法,想必大家早已熟悉。然而,在使用Linux时,我们却总会被这些本不应该是问题的问题所困扰:怎么安装应用软件?我的软件安装在什么地方?如何删除不要的应用软件?…… 下面,我们就一起来认识一下这些方面的知识。 一...
Linux这种开放源代码操作系统还没有引起Adobe、Macromedia、Intuit等主流台式机软件厂商的注意,对于Linux的支持者来说而言,无疑是一个很大的遗憾。但他们仍然坚信,Linux将在台式机领域取得和服务器领域内同样的成功,软件厂商、开放源代码支持者对在缺乏Quicken、Photoshop等软件的支持的情况下,台式机Linux能否“欣欣向荣”这一问题上...

经验教程

788

收藏

49
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部