说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

建立应用软件注册安全机制-Delphi资料

HTML文档下载 WORD文档下载 PDF文档下载
建立应用软件注册安全机制-Delphi资料

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

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

实 现 步 骤 如 下:

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

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

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

表1 表Users.DB 的 结 构

域 名 类 型 大 小 关 键 字 说 明

Name A 16 * 用 户 名

Password A 16 * 注 册 口 令

Fullname A 32 用 户 全 名

Group I 用 户 组 号

Enabled L 注 册 允 许

4 . 设 定Name

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

5 . 用 口 令"UserPassword" 保 护Users.DB 表

存 于Data 目 录 下。 利 用Database Desktop 向 表 中 输 入 若 干 样 本 用 户( 见 表2), 然 后 关 闭Database Desktop。

表2 表Users.DB 的 样 本 用 户

Name Password Fullname Group Enabled

Supervisor AAAAAA Super User 0 True

Director BBBBBB Director User 1 True

Guest     3 True

User1 CCCCCC General User1 1 False

User1 DDDDDD General User1 2 True

User2 EEEEEE General User2 3 True

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

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

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

procedure TMainForm.FormActivate(Sender: TObject);

begin

if Time< =StrToTime('12:00:00') then

Caption:=' 上 午 好, 您 已 成 功 登 录 !'

else

Caption:=' 下 午 好, 您 已 成 功 登 录 !';

// 显 示 登 录 用 户 信 息、 登 录 日 期 和 时 间

NameEdit.Text:=LoginUser.UserName;

FullNameEdit.Text:=LoginUser.UserFullName;

GroupEdit.Text:=IntToStr(LoginUser.UserGroup);

DisplayDateEdit.Text:=DateToStr(Date);

DisplayTimeEdit.Text:=TimeToStr(Time);

end;

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

组 件 属 性 设 置

Form1 Caption

Name MainForm

Position poScreenCenter

GroupBox1 Caption 用 户 信 息

Label1 Caption 用 户 名 称:

Label2 Caption 用 户 全 名:

Label3 Caption 用 户 组 号:

Label4 Caption 登 录 日 期:

Label5 Caption 登 录 时 间:

Edit1 Name NameEdit

Edit2 Name FullnameEdit

Edit3 Name GroupEdit

Edit4 Name DisplayDateEdit

Edit5 Name DisplayTimeEdit

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

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

组 件 属 性 设 置

Table1 DatabaseName UserInfo

Name UsersTable

TableName Users.DB

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

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

组 件 属 性 设 置

Form2 ActiveControl UserNameEdit

Caption 请 注 册

Name LoginDialogForm

Position poScreenCenter

Label1 Caption 用 户:

Label2 Caption 密 码:

Edit1 Name LoginNameEdit Text

Edit2 Name PasswordEdit PasswordChar * Text

BitBtn1 Caption 注 册(&L)

Enabled False

Kind bkOK

Name LoginBitBtn

BitBtn2 Caption 取 消(&C)

Enabled True

Kind bkCancel

Name CancelBitBtn

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

uses Classes

Forms

Sysutils;

type

TApplicationUser=class(TComponent)

private

FUserName: string;

FFullName: string;

FUserGroup: Integer;

public

property UserName: string read FUserName write FUserName;

property UserFullName: string read FFullName write FFullName;

property UserGroup: Integer read FUserGroup write FUserGroup;

end;

var

LoginUser: 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;

try

Session.AddPassword('UserPassword');

LogDataModule.UsersTable.Open;

//注册信息处理

if not LogDataModule.UsersTable.FindKey([LoginNameEdit.Text

PasswordEdit.Text]) then

begin

//处理注册次数

dec(CountDown);

if CountDown< =0 then ModalResult:=mrCancel else

begin

MessageBeep($FFFF);

Application.MessageBox('请您重试一次!'

'无效注册信息'

mb_iconstop+mb_OK);

//重设输入焦点

LoginNameEdit.SetFocus;

end;

exit;

end;

//检查注册允许值

if not LogDataModule.UsersTable.FieldByName ('Enabled').AsBoolean then

begin

MessageBeep($FFFF);

Application.MessageBox( '抱歉,您不能进入系统!'

'使用权限终止'

mb_iconexclamation+mb_OK);

ModalResult:=mrCancel;

exit;

end;

//获取注册用户信息

with LogDataModule do

begin

LoginUser.UserName:=UsersTable.

FieldByName('Name').AsString;

LoginUser.UserFullName:=UsersTable.

FieldByName('Fullname').AsString;

LoginUser.UserGroup:=UsersTable.

FieldByName('Group').AsInteger;

End;

ModalResult:=mrOK;

//关闭表,清除密码

finally

LogDataModule.UsersTable.Close;

Session.RemovePassword('UserPassword');

end;

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

uses MD

Addition;

15 . 打 开 过 程 文 件Register.dpr, 在uses 语 句 中 加 入"Controls", 将 "Application.run;" 改 为 下 列 语 句, 只 有 注 册 成 功 时 才 启 动 系 统, 同 时 释 放 注 册 窗 体

以 确 保 安 全 和 减 少 内 存 占 用。

if LoginDialogForm.ShowModal=mrOK then

begin

LoginDialogForm.Free;

Application.Run;

end;

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

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

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

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

上 述 方 案 具 有 以 下 特 点:

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

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

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

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

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

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

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

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

