一些关于Visual Studio 2005 代码段(Code Snippet)的信息

非常喜欢Visaul Studio 2005 中的代码段,大大节省了一些无聊的、没有技术含量的代码编写工作,如实体类的属性设置等。

Visual Studio 2005 中的 VB.NET 的代码段比 Visual C# 的多出不少,是不是吸引开发人员?

我们可以修改系统中现有的 snippet 文件(C:\Program Files\Microsoft Visual Studio 8\VC#\Snippets\2052\Visual C#目录),来增加自己常用的 snippet。

网上(http://www.gotcodesnippets.net/)也有不少别人编写的 snippet ,可以按需取用。

要想共享或发布 snippet,最好做成Visual Studio 支持的格式 vsi ,其实是就是一个 更改了后缀名的 zip 文件,里面包含一个 XML 描述文件、一个或多个 snippet 文件(可以从上面网站中获得一个 vsi 文件来参考如何制作过程)。 

在 Visual Studio 2005 中,插入代码段的快捷键是 Ctrl K + Ctrl X ,代码段管理器的快捷窗口是 Ctrl K + Ctrl B。

这里提供一个比较好用的 Public Property 的 Snippet ,是对 http://www.gotcodesnippets.net 上拿到 Public Property 稍加修改之后形成的东西,这个我最常用 🙂 。

<?xml version="1.0" encoding="utf-8"?> <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> <CodeSnippet Format="1.0.0"> <Header> <Title>Public Property</Title> <Shortcut>pp</Shortcut> <Description>公共属性</Description> <Author>LiYanZhi ([email protected]_</Author> <SnippetTypes> <SnippetType>Expansion</SnippetType> </SnippetTypes> </Header> <Snippet> <Declarations> <Literal> <ID>accessor</ID> <ToolTip>The access modifier</ToolTip> <Default>public</Default> </Literal> <Literal> <ID>type</ID> <ToolTip>属性类型</ToolTip> <Default>string</Default> </Literal> <Literal> <ID>name</ID> <ToolTip>属性名称</ToolTip> <Default>MyProperty</Default> </Literal> </Declarations> <Code Language="csharp"> <![CDATA[private $type$ _$name$; $accessor$ $type$ $name$ { get { return _$name$; } set { _$name$ = value; } }$end$]]> </Code> </Snippet> </CodeSnippet> </CodeSnippets>

在修改 Snippet 时,也发现其中的一些不足,比如表达式中函数支持太少,例如上例中,一般用 _name 表示内部字段,用 Name 表示属性,但缺乏第一个字母大小写转换的函数。

对系统管理员或许有用的两个 VBScript

function act1(no)
{
if(document.all.item(“y”+no).style.display==””) document.all.item(“y”+no).style.display=”none”;
else document.all.item(“y”+no).style.display=””;
}

1、在 Windows 或 AD 中批量增加用户

使用方法,新建一 users.csv,字段格式必须按如下顺序,且不能为空: 登录名, 姓名, 密码,  描述;然后将脚本与 CSV 文件存储至同一目录,以管理员/域管理员运行脚本即可。

代码>>  (单击显示/隐藏)

'// Name: BulkAddUser
'// Purpose: 从 CSV 文件中批量生成 Active Directory 用户 '// 注意: '// 1. 源文件必须使用逗号分割 '// 2. 字段必须按如下顺序,且不能为空: 登录名, 姓名, 密码, 描述 '// 3. 只能由域管理员才能运行此程序 Option Explicit Dim oFSO, oTF, objRootDSE, objContainer, i Dim aLine, sLine, sLogon, sPass Dim sLoginName, sDisplayName, sDescription '// 用户批量文件 Const InpFile = "users.csv" Const ForReading = 1 Set oFSO = CreateObject("Scripting.FileSystemObject") Set oTF = oFSO.OpenTextFile(InpFile, ForReading, True) Set objRootDSE = GetObject("LDAP://rootDSE") Set objContainer = GetObject("LDAP://cn=Users," & objRootDSE.Get("defaultNamingContext")) i = 1 Do While oTF.AtEndOfStream <> True sLine = oTF.ReadLine aLine = Split(sLine, ",", -1, 1) sLoginName = aLine(0) sDisplayName = aLine(1) sPass = aLine(2) sDescription = aLine(3) If IsEmpty(sLoginName) Or IsEmpty(sDisplayName) Then MsgBox "" & i & " 行数据有误:登录名和姓名不能为空", vbExclamation, "Add Bulk Users" End If Set objLeaf = objContainer.Create("User", "cn=" & sLoginName) objLeaf.Put "sAMAccountName", LCase(sLoginName) objLeaf.Put "givenName", Left(sDisplayName, 1) objLeaf.Put "sn", Mid(sDisplayName, 2) objLeaf.Put "UserPrincipalName", LCase(sLogon) objLeaf.Put "DisplayName", sDisplayName objLeaf.Put "description", sDescription objLeaf.SetInfo '// 是否重复 If Err.Number = -2147019886 Then MsgBox "User logon for " & sLogon & " already exists.", vbExclamation, "Bulk Add Users" Else '// Set initial password objLeaf.setpassword sPass objLeaf.AccountDisabled = False objLeaf.SetInfo End If i = i + 1 Loop MsgBox "用户创建完毕.", vbInformation, "Bulk Add Users"
Set oTF = Nothing
Set oFSO = Nothing

2、清理 IIS Log 中的非重要信息(如 XML、JS、JPG、GIF等资源的访问日志),只留下 asp 和 aspx 的访问日志。经我在一台服务器上测试,日志文件由 6G 变为 900M ,大大节省了空间。

使用方法:保存代码至 .vbs 文件,确认其中关于 IIS 日志路径是否正确,然后运行即可。

代码>>  (单击显示/隐藏)

<span id=y2 style="DISPLAY: none" color="#0000ff" face="Courier New"

Const ForReading = 1 Const ForWriting = 2 Dim tempLine,curDir,objFolder,objFSO,objFiles,objFile,f curDir = "C:\Windows\System32\LogFiles\" Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.GetFolder(curDir) Set objFiles = objFolder.Files For Each f in objFiles If Instr(f.Name,"ex0") > 0 Then Set objFile = objFSO.OpenTextFile(curDir + f.Name, ForReading) Set objFile1 = objFSO.OpenTextFile(curDir + Replace(f.Name,"ex0","bk0"), ForWriting, True) Do Until objFile.AtEndOfStream tempLine = objFile.ReadLine If Instr(tempLine,".asp - 80") > 0 OR Instr(tempLine,".aspx - 80") > 0 Then objFile1.WriteLine tempLine End If Loop objFile.Close objFile1.Close End If Next Msgbox "日志文件清理完毕"

Windows 的安全等级

最近在多处看到仍有人说 Windows 平台的安全等级是 C2 级,这里纠正一下。

正式获得 C2 级安全等级认证是 Windows NT 4.0 ,它是基于美国可信计算机系统评测标准 TCSEC(桔皮书,它把系统安全级别划分为 D、C1、C2、B1、B2、B3 和A级)上获得的,现在没有 TCSEC了,大家都遵循 CC(通用准则,它把系统划分为 EAL 1-7 级)了,Windows 2000、Windows XP SP2 和 Windows 2003 在 CC 上都是达到 EAL4+ 级

TCSEC和CC 的考察维度和要求不太一样,因此两个标准的级别可比性不大,但有些人也对此对过比较,认为在保证性方面,CC 的 EAL4 相当于 TCSEC 的 B1,EAL4+ 比 EAL4 高,相当于原有的 B1 – B2 之间。

IIS 的一个不足和一个使用建议

经常借用别人公司的一台托管的服务器上传下载些资料,顺便也帮人盯着服务器的配置与安全,前两天发现,系统盘 10G 硬盘空间没剩多少了,进去一看,原来 IIS 的日志文件(%windir%\system32\logfiles)下有5-6个G的日志文件,每天的日志约有 30-40M,于是把这些日志文件备份出来,压缩存储了一下,立刻节省了大量磁盘空间出来。

这个网站的访问里并不大,但日志文件为什么这么大呢,打开一看,IIS 的日志记录是很详细完整,但是仔细一看,好多行信息都是 jpg 和 gif ,这可能由于这台服务器是公司/产品宣传的缘故,所以图像文件较多,因此当访问一个页面时,会记录 10-20 条日志信息,从日志的真正用处来看,这些多余的图像文件的访问日志并不需要,而且,这么多的日志信息显然消耗了服务器的计算、IO、存储资源,影响高并发时的性能。

于是想在 IIS 的日志里对记录的 URI 资源类型做一下限制,很遗憾,没有发现这样的选项,在 Google 上似乎也没有找到替代的做法,这样看来,这好象是 IIS 日志记录功能的一个不足之处。

更新:感谢思归提供的解决办法,我把 Images 目录的日志记录取消了之后,日志文件在大小见下图:

另外再次极力推荐一下 IIS 的 gzip 功能,最近一直在研究其对性能和带宽的影响,应该来说,对于绝大多数互联网上的服务器来说,CPU 的资源比带宽资源的利用率更低,因此应该利用这些闲置的 CPU 资源来压缩页面,降低带宽点用,提高响应速度,而且,对于静态内容来说,这种压缩可以生成临时文件,避免每次访问都对资源进行压缩,因此对 CPU 资源的影响也是非常小的。对于大型企业来说,要在集中位置部署一个 B/S 的系统,那么利用 gzip 能大大节省租用运营商通讯线路带来的成本(利用 Internet Security and Accelerator 提供的 HTTP 压缩和缓存功能,也可以达到同样的目的)

port80software 这个网站上,提供了一在线测试工具,可能对你的网站进行测试,以确定其是否提供 gzip 压缩以及压缩比重、传输速度的提升等。

推荐一个不错的 ASP.NET 2.0 控件

Excentrics World Server Controls 是我用了很长时间的一个控件,最近它的 2.0 版本也出来了,可以更好地适应 ASP.NET 2.0 了,我主要是使用其中的日期选择控件(CalendarPopub)、时间选择控件(TimePicker)和数字输入域(NumericBox)。

FreeTextbox 目前的版本 3.1.x 已经很好地支持 Internet Explorer 7.0 了,从这里看到,4.0 也快发布了,从界面上来看,进步不小。

欢迎大家也各自给出自认为用着不错的控件,互通有无。

ASP.NET 常见参考项目的 UI、BLL 、Model 、 DAL 分析

应用/项目名称 UI层实现 Business Model & Logic Layer 实现 Data Access Layer 实现
Personal Web Site Starter Kit 在ASP.NET页面上直接利用 ObjectDataSource 来绑定 PhotoManager 中的方法来获取数据、更新数据 两个数据实体类(Album、Photo),一个管理类(PhotoManager)
自行解决数据库连接、使用 SqlCommand 来调用存储过程来完成
Club Web Site Starter Kit 在ASP.NET页面上直接利用 SqlDataSource 来获取数据、更新数据 只有一些简单的 Helper/Utility类,业务逻辑大多在页面上实现 有一个DataSet,提取 Member表的数据,在自己的数据库中扩充了 SqlMembershipProvider的字段
Classifieds Site Starter Kit 在ASP.NET页面上,增/删/改主要是利用FormView调用BLL中的ModelDB来实现,数据列表主要利用ModelCache的List和ModelDB返回的ModelDataTable来绑定 1) BLL中实现了 ModelDB的类,调用DAL中的DataSet来进行数据更新,如果是查询数据(GetModelList),则得到 ModelDataComponent.ModelDataTable,这是数据集自动生成代码中的一个类

2) 在 App_Code 的Web目录中,主要实现了部分实体在 HTTP Context中的Cache功能,建立了 CachedModel(数据实体类)及其管理对象 ModelCache,后者主要是将BLL层的ModelDB的Retrive结果DataTable转成 List

全是ASP.NET 2.0 中的DataSet,实现了所有表数据的获取与更新,它是调用存储过程来实现的
Commerce Starter Kit 在ASP.NET页面上,有一些是直接调用 ModelManager对象来完成用户交互,有一些则是利用 ObjectDataSource 绑定 ModelManager 来达到同样功能

对于某些操作,如果没有对应的 ModelManager 则直接使用 SqlDataSource

1) 在Objects目录下,定义了数据实体类,包含所有属性的Get/Set方法的定义,没有实例化方法,而是使用 void Load(IDataReader)来初始化,其中有一个对象(ShoppingCartItems),则继承至DataTable,利用BuildDataTable()来进行初始化

