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

建立应用软件注册安全机制-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年11月操作系统份额:Windows 7雄居第一,XP跌新低 微信开放平台上线统计报表功能 【向导】如何开始学习高伸缩性编程? 基于Apache Samza,揭秘LinkedIn架构背后的技术 Aeron:每秒可以传递数百万消息的低延时开源消息系统 英特尔物联网马拉松:用创造力改变生活 年末总结:2014年全球手游市场发展的六大趋势 Saber——模块化、组合式的移动前端框架 什么仇什么怨?还原日本反美颜应用Primo真面目 横跨2D与3D!专属C#开发者的超强游戏引擎Paradox 首份“2014年移动外语学习行业报告”等你下载 《近匠》Ayla联合创始人张南雄:物联网发展的三个阶段 神器 VisuAlgo:通过动画学习算法和数据结构 【工具推荐】QWrap——开源的前端JavaScript框架 老外看中国:移动应用UI设计的十大精髓 HTML5正名记:两家机构的博弈与一种标准的诞生 电池技术为何停滞不前?革新技术尚未出现 如何设计优雅的移动游戏? 前方高能!盘点2014年最颠覆三观的智能硬件 俄罗斯当局封杀GitHub,理由是教唆自杀 裁员110人、关闭工作室,Rovio重组求出路! 全Swift开发、代码开源!有钳的Firefox for iOS 详解开源游戏开发框架HaxePunk的主要特性 《程序员》杂志休刊通知 2014 TOP50最具价值CTO获奖名单揭晓! TIOBE 2014年12月编程语言排行榜:R和Swift成为年度语言候选者 免费增值应用正在“杀死”游戏开发者? 直接Mark!开源的DevOps开发工具箱 Apache Mesos联合创始人Benjamin Hindman:谈分布式应用现状 直觉不靠谱!使用移动应用分析的七个巧妙方法 屏蔽、挖角与丑闻,Uber的“创收神器”泡沫 骆驼您好,刚才没看到你的回贴的时候,那个贴我已经结贴了,我还有问题请教,请进,多谢。 请问哪里有VTune Profiler下载?据说它能分析VC代码中各函数所占用的开销 请问如何在ftp上收发xml文件。。。请具体点告诉我或贴源码或贴相关文章地址 文件解析 VC的OPENGL编程显示提示框时,显示内容是以前绘图的,不是最新绘图的,怎么办? 请问为什么create table bbb as select * from aaa ,aaa上面的缺省值还有索引都掉了呢? 如何在数据库里存文本文件? 用什么工具可以查看内存是否有泄露, Win2000上是什么, Win98上是什么 为什么用oledbadapter不能更新数据库阿? 软件陷阱问题 请问哪里有VTune Profiler下载?据说它能分析VC代码中各函数所占用的开销 在weblogic7.0上面jsp文件运行问题 请教关于打印遇到的问题 谁能个--报表例子(水晶报表。vb.net)--报表的数据源要是动态生成的。 利用WMI管理WINDOWS 请教:如何在chm帮助文件中执行应用程序。谢谢 Weblogic+Mysql的Jsp/Java程序的数据库该怎样连接?? 在java代码中引用php的变量?请问如何写? tclientdataset问题 急!!!!VFP触发器取值问题 怎么样才能卸载REDHAT8.0下的XMMS,而装7.3下的XMMS? 请教一个有关于对话框上控件重画的问题!谢谢! 有谁知道上海高程查分方法?急!!! 请教OleDbDataReader的用法 请教一个有关于对话框上控件重画的问题!谢谢! 请教一个简单问题,显示图形滞后的问题,有人回答过,但不正确。谢谢 大家有没有见过IIS不支持数据库的? 1700--2100 之间的手机,请大家帮我推荐一下,在NOKIA,MOTOROLA,厦新,波导……中选择!! 请问谁有?divx的资料?能提供下载也行! 请问如何把从数据库中读出来的数据显示在在线编辑器里? 请教:log,乘方(pow(x, y))运算用C语言如何实现? 如何在Domino designer中添加图像资源,在线等候 所有分求asp2dll破解版,急!在线等待!! zhwdan 还是朋友!多谢你了!快来看看啊! 多文档程序,怎样在选择某一菜单命令时使窗口最大化且不能改变大小,而不是在PreCreateWindow函数中设定?在线等待 LINUX 好多问题呀! 给高分 html文件在Unix系统下有大小写之分吗??我只知道他对CGI有大小写之分。在线等待。 在线等待 怎样使单文档程序中间凹下去的部分 变成 不是凹下的,使得整个界面看上去是一个平面的~~~谢谢~~~ 存储过程怪问题 哪个更划算? 关于delphi的ISAPI开发 用标准的C++怎么样才能调用Win系统API? 一点看法 自动运行的程序!!! 月薪2000加提成,怎么样? 请各位兄弟帮个忙 谁有JAVA与模式的电子版? 怎样更改一个按钮的标签?怎样知道我按的按钮是哪一个?(答对结帖) 请教关于远距离局域网连接的问题 如何遍历DataList中的TextBox? 女子整容成范冰冰照片曝光 网友惊呼:《中国好声音》哈林“野兽团队”狂舞 “好声音”今晚改编很颠覆 西北风改编第8届首尔电视剧大赏红毯 吴奇隆帅气哈林队导师考核结果猜想:网友最希望金胡歌白冰曝恋情 白冰心情大好晒美照女星70万购假包 揭秘女星天价包包文章耍大牌丑事曝光 小爸爸:“我杀你吴彦祖反串跳芭蕾“肌肉版”小天鹅笑死好声音哈林组导师考核精彩学员抢先看蘑菇兄弟VS戴荃 大胆改编《妹妹你大《兰陵王》郑儿毛林林华丽写真 告别蛇好声音哈林组导师考核明晚收官 90后好声音梦想导师ELLA太抢戏 庾澄庆新《神雕》演员定妆照曝光 张馨予版李“好声音”在台受追捧 即将亮相台湾中好声音上演旧曲新编 哈林分组选曲改编孙杨向观众鞠躬不慎掉进泳池 萌死啦花样游泳文婷姐妹含泪退役 点滴记录赛盘点巴黎时装周打酱油的明星 精心装扮郑爽杨幂《古剑奇谭》横店拍摄花絮照女足世界杯江苏小妮成焦点第B13版杨旭: 忘掉鲁能的不快汪涵般的口才立即启动长江江苏段搜寻工作老戏骨们撑起爱情热剧愿逝者安息峡湾狩猎小宝的遗传哲学杨旭: 忘掉鲁能的不快欧文骨折赛季提前报销 詹皇坚信骑士逆香港江苏社团总会访问团来我省考察女足世界杯江苏小妮成焦点南师大新传院迎20年院庆曲奇饼果真曲折离奇全省多地督查高考考生就餐食堂大四班的毕业歌为了能和你 愉快地玩耍马云获颁台湾师范大学名誉博士第四届中美韩泌尿外科、男科新技术峰会唐山面向高校大学毕业生及社会招收首批
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