软件安全2Word格式文档下载.docx
《软件安全2Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《软件安全2Word格式文档下载.docx(26页珍藏版)》请在冰点文库上搜索。
3)系统平台要求
WINDOWSXP以上。
5、实验内容及要求
1)实验基础(必要的基础知识)
系统是按照一定的结构组织起来的、完成某种功能目标的多种相互作用、相互依存的元素组成的一个有机整体。
系统的主要特性可以概括为:
整体性—系统的各个部分一定以整体目标为目标,追求全局最优;
目的性—一个系统一定是具有明确目标的,并完成一定的功能;
层次性—一个系统可以分为若干层次和子系统;
边界性—每一个系统都能够明显地区别于其他系统,系统之间有明确的界限;
关联性—系统包括若干元素,元素之间存在一定的关联性;
环境性—系统处于一定的环境之中并受环境影响。
而IS的主要特征包括:
一定是依赖于计算机的;
涉及了计算机的软件和硬件;
实现数据的采集、传递、加工、处理功能。
在一个信息系统的实施过程中,有一些非常典型的问题[3,4,5],通过对文献[3,4,5]的研究并结合工程经验,可以看到对一个信息系统的安全威胁来自于系统的内部和外部:
外部的恶意攻击者;
外部的意外闯入者;
内部的合法授权用户;
内部不当获得授权的用户。
在系统实施中,IS的安全问题常常体现为:
如何使经理或管理者消除对敏感信息失密的顾虑?
系统管理员是否可信?
系统第一次如何启动?
即如何使用户获得第一次权限?
如何建立一个可信的口令机制?
如何确认某个操作人员的行为?
在登录控制界面,完成的主要功能包括:
口令验证;
口令修改;
口令数据的加密;
登录时间记录。
关于登录控制的设计主要考虑:
(1)用户ID
输入用户ID,从权限数据中提取出相应的用户名。
采用用户编号的原因是回避重名,简化输入,同时用户号本身也可以增加一定的安全性。
(2)用户修改口令,而不是系统管理员
系统管理员对用户授权,但是口令由用户在用户界面输入,并加密存储至后台数据库中,以避免系统管理员获取用户口令造成泄密。
(3)初始口令的安全
系统的第一次运行关键是初始口令的赋予,由信息主管(或其他高层)完成用户身份的确认,同时要求用户第一次登录时必须更改初始口令。
(4)口令安全
系统口令安全机制要求:
口令长度限制;
口令字符集限制;
口令有效期限制。
(5)用户封锁
当出现用户多次登录系统失败的情况时,系统将锁定用户的操作并提示,解锁过程必须由系统管理员完成。
2)实验步骤
第1步:
设计和登录控制相关的数据库,写出数据库设计文档;
第2步:
利用ACCESS构建数据库;
第3步:
配置ODBC数据源,作为访问数据库之用;
第4步:
利用VisualBasic或者VisualC++开发系统登录窗口;
第5步:
同上,开发完成后台数据库管理窗口,实现权限管理;
第6步:
验证登录过程,检查数据库中的登录数据。
第7步:
完成实验报告,写出自己的设计思路和对信息系统权限及登录控制内容的考虑,写明自己设计的理由。
3)实验注意事项
(1)数据库的设计应该在课下完成;
(2)文档的写作在课下完成,注意提交;
(3)建议采用VisualBasic实现,开发效率较高。
三、实验开设方式
1)小组实验,建议每组人数3人;
2)无实验授课;
3)无实验占有时间。
用户和管理员登录界面以及后台代码
前台界面:
<
Windowx:
Class="
MainWindow"
xmlns="
xmlns:
x="
Title="
Height="
320"
Width="
303"
>
<
Grid>
LabelContent="
用?
户§
登?
录?
"
39"
HorizontalAlignment="
Left"
Margin="
91,12,0,0"
Name="
Label1"
VerticalAlignment="
Top"
100"
FontSize="
20"
/>
名?
:
阰"
28"
12,75,0,0"
Label2"
TextBoxHeight="
Right"
0,75,12,0"
TextBox1"
186"
12"
/>
密ü
码?
:
12,144,0,0"
Label3"
CheckBoxContent="
管ü
理え?
员±
26"
12,190,0,0"
CheckBox1"
ButtonContent="
修T改?
23"
12,242,0,0"
Button1"
98"
Click="
changePass"
171,242,0,0"
Button2"
login"
PasswordBoxHeight="
83,144,0,0"
PasswordBox1"
/Grid>
/Window>
后台代码:
ImportsSystem
ImportsSystem.Data.OleDb
ImportsSystem.Windows.Data
ImportsSystem.Data
ImportsSystem.Data.SqlClient
ClassMainWindow
PrivateSubchangePass(ByValsenderAsSystem.Object,ByValeAsSystem.Windows.RoutedEventArgs)
DimchangePassAsWindow1=NewWindow1()
changePass.Show()
Close()
EndSub
PrivateSublogin(ByValsenderAsSystem.Object,ByValeAsSystem.Windows.RoutedEventArgs)
DimuserAsString=TextBox1.Text
DimpassAsString=PasswordBox1.Password
DimsqlAsString="
selectpassworldfromDatabase3.userwhereUname="
+"
'
+user+"
;
Ifuser="
root"
Andpass="
AndCheckBox1.IsCheckedThen
DimadminAsadmin=Newadmin()
admin.Show()
Else
DimrealPassAsString=fillDataGridView(sql)
IfrealPass<
FalseAndrealPass=passThen
MessageBox.Show("
正y确ā?
)
错洙?
误ó
或ò
EndIf
PrivateFunctiongetAccessConnection()AsOleDbConnection
DimdbConnectionStringAsString="
Provider=Microsoft.Jet.OLEDB.4.0;
DataSource=|DataDirectory|\Database3.mdb;
PersistSecurityInfo=true"
DimdbConnectionAsOleDbConnection=NewOleDbConnection(dbConnectionString)
Try
dbConnection.Open()
CatchExAsException
MessageBox.Show(Err.Description)
EndTry
ReturndbConnection
EndFunction
PrivateFunctionfillDataGridView(ByValsqlStrAsString)
DimDataAdapterAsNewOleDbDataAdapter
DimdataSetAsNewDataSet
DimDataGridAsNewDataGrid
DimdbConnectionAsOleDbConnection=getAccessConnection()
IfdbConnection.State.ToString="
Closed"
Then
MsgBox(Chr(13)&
"
access数簓据Y库a连?
接ó
失骸?
败悒?
&
Chr(13),,"
警ˉ告?
ReturnFalse
DataAdapter.SelectCommand=NewOleDbCommand(sqlStr,dbConnection)
DataAdapter.Fill(dataSet,"
Table"
REMDataGrid.DataSource=dataSet.Tables("
).DefaultView
DimdataTableAsDataTable=dataSet.Tables("
DimrowAsDataRow
ForEachrowIndataTable.Rows
DimcolumnAsDataColumn
ForEachcolumnIndataTable.Columns
Returnrow(column)
Nextcolumn
Nextrow
MsgBox(Err.Description)
Finally
dataSet.Dispose()
EndClass
管理员界面
前台代码:
admin"
300"
420"
Loaded="
Window_Loaded"
151,12,0,0"
106"
全?
选?
16"
24,50,0,0"
删?
除y"
71,46,0,0"
50"
Button1_Click"
127,46,0,0"
57"
Button2_Click"
/Button>
DataGridAutoGenerateColumns="
False"
174"
12,87,0,0"
DataGrid1"
374"
ItemsSource="
{Binding}"
SelectionUnit="
FullRow"
SelectionMode="
Single"
CanUserAddRows="
>
DataGrid.Columns>
DataGridCheckBoxColumnHeader="
择?
40"
IsReadOnly="
/>
DataGridTextColumnHeader="
ID"
Binding="
{BindingId}"
True"
100"
{BindingName}"
{BindingPass}"
是?
否?
锁?
定¨
85"
{BindingLock}"
/DataGrid.Columns>
/DataGrid>
添?
加ó
190,46,0,0"
Button3"
62"
Button3_Click"
258,46,0,0"
Button4"
63"
Button4_Click"
刷¢新?
327,46,0,0"
Button5"
51"
Button5_Click"
Popupx:
Name="
popup"
PopupAnimation="
Fade"
PlacementTarget="
{BindingElementName=Button2}"
Placement="
Center"
AllowsTransparency="
StaysOpen="
IsOpen="
250"
150"
BorderBorderBrush="
Gray"
BorderThickness="
2"
StackPanelBackground="
White"
38"
Name="
StackPanelOrientation="
Horizontal"
LabelContent="
新?
11"
60"
10000"
/Label>
166"
>
/PasswordBox>
/StackPanel>
确ā?
认?
Label4"
PasswordBox2"
Button6"
Button6_Click"
400200"
取?
消?
Button7"
Button7_Click"
20000"
/Border>
/Popup>
ImportsSystem.Collections
ImportsSystem.Collections.ObjectModel
PublicClassadmin
PubliclistAsObservableCollection(Ofmember)=NewObservableCollection(Ofmember)()
PrivateSubWindow_Loaded(ByValsenderAsSystem.Object,ByValeAsSystem.Windows.RoutedEventArgs)
select*fromDatabase3.user"
DimresultAsBoolean=False
result=fillDataGrid(sql,list)
DataGrid1.DataContext=list
Ifresult=FalseThen
没?
有瓺用?
PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.Windows.RoutedEventArgs)
PrivateSubButton2_Click(ByVals