2) 利用数个 ModelProvider 将与数据库的主要交互功能封装起来,提供了实体层次的CRUD

3) 在 BLL 目录下,有数个 ModelManager,提供从业务层面对 Model 的操作,其中主要是调用 ModelProvider来完成具体的操作

在 ModelProvider项目中中,先定义ModelProvider抽象类,再由 SqlModelProvider 来继承,后者中利用 SqlHelper 来完成数据访问,主要是调用存储过程
Duwamish 7.1
(.NET 1.1)
调用BusinessFacade中的 OrderSystem 和 ProductSystem 中的方法完成用户交互,这主要是调用DAL层的相关对象来完成的 1) ModelData,继承自System.Data.DataSet,在构造函数里调用BuildDataTables()来初始化一个DataTable用来存储Model数据

2) 在BusinessFacade和BusinessRule中,实现了与业务逻辑有关的内容,调用数据层的 Models 来完成数据访问

实现了数个 Models对象,提供了对于 ModelData的CRUD方法,它也是调用 SqlHelper 来完成与数据库的交互
Jobs Site Starter Kit 利用 ObjectDataSource 绑定 Model 类,Command 主要是调用 Model 的 CRUD方法 在 Model 对象中定义了所有属性和CRUD方法,实现时调用了 DAL 的 DBAccess 对象,也使用了诸如 SqlParameter 等对象 只有一个类 DBAccess ,属于工具类,类似于 SqlHelper,它是利用 System.Data.SqlClient 来实现的,如果向其他数据库移植,代码量不大
Timer Tracker Starter Kit 利用 ObjectDataSource 绑定 Model 类,Command 主要是调用 Model 的 CRUD方法 在 Model 对象中定义了所有属性和CRUD方法 DataAccess:抽象类,定义了DAL层需要实现所有 Model 的 CRUD 对应的数据访问方法