2014腾讯WE大会:开启未来的五大科技发展趋势 TIOBE 2014年11月编程语言排行榜:R受大数据影响跃至12位 深圳微信开发者大会全部议程出炉 最后仅剩30个参会名额 智能硬件:一半海水,一半火焰 聚焦SDN、NFV、云安全基础架构等技术热点 2014云安全联盟高峰论坛即将召开 富Web应用开发的七大原则 应用原型设计毫无压力!开源Sketch插件管理器Sketch Toolbox 【MDCC专访】友盟副总裁焦岳:从36万款App,看今年的热门领域 一切只为经典 微信开发者大会前瞻(附议程) 从手势识别到增强现实,开发实感应用该了解的技术细节 福利来了,爱拍原创免费为iOS版手游制作宣传视频 【工具推荐】Zrender——轻量级Canvas类库,让绘图大不同! 基于Docker和CoreOS的开源PaaS平台——Deis v1.0正式发布! 微软宣布.NET开发环境开源 支持三大操作系统 爆发吧,诺基亚!前员工开发物联网新设备 详解Visual Studio Emulator for Android,微软的Mobile First! HPC China 2014完美落幕,AMD Firepro荣获好评! 揭秘微软的Container技术之一Drawbridge AWS副总裁谈数据中心网络打造 【最具价值CTO评选秀】出门问问CTO雷欣:从技术极客到核心管理的秘密 《近匠》APICloud:“云”+“端”一体的移动API提供者 Oculus移动SDK发布!John Carmack操刀、集成Unity 4.5 11月15日深圳见!深圳微信开发者大会公布全部议程 参与2014中国大数据行业大调查 BDTC门票等你拿 HTML5规范尘埃落定,5个开发工具推荐 盘点最受开发者喜爱的Android 5.0 Lollipop API IoE Day侧记:想开发智能硬件?先要弄明白这几个问题 【问底】许鹏:使用Spark+Cassandra打造高性能数据分析平台(二) 微软承诺所有Lumia WP8设备将升级至Win10,用户会买账吗? 周末,深圳微信开发者大会等您来!(参会必读+名单) 营造云安全生态链 第五届云安全联盟高峰论坛在京顺利召开 请教ATL中CBindStatusCallback的问题 我的IE不能打开新窗口?用鼠标左键点击超链接没有反应? 我的项目改变目录后打不开,怎么办? 多CPU机器,同时可有几个线程处于运行状态? 高分求高效高斯模糊算法。。 如何判断软件是否过期 是不是运行ASP.Net应用的服务器必须安装.Net FrameWork呢?还是只要有Win2000 Server和IIS就行。 谈情说爱 清除内存中用call调用的脚本文件? 一个很老的问题,如何避免CListCtrl闪烁。 请大家给看看程序:avi视频读取和重建 研究数字图像处理应该那些知识? 图片上传并显示实例(VB+SqlServer2000) SQL语言中 怎样将CHAR型转换成INT型? 級連更新... 怎么实现回车自动跳到下一个位置 如何在光标处插入字符? CSSCLASS高手关注,我想把ListBox、DropDownList样式改为平面,而且颜色边框为1颜色不为灰色,用CssClass具体怎么写呢?越详细越好?多谢 求一招:::怎么对付那些那了代码就不给钱的家伙???? =========发誓:远离csdn!================ phpmyadmin为何安装不成功? 谁有crystal reports的电子书。 这个radio的返回值是什么? 离开csdn,公布密码!!!!!!!!! 新手!求界面问题的答案! javascript面相对象的编程 IMail邮件系统的问题 七月七,我不在她身旁. 可是很想她.我爱她. 高分!求一简单问题。 今天七月七了,代表所有单身人员向全体女单身同胞问好,同时也祝成双成对的人永远快乐!! 请问php中二维数组怎么定义和初始化? 难题---SQL Panel2.Width/2;应该怎样改 求: Rational XDE 2003 (带破解的),分不够可以再加,要多少给多少,很急! 这个存储过程怎样调用? 在有限区域中打印文本,文本长度若超出,则压缩间距,否则正常显示 急,高手请进! 如何重新加载select? 怎样做一个网页编辑器(windows form)大家给个思路 强烈建议 删除 {{轰动上海大学的偷拍事件录像下载地址 (yy795188 ) }}的贴子,否则版主失职 用Authorware能够作出象隐藏在框架里的菜单吗? 我的程序需要定期执行一次,怎么写呢? 请各位大侠帮忙分析分析,我大概还有300分的可用分,解决的话,全送你了(300分) 日历 这是Mysql的BUG吗--彬、斌--如何分别查询 如何利用XML中的xsl进行信息的交换 为什么我新建项目时不行? 求教:有没有象outlook一样的文件管理软件?? 怎樣利用datalink和可更新快照進行雙机數据同步一制備份?急救!急救!在線等待!! 我学flash怎样才能入门了~~!我现在不知道怎么下手~~! 请问这个ASP文件怎么转成JS文件以便调用?? 芝加哥农产品期价23日全线上扬香港幸存游客称不能接受菲政府信口开河美称全国600只宠物疑食中国产狗粮而叙利亚政府释放14名女囚 实施三边俘辛格获历史性机会印媒兴奋两国领导人“潘基文呼吁扩大气候融资领域 使投资流香港幸存游客称不能接受 思索如何面对阿基诺重申\"不道歉\" 港幸存游客沙特暗示拒任“非常”是针对美国美研究智能手机遥控空袭无人机空袭成巴美关系绊脚石澳门人口59.82万两代身份证出生日期不同死亡赔偿金额如[个论]赵晓专栏:万科涉足银行业的阳广州个人住房信息可自助查询这几天,孙杨处处享特权实事求是男子刀劫人质 老乡苦劝救人“无人区”建大工业上下班都曾是苦差事深圳人大代表呼吁香港限期关闭临近深圳空气严重污染 停驶3成公务车最长寿双胞胎喜迎104岁生日
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