DataAccessHelper:工厂类,利用配置创建相应的 DataAccess 对象

SqlDataAccess:DataAccess 的 SQL Server 实现,其中也包含一些类似于SqlHelper 的通用方法以简化代码

.Text 0.95
(.NET 1.1)
大多数是调用 Model有直接调用 SqlDataProvider 来获取数据、更新数据 在Dottext.Framework 的 Component 中定义了业务实体 Model 和 ModelCollection,在在Dottext.Framework定义了 Models 类,主要用提供 Model 的 CRUD 方法,其中的 R 返回 ModelCollection 在Dottext.Framework 的 Data 中定义了 IDbProvider和 IDTOProvider 接口,然后提供了 DataDTOProvider 和 SqlDbProvider 的实现,其中调用了 SqlHelper 类
Community Server 2.1 SDK
(.NET 1.1 & 2.0)
直接调用 Models 的方法来获取数据、更新数据等 在 CommunityServerComponents 项目的 Components 中定义 Model 类,其中仅包含属性定义及构造函数,另外定义了 Models 类,其中实现了 Model 的 CRUD 方法,它是调用 Provider 下的 CommonDataProvider 来完成数据访问的 在 CommunityServerComponents 项目的 Proivder 中,利用抽象类CommonDataProvider 定义了所有 BLL & Model 层需要的数据访问方法,然后在 SqlDataProvider 中项目中使用 SqlDataProvider 继承此类,完成与 SQL Server 数据库的交互
.Pet Shop 4.0 在 ASP.NET 的页面上,大多是利用代码来调用 BLL 层的 Model 对象来获取数据、更新数据 Model 项目 中定义了所有的业务实体 ModelInfo
BLL 项目中定义业务实体 Model ,其中包含业务视角的 CRUD 方法,它们是调用 IDAL 中的 IModel 的 CRUD 方法来实现的
IDAL 项目中有多个接口定义 IModel,其中定义了需要实现的 Model 的 CRUD 方法
SqlServerDAL 和 OracleDAL 分别在两种数据库上实现了 IDAL
DALFactory 为工厂类,负责根据配置返回相应的 IDAL 的 IModel 实现类
DBUtility 是 SQL Server 和 Oracle 数据库操作的工具类,主要是 SQLHelper 和 OracleHelper

简单个人评价:

  1. Personal Web Site Starter Kit:简单,供初学者参考之用
  2. Club Web Site Starter Kit:对标准 MemberShip 的扩充值得一看
  3. Classifieds Site Starter Kit:结构较为清晰,利用 DataSet 简化了大量 SQL 代码的编写
  4. Commerce Starter Kit: 利用了 Provider 模型,有些小瑕疵,如界UI层有 SqlDataSource,Model 中有 DataTable
  5. Duwamish 7.1:架构比较清晰,但Model 继承自 DataSet ,因此其 BuildDataTables 和 Models 中的CURD 方法较为麻烦,代码量较大
  6. Jobs Site Starter Kit:简单实用,有些缺点,如 Model 的 CRUD 方法的 SqlParameter 造成 BLL 和 DAL 无法完全隔离
  7. Timer Tracker Starter Kit:一种架构清晰、较好的实现模式,只是代码量稍大
  8. .Text 0.95:基于 .NET 1.1 ,因此 BLL 层稍显复杂,DAL 层代码量也较大
  9. Community Server 2.1:它同时兼容 .NET 1.1 和 .NET 2.0 ,因此没有利用 .NET 2.0 的许多特性,但其 Provider 的模式较为清晰
  10. .Pet Shop 4.0:架构清晰

注:上述分析以数据访问为主,本 Post 是使用 Windows Live Write 来编写完成

数据访问层实现的一些个人想法

个人感觉数据访问层应该实现以下几个主要目的:

1) 分离业务层与数据层

2)屏蔽具体数据库的差异(如SQLServer、Oracle、OLEDB、ODBC等)

3)简化数据访问层的代码,经常写一些 Parameter 的设定是很无聊的事情)

先下载并研究了一下Enterprise Library 2.0 ,发现其中的Data Access Application Block有点复杂了,有近 40 个类文件,还需要引用 Configuration、Common、ObjectBuilder 等项目,本身就是一个很大的项目了… 个人觉得还不如上一个版本中的 SQLHelper 对象那么简单方便(Pet Shop 4.0 中的 DabaAccess 项目里就是用 OracleHelper和SQLHelper来实现的)

再来研究Pet Shop 4.0 ,其中主要对象层次一般是(假设Model是业务对象):

ModelInfo <- Model -> IDAL <- SQLServerDAL(或OracleDAL)

其中:

  • ModelInfo 是瘦的业务实体数据对象
  • Model 实现 ModelInfo 的管理(增、删、改、查询)等,调用 IDAL 来实现
  • IDAL 是数据访问层的接口定义
  • SQLServerDAL 是 IDAL 在 SQLServer 上的实现,如果是 Oracle,可以利用 OracleDAL 来实现

貌视还不错的结构,只是 DAL 层的里面的代码还是比较多,好多SQL、好多Parameter的操作

再看看 Visual Studio 2005 中带的”个人网站的初学者工具包”的数据访问代码,它只是简单在App_Code中有 Model(瘦的业务实体数据对象)、ModelManager(管理对象,数据层的访问也在其中实现)的两个对象,数据库也只是SQL Server,较为简单,但也不易扩展。

我的一点想法:

1)Enterprise Library 2.0 有些庞大和重量级,学习曲线太长,谨慎使用

2)Visual Studio 2005 中的数据集对象(DataSet)是个好东西,可以简化很多SQL语句的编写和参数的设定

3)Pet Shop 4.0 的总体架构还是不错的(Model <- ModelInfo -> IDAL <- SQLServerDAL),值得参考,但是在SQLServerDAL 和 OracleDAL 不用手动去编写代码,而是调用利用 DataSet 自动生成的代码来实现(SQLServer、Oracle、OLEDB或ODBC等),简单的业务对象管理动作应該是能直接利用DataSet提供的方法直接实现,如果是复杂的数据层操作,可以自己编写代码来实现(如多个表之间的数据操作)

4)musiclandJGTM 2006 也提供了一种不错的实现方式,具体参考这篇Post

这样的话,开始提到的三个目的都能达到了。

新名词 – Ransomware 勒索软件

先列出大家都了解的一些常见的与安全相关的名人堂:

  • 病毒 - Virus
  • 蠕虫 - Worm
  • 木马 - Trojan Horse
  • 假病毒 - Hoax
  • 恶作剧 - Joke
  • 后门 - Backdoor
  • 间谍程序 - Spyware
  • 规模传播的邮件病毒 - Mass Mailer
  • 僵尸程序 - Bot
  • 广告软件 - Adware
  • 恶意代码/脚本/代码 - Malware/MalScript/MalCode
  • 网络钓鱼 - Phishing
  • 键盘记录软件 - KeyLogger
  • 行为记录软件 - Track Ware
  • 窃取程序 - Stealer
  • 垃圾邮件 - Spam
  • 拨号软件 - Dialer
  • 逻辑炸弹 - Logic Bomb
  • 漏洞利用代码 - Exploit Code
  • 流氓软件

现在又有新成员Ransomware - 勒索软件加入了,大家鼓掌欢迎,这里简要介绍一下它的政治面貌:

勒索软件(RansomWare)是黑客用来劫持用户资产或资源并以此为条件向用户勒索钱财的一种恶意软件。勒索软件通常会将用户系统上多种类型的文件,如文档、邮件、数据库、源代码、图片、压缩文件等,进行某种类型的加密操作,使这些文件不可用。勒索软件还可能通过修改系统配置文件,干扰用户正常使用系统的方法使系统的可用性降低。然后,通过弹出窗口、对话框或生成文本文件等的方式向用户发出勒索通知,要求用户向指定帐户汇款来获得解密文件的密码或者获得恢复系统正常运行的方法。

查看:勒索软件详细介绍全国首例传播电脑病毒敲诈案告破 

新书预告:《数据库加密-最后的防线》

function act(no)
{
if(document.all.item(“x”+no).style.display==””) document.all.item(“x”+no).style.display=”none”;
else document.all.item(“x”+no).style.display=””;
}

前几天,思归提到数据库安全是个大问题,我深有同感,感觉现在大家在外围、应用安全上做的工作比较多,往往忽视了数据库的保护,而这部内容恰恰是最关键的信息资产,正好本人与同事最近刚翻译完成了一本这方面的著作,《数据库加密——最后的防线》近期将由电子工业出版社出版,本书中详细介绍了如何对数据库的数据进行加密,同时给出了 Java 样例代码。

译序节选>>   (单击显示/隐藏)

安全性本身涉及的内容和范围非常广泛,从整体层次上来说,包括安全策略、安全管理、物理安全、网络安全、主机安全、应用安全、数据安全等许多领域,针对这些主题,业界已经提供了大量成熟的解决方案和最佳实践,从微观上来说,安全基础技术——密码学的发展也相当成熟。通过在以上各个层次中合理地使用密码技术,能够有效地满足绝大多数安全需求,关于这些内容的安全资料和书籍非常丰富,但是唯一令人遗憾的是,关于密码学在数据库中的应用这个领域,即数据库加密,却被很多安全专家和技术人员所忽视,很少有人去研究,因此也鲜有相关著作,其主要原因是大家一般寄希望于数据库管理系统来保护数据的安全性,但是在实际应用中,数据库管理系统所能提供的保护作用是有限的。

大多数情况下,应用系统中最有价值的资产就是商业数据,尤其对一些特定行业,如金融行业来说,数据的机密机至关重要,甚至事关企业的命运和发展。例如去年美国付款信息处理公司CardSystems遭受黑客入侵,造成了美国史上最大一起的数据泄露事件,此次泄密事件波及的信用卡用户多达4000万人,严重影响了全世界范围的数千万客户,甚至包括中国的数千名用户,这使得银行和信用卡公司不得不为所有客户重新换发所有信用卡,这不但带来了巨大的业务损失,更重要的是,对公司的声誉、客户的信心带来了沉重的打击。

由此可以看出,数据安全在整个系统安全中非常重要的一个环节,虽然应用程序和数据库管理系统可以为数据提供相当程度的安全保证,但是要看到,由于数据在物理上一般存储在单独的服务器上,攻击者可以很容易破解或绕过应用程序而直接访问数据库,另外,由于数据库管理系统使用不当或者攻击者绕过数据库管理系统来直接访问数据库所对应的原始文件,数据库管理系统所提供的安全保护也失效了,除此之外,那些合法的用户,如数据库管理员、应用开发人员都有可能轻易读取数据库中的内容,从而破坏数据的机密性。因此,如果不在数据库内部实施额外的安全措施,如数据库加密,就难以完全保证数据的安全性。

考虑到数据库系统的复杂性,因此保护数据库并对其进行加密也是一个非常错踪复杂的问题,如密码算法和模式的选择、密钥的管理等,如何才能有效地入手呢?《数据库加密——最后的防线》,这本来自业界领先的安全公司 Symantec IT应用与数据库安全项目主管的著作,将带给你这些问题的答案。

在本书中,作者Kevin Kenan全面地介绍了与数据库加密这个主题有关的方方面面的问题。包括了解保护数据的必要性,如何构建一个真正的数据库威胁模型,加强数据库安全的需求分析、对数据进行分类、如何编写与密码系统安全交互的数据库应用程序、避免常见的威胁数据库安全的漏洞和问题,以及如何在测试、部署、保护及终止过程中保护数据库应用的安全性等。

本书分为四大部分,第一部分首先介绍了安全性的基本含义及其在数据库中的具体体现,随后讲述了密码学和数据库的一些基础知识和密码学在数据库中的应用。在第二部分中,介绍了密码系统的基础架构和密码系统中的各个组件,如密钥库、密钥管理器、密码提供者、密码引擎等。

第三部分介绍了密码系统的项目管理,描述了一个项目开发生命周期的各个阶段应該注意的安全问题,如在需求阶段进行需求定义、确定策略、标准及算法,在设计阶段,提到了应該遵循的安全设计指南及最佳实践,并介绍了威胁建模及安全模式方面的内容。在开发阶段,介绍了应該注意的最主要的安全开发实践;在测试阶段,主要介绍了安全功能测试和穿透测试,前者是从正面的角度测试各种功能是否存在,而后者是从攻击者的角度来测试系统安全措施的有效性如何,是否存在任何漏洞。最后,介绍了应用程序在部署、运行及终止阶段应該注意的安全问题,这是一部分很容易被忽视的重要内容。

在第四部分中,作者针对之前描述的各种理论、技术与实践,给出了一个数据库加密系统的Java实现,这是本书中非常有价值的一部分内容,通过这部分代码,读者可以更准确、更深入地了解本书中的内容,最后,给出了这个示例系统的运行演示。这些代码可以在少量修改后,就可以应用到实际的项目中去。这部分代码可以从作者的网站(http://www.kevinkenan.com)上下载,其中包括了相关的使用说明,包括如何建立初始数据库等。

目录节选>>   (单击显示/隐藏)

第一部分:数据库安全
1、数据库安全问题
1.1、数据库面临的攻击
1.2、保护数据库的外部需求

2、使用加密保护数据库
2.1、数据库知识的快速复习
2.2、密码学是什么
2.3、密码学应用
2.4、加密的风险
2.5、加密面临的攻击
2.6、混淆
2.7、传输加密

第二部分:加密基础设施
3、加密基础设施概述
3.1、应用程序架构
3.2、加密系统加构
3.3、加密密钥

4、加密引擎和算法
4.1、本地引擎
4.2、专用引擎
4.3、加密算法

5、密钥存储库、清单和管理组件
5.1、密钥存储库
5.2、密钥清单
5.3、密钥管理组件

6、加密提供者和使用者
6.1、提供者
6.2、使用者

第三部分:加密项目
7、加密项目的管理
7.1、安全意识
7.2、客户参与
7.3、项目范围
7.4、项目角色

8、增强需求的安全性
8.1、安全需求、策略和标准
8.2、一般需求
8.3、需求复查
8.4、确定加密标准
8.5、数据分类

9、提高设计的安全性
9.1、数据流图
9.2、设计指南
9.3、威胁建模
9.4、安全模式
9.5、设计密码系统

10、安全开发
10.1、安全开发指南

11、测试
11.1、安全功能测试
11.2、穿透测试

12、部署、保护与终止
12.1、部署
12.2、保护
12.3、终止

第四部分:示例代码
13、示例说明
13.1、工具和通用服务
13.2、引擎与密钥库示例

14、密钥库
14.1、本地密钥
14.2、本地密钥的存储
14.3、访问本地密钥

15、清单
15.1、密钥别名

16、密钥管理程序
16.1、密钥工具-KeyTool

17、引擎
17.1、本地引擎

18、票据与提供者
18.1、加密请求与解密结果
18.2、票据
18.3、提供者

19、使用者
19.1、客户信息
19.2、信用卡信息
19.3、客户管理对象

20、异常

21、示例系统运行演示
21.1、设置密钥
21.2、操作客户信息
21.3、替换密钥
21.4、替换加密密钥的密钥

查看Amazon 原版信息

网银大盗的作案手法

之前提到的网银安全的事有结果了,大家了解一下网银大盗的作案手法,很有教育意义,希望大家可以举一反三,不,说错了,是很有警示意义,希望大家可以以此为戒,加强防范,呵呵。

某报讯,在互联网上兴风作浪将近一年的“新网银大盗”电脑病毒作者已经被捕。这位16岁的电脑高手通过在被害人电脑中“种植”电脑病毒的形式,盗窃工行网上银行用户密码账号,然后通过多次转账的形式提取现金。截至案发时,刘某已经窃取现金62500余元。

  据悉,犯罪嫌疑人刘某系厦门市某中专校在校生,被捕时年仅16岁。刘某入侵了吉林搜狐网,将其中部分网页链接改造成可偷偷打开事先设定的恶意网页的“陷阱”链接,从而在点击者的电脑中“种植”电脑病毒。他制作的电脑病毒“新网银大盗”一旦发现用户登录工行个人网上银行的界面,就开始记录用户的键盘输入内容。如果卡号长度为19个字符,并以“95588”开头时,病毒就会将记录下的卡号、密码和验证数字等信息加密后自动传送给电脑病毒作者。通过这种形式,刘某盗窃工行网上银行用户密码账号,然后通过多次转账的形式提取现金。据警方介绍,仅仅通过侵入吉林搜狐网传播木马病毒,刘某就获取了124张银行卡的网上银行资料。网络警察在一个与他相关的网站上还发现了数百张银行卡资料,最终查明刘某前后一共盗走12名受害者银行卡内的钱款62500多元。

一位少年就可以对资产达几千亿的超大银行的系统造成威胁,这种不对称就来自于满山遍野的黑客工具和银行科技人员的不作为,要不是警察叔叔帮忙,真为这些银行的客户担心。