韶华将逝,雄心未已;欲与众君,共习此技.
《PHP和MySQL Web开发》学习笔记(十七)
上一篇 / 下一篇 2007-09-17 15:05:17 / 天气: 阴雨 / 心情: 平静 / 个人分类:PHP & MySQL
第15章 电子商务的安全问题
15.1 信息的重要程度
考虑到安全的时候,首先要评估的是所保护信息的重要性。应该既要考虑这些信息对你的重要性,又考虑它对潜在入侵者的重要性。
保存在一个计算机业余爱好者、企业、银行和军事组织的计算机中的信息的价值是不同的。
计算机业余爱好者很可能只有有限的时间来了解或提高他们系统的安全性。除了对本人的价值之外,保存在他们机器上的信息,对其他任何人的价值可能非常有限,因此被别人攻击的可能性也就非常小。同时,攻击者付出的努力也会是有限的。但是,所有的网络计算机用户都应该采取明智的防范措施。即使计算机上没有什么能让别人感兴趣的东西,也可能被攻击者用作攻击别人的系统的跳板,或者作为复制病毒和蠕虫的载体。
军事用途的计算机对个人和外国政府来说都是攻击的目标。由于攻击者可能拥有丰富的资源,所以在人员和其他资源方面进行充分投资是明智的,以便确保在该领域内采取所有实际防范措施。
对于一个商业网站的负责人来讲,需要考虑介于上述两种极端情况之间的黑客攻击,因此投入的资源和努力也就应该介于二者之间。
考虑到安全的时候,首先要评估的是所保护信息的重要性。应该既要考虑这些信息对你的重要性,又考虑它对潜在入侵者的重要性。
保存在一个计算机业余爱好者、企业、银行和军事组织的计算机中的信息的价值是不同的。
计算机业余爱好者很可能只有有限的时间来了解或提高他们系统的安全性。除了对本人的价值之外,保存在他们机器上的信息,对其他任何人的价值可能非常有限,因此被别人攻击的可能性也就非常小。同时,攻击者付出的努力也会是有限的。但是,所有的网络计算机用户都应该采取明智的防范措施。即使计算机上没有什么能让别人感兴趣的东西,也可能被攻击者用作攻击别人的系统的跳板,或者作为复制病毒和蠕虫的载体。
军事用途的计算机对个人和外国政府来说都是攻击的目标。由于攻击者可能拥有丰富的资源,所以在人员和其他资源方面进行充分投资是明智的,以便确保在该领域内采取所有实际防范措施。
对于一个商业网站的负责人来讲,需要考虑介于上述两种极端情况之间的黑客攻击,因此投入的资源和努力也就应该介于二者之间。
15.2 安全威胁
15.2.1 机密数据的泄露
存储在计算机上的数据,或者从计算机发送或接收的数据都可能是机密的。
不要将不希望被别人看到的信息存储到Web服务器上。Web服务器本身就是公众访问的机器,应该只包含需要提供给公众的信息,或者最近从公众那里收集到的信息。
要减少数据泄露的危险,必须限制访问信息的方法以及能够访问这些信息的用户。
我们还需要从服务器上删除不必要的服务,这样可以减少潜在弱点的数量。每个服务必须经常更新以保证那些众所周知的弱点不再呈现出来。
身份验证的意思是请人们证明他们的身份。身份验证的具体实现可以有许多不同的方法,但是通常只使用其中两种形式——密码和数字签名。
当数据在网络上传输的时候,也存在泄露的危险。
要保护机密信息,可以在将它们通过Internet发送之前进行加密,然后再在另一端解密。通常,Web服务器会使用Secure Sockets Layer(SSL,加密套接字层),它由Netscape开发,用于数据在Web服务器和浏览器之间传输时的加密和解密。这是一个成本低、使用简单的安全传输方法。但是因为服务器需要加密数据而不是简单地发送和接受数据,该机器可以容纳的每秒访问量可能会急剧下降。
存储在计算机上的数据,或者从计算机发送或接收的数据都可能是机密的。
不要将不希望被别人看到的信息存储到Web服务器上。Web服务器本身就是公众访问的机器,应该只包含需要提供给公众的信息,或者最近从公众那里收集到的信息。
要减少数据泄露的危险,必须限制访问信息的方法以及能够访问这些信息的用户。
我们还需要从服务器上删除不必要的服务,这样可以减少潜在弱点的数量。每个服务必须经常更新以保证那些众所周知的弱点不再呈现出来。
身份验证的意思是请人们证明他们的身份。身份验证的具体实现可以有许多不同的方法,但是通常只使用其中两种形式——密码和数字签名。
当数据在网络上传输的时候,也存在泄露的危险。
要保护机密信息,可以在将它们通过Internet发送之前进行加密,然后再在另一端解密。通常,Web服务器会使用Secure Sockets Layer(SSL,加密套接字层),它由Netscape开发,用于数据在Web服务器和浏览器之间传输时的加密和解密。这是一个成本低、使用简单的安全传输方法。但是因为服务器需要加密数据而不是简单地发送和接受数据,该机器可以容纳的每秒访问量可能会急剧下降。
15.2.2 数据丢失和数据破坏
对我们来说,数据丢失可能比数据泄露的损失更大。
莫菲法则告诉我们失去的东西是最重要的东西,尤其是很久没有备份以后。
可以采取各种措施以减少数据丢失。加强服务器的安全以防止入侵者。尽量减少可以访问机器的职员人数。只雇佣有能力,细心的人们。购买高质量的硬盘驱动器。使用廉价冗余磁盘陈列(RAID)以便多个驱动器可以像一个更快、更可靠的驱动器一样工作。
无论是什么原因,对数据丢失只有一种真正的保护措施:备份。请确认是否有规律地备份数据,确认已经测试了备份过程,确保它可以恢复数据。确认备份数据远离计算机。尽管机房被烧毁或者遭遇其他灾害的可能性很小,但是将备份数据与网站分开总是一个相当廉价的保险策略。
对我们来说,数据丢失可能比数据泄露的损失更大。
莫菲法则告诉我们失去的东西是最重要的东西,尤其是很久没有备份以后。
可以采取各种措施以减少数据丢失。加强服务器的安全以防止入侵者。尽量减少可以访问机器的职员人数。只雇佣有能力,细心的人们。购买高质量的硬盘驱动器。使用廉价冗余磁盘陈列(RAID)以便多个驱动器可以像一个更快、更可靠的驱动器一样工作。
无论是什么原因,对数据丢失只有一种真正的保护措施:备份。请确认是否有规律地备份数据,确认已经测试了备份过程,确保它可以恢复数据。确认备份数据远离计算机。尽管机房被烧毁或者遭遇其他灾害的可能性很小,但是将备份数据与网站分开总是一个相当廉价的保险策略。
15.2.3 数据修改
尽管数据丢失可能具有破坏性,而数据修改则可能更糟。
文件修改可能包括对数据文件的修改和对可执行文件的修改。
可以通过计算一个签名来防止数据在网络传输过程中被人修改。当然,这不能阻止别人修改数据,但是如果文件到达的时候,接收者检查签名仍然匹配,那么他就知道文件是否被人修改。
保护服务器上的文件以防修改要求我们在操作系统中应用文件权限,以防止未授权的访问。
检测修改可能是很困难的。
文件的完整性评估软件记录了安全状态下的重要文件信息,它很可能是在安装之后立即记录的,而这些信息可以在过一段时间后用来验证文件是否已经被修改。
尽管数据丢失可能具有破坏性,而数据修改则可能更糟。
文件修改可能包括对数据文件的修改和对可执行文件的修改。
可以通过计算一个签名来防止数据在网络传输过程中被人修改。当然,这不能阻止别人修改数据,但是如果文件到达的时候,接收者检查签名仍然匹配,那么他就知道文件是否被人修改。
保护服务器上的文件以防修改要求我们在操作系统中应用文件权限,以防止未授权的访问。
检测修改可能是很困难的。
文件的完整性评估软件记录了安全状态下的重要文件信息,它很可能是在安装之后立即记录的,而这些信息可以在过一段时间后用来验证文件是否已经被修改。
15.2.4 拒绝服务
要防范的最重要威胁之一是拒绝服务。拒绝服务(DoS)是指明某人的操作使得其他用户很难或者不能访问一个服务,或者延迟对一个时间临界服务的访问。
这些攻击之所以难以防范的一个重要原因是有大量的方法来实现这样的攻击。这些方法可能包括在目标机器上安装一个程序,该程序将消耗系统的大多数处理器时间;或者使用一个自动工具发送垃圾邮件。发送垃圾邮件的方式还包括以攻击目标作为邮件的发送者将垃圾邮件发送给人们。这样,攻击目标就会收到成千上万封愤怒的回复信件。
一般来说,我们很难防范DoS攻击。但通过简单的研究,可以发现被常规的DDoS工具占用的默认端口并关闭这些端口。
因为有如此之多的方法可以用来进行攻击,因此唯一真正有效的防范措施是监视常规流量,以及配备一批专家以在发生异常的时候采取对策。
要防范的最重要威胁之一是拒绝服务。拒绝服务(DoS)是指明某人的操作使得其他用户很难或者不能访问一个服务,或者延迟对一个时间临界服务的访问。
这些攻击之所以难以防范的一个重要原因是有大量的方法来实现这样的攻击。这些方法可能包括在目标机器上安装一个程序,该程序将消耗系统的大多数处理器时间;或者使用一个自动工具发送垃圾邮件。发送垃圾邮件的方式还包括以攻击目标作为邮件的发送者将垃圾邮件发送给人们。这样,攻击目标就会收到成千上万封愤怒的回复信件。
一般来说,我们很难防范DoS攻击。但通过简单的研究,可以发现被常规的DDoS工具占用的默认端口并关闭这些端口。
因为有如此之多的方法可以用来进行攻击,因此唯一真正有效的防范措施是监视常规流量,以及配备一批专家以在发生异常的时候采取对策。
15.2.5 软件错误
购买的、免费获取的或编写的软件都可能包含严重的错误。
软件中的错误可能导致许多无法预见的行为,其中包括服务无效、安全缺口、经济损失和服务质量低下。
导致这些错误的原因一般包括:
1.低质量的设计说明书
设计文档越简单或者越模糊,最终产品就越有可能出错。
2.开发人员做出的假设
系统的设计人员和程序员需要做出许多假设。如果可能的话,他们要将这些假设记录到文档中,并且应该保证这些假设都是正确的。
从历史的角度后,入侵者找出来的操作系统级别或应用程序级别的弱点通常与缓冲区溢出或者竞争条件有关。
3.不充分的测试
在所有可能的硬件类型上,运行所有可能的操作系统以及所有可能的用户设置的条件下,测试所有可能的输入条件几乎是不可能的。基于网络的系统更是如此。
我们需要的是经过精密设计的测试计划,在一个有代表性的常见机器类型上测试软件的所有功能。
测试的最大问题是它非常单调并且具有重复性。让原始开发人员之外的人进行测试是非常重要的。测试的一个重要目标就是检查出开发人员所作的不完善假设。一个局外人更可能作出不同的假设。除此之外,专家们也很难非常专注地查找自己工作中的毛病。
购买的、免费获取的或编写的软件都可能包含严重的错误。
软件中的错误可能导致许多无法预见的行为,其中包括服务无效、安全缺口、经济损失和服务质量低下。
导致这些错误的原因一般包括:
1.低质量的设计说明书
设计文档越简单或者越模糊,最终产品就越有可能出错。
2.开发人员做出的假设
系统的设计人员和程序员需要做出许多假设。如果可能的话,他们要将这些假设记录到文档中,并且应该保证这些假设都是正确的。
从历史的角度后,入侵者找出来的操作系统级别或应用程序级别的弱点通常与缓冲区溢出或者竞争条件有关。
3.不充分的测试
在所有可能的硬件类型上,运行所有可能的操作系统以及所有可能的用户设置的条件下,测试所有可能的输入条件几乎是不可能的。基于网络的系统更是如此。
我们需要的是经过精密设计的测试计划,在一个有代表性的常见机器类型上测试软件的所有功能。
测试的最大问题是它非常单调并且具有重复性。让原始开发人员之外的人进行测试是非常重要的。测试的一个重要目标就是检查出开发人员所作的不完善假设。一个局外人更可能作出不同的假设。除此之外,专家们也很难非常专注地查找自己工作中的毛病。
15.2.6 否认
我们需要考虑的最后一个风险是否认,否认通常发生在事务参与的一方否认已经参与了事务处理。在电子商务领域中的一个例子就是,一个人在某个网站预订了一件货物,然后否认了自己授权该网站从信用卡扣除费用;或者一个人在邮件中答应某件事情,然后声称是别人伪造了该邮件。
身份验证可以为识别正在参与事务的一方身份提供保证。如果是由一个可信任的组织分配的,证明身份的数字证书可以提供更充分的保证。
每一方发送的信息也需要被证明是准确的,而不是胡乱捏造的。
对于关系处于持续过程中的双方事务,使用加密的或经过签名的数字证书进行通信是有效的防止否认发生的方法。而对于一次性的事务处理,例如电子商务网站和一个持有信用卡的陌生人之间的被初次接触,这就不那么实际。
我们需要考虑的最后一个风险是否认,否认通常发生在事务参与的一方否认已经参与了事务处理。在电子商务领域中的一个例子就是,一个人在某个网站预订了一件货物,然后否认了自己授权该网站从信用卡扣除费用;或者一个人在邮件中答应某件事情,然后声称是别人伪造了该邮件。
身份验证可以为识别正在参与事务的一方身份提供保证。如果是由一个可信任的组织分配的,证明身份的数字证书可以提供更充分的保证。
每一方发送的信息也需要被证明是准确的,而不是胡乱捏造的。
对于关系处于持续过程中的双方事务,使用加密的或经过签名的数字证书进行通信是有效的防止否认发生的方法。而对于一次性的事务处理,例如电子商务网站和一个持有信用卡的陌生人之间的被初次接触,这就不那么实际。
15.3 易用性,性能、成本和安全性
在易用性、性能、成本和安全性之间有一个折中。使服务器更安全可能会降低服务的易用性;增加安全性能也可能降低机器的性能级别。
我们可以将性能、易用性、成本和安全看作相互制约的目标。需要调查其平衡并作出明智的折中决定。根据信息价值、投资预算、预期访问量和我们认为合法用户能够忍受的障碍等等这些因素,可以提出一个折中的方法。
在易用性、性能、成本和安全性之间有一个折中。使服务器更安全可能会降低服务的易用性;增加安全性能也可能降低机器的性能级别。
我们可以将性能、易用性、成本和安全看作相互制约的目标。需要调查其平衡并作出明智的折中决定。根据信息价值、投资预算、预期访问量和我们认为合法用户能够忍受的障碍等等这些因素,可以提出一个折中的方法。
15.4 建立一个安全政策
安全政策是一个文档,它描述了:公司的一般要求;安全保护对象——软件、硬件、数据;负责保护这些项目的人;安全标准及其度量标准,度量标准衡量这些标准在多大程序上适合。
安全政策是一个文档,它描述了:公司的一般要求;安全保护对象——软件、硬件、数据;负责保护这些项目的人;安全标准及其度量标准,度量标准衡量这些标准在多大程序上适合。
15.5 身份验证原则
身份验证试图证明某人的确是他本人。有许多可以提供身份验证的方法,但是与大多数安全措施一样,方法越安全,使用起来就越麻烦。
身份验证技术包括密码、数字签名、生物鉴定措施(例如指纹扫描),以及涉及硬件(例如智能卡)的措施。在网络上,只有两种技术是经常使用的:密码和数字签名。
许多密码很容易就被别人猜到。如果允许用户选择自己的密码,大概50%的用户会选择容易破解的密码。这种密码中通常包含字典单词或者用户名。
告诉用户选择更好的密码可能会有所帮助,但是即便如此,仍然有我25%的用户会选择容易破解的密码。
难以记住密码会增加用户不安全操作的可能性。
密码也可以通过电子化的方式捕获。
尽管密码有许多潜在的缺点,但仍然不失为一种简单而相对有效的用户身份验证方法。它们提供的保密级别可能不适于国家级安全,但是用于检查一个顾客订单的分发状况则是非常理想的。
身份验证试图证明某人的确是他本人。有许多可以提供身份验证的方法,但是与大多数安全措施一样,方法越安全,使用起来就越麻烦。
身份验证技术包括密码、数字签名、生物鉴定措施(例如指纹扫描),以及涉及硬件(例如智能卡)的措施。在网络上,只有两种技术是经常使用的:密码和数字签名。
许多密码很容易就被别人猜到。如果允许用户选择自己的密码,大概50%的用户会选择容易破解的密码。这种密码中通常包含字典单词或者用户名。
告诉用户选择更好的密码可能会有所帮助,但是即便如此,仍然有我25%的用户会选择容易破解的密码。
难以记住密码会增加用户不安全操作的可能性。
密码也可以通过电子化的方式捕获。
尽管密码有许多潜在的缺点,但仍然不失为一种简单而相对有效的用户身份验证方法。它们提供的保密级别可能不适于国家级安全,但是用于检查一个顾客订单的分发状况则是非常理想的。
15.6 使用身份验证
身份验证机制内置于大多数流行的Web浏览器和Web服务器之中。Web服务器可能会要求请求服务器上特定目录文件的人们输入用户名和密码。
身份验证机制内置于大多数流行的Web浏览器和Web服务器之中。Web服务器可能会要求请求服务器上特定目录文件的人们输入用户名和密码。
15.7 加密技术基础
加密算法是将信息转变为一个看起来是任意数据串的数学过程。
通常,要被加密的初始数据称为普通文本,但是该信息代表什么并不重要——无论它是真正的文本,还是其他类型的数据。类似地,已加密的信息称为密文,它们看起来完全不像文本。
加密的简单流程如下:首先,普通文本被载入到加密引擎,以前,加密引擎可能是一个机械设备,但现在,绝大多数引擎都是计算机程序。然后由加密引擎产生密文。
许多密码使用一种单方向的加密算法进行存储。要检查输入的密码是否正确,不需要对加密的密码进行解密。只需要加密尝试输入的密码然后将它与存储的密码比较即可。
许多加密过程都是可逆的,但并非所有的加密都是这样。这些可逆的过程称为解密。
目前,有许多不同的的加密算法可供使用。有些算法,例如DES,使用一个公有密钥或者一个私有密钥;有一些算法,如RSA,使用一个公有密钥和一个单独的私有密钥。
加密算法是将信息转变为一个看起来是任意数据串的数学过程。
通常,要被加密的初始数据称为普通文本,但是该信息代表什么并不重要——无论它是真正的文本,还是其他类型的数据。类似地,已加密的信息称为密文,它们看起来完全不像文本。
加密的简单流程如下:首先,普通文本被载入到加密引擎,以前,加密引擎可能是一个机械设备,但现在,绝大多数引擎都是计算机程序。然后由加密引擎产生密文。
许多密码使用一种单方向的加密算法进行存储。要检查输入的密码是否正确,不需要对加密的密码进行解密。只需要加密尝试输入的密码然后将它与存储的密码比较即可。
许多加密过程都是可逆的,但并非所有的加密都是这样。这些可逆的过程称为解密。
目前,有许多不同的的加密算法可供使用。有些算法,例如DES,使用一个公有密钥或者一个私有密钥;有一些算法,如RSA,使用一个公有密钥和一个单独的私有密钥。
15.8 私有密钥加密
私有密钥加密也称作保密密钥加密,它依赖于授权用户知道或者可以访问一个密钥。该密钥必须是保密的。如果密钥落入别人手中,未授权的用户也可以阅读加密消息。
使用最广学的密钥算法是数据加密标准(DES)。从1998年以后,DES就已经开始过时了。
其他著名的密钥系统包括RC2、RC4、RC5、triple DES(3DES)和IDEA。其中Triple DES非常安全。
私有密钥加密也称作保密密钥加密,它依赖于授权用户知道或者可以访问一个密钥。该密钥必须是保密的。如果密钥落入别人手中,未授权的用户也可以阅读加密消息。
使用最广学的密钥算法是数据加密标准(DES)。从1998年以后,DES就已经开始过时了。
其他著名的密钥系统包括RC2、RC4、RC5、triple DES(3DES)和IDEA。其中Triple DES非常安全。
15.9 公有密钥加密
公有密钥加密依赖于两个不同的密钥,一个公有密钥和一个私有密钥。公有密钥用于加密消息,私有密钥用于解密他们。
该系统的好处在于公有密钥的使用,顾名思义,它可以公之于众。任何获得公有密钥的人都可以发送一个秘密消息。只有拥有私有密钥的人才可能解密消息。
最常使用的公有密钥算法是RSA。
以公开的方式发送一个公有密钥而无须担心被第三者看到的特性是一个巨大的优点,但是密钥系统仍然只适用于常规用途。通常,我们会使用一种混合的系统。公有密钥系统应用于为密钥系统传输密钥,密钥系统应用于会话通信的其余部分。虽然这样会增加系统的复杂度,但是这却是可以容忍的,因为密钥系统比公有密钥系统快约1000倍。
公有密钥加密依赖于两个不同的密钥,一个公有密钥和一个私有密钥。公有密钥用于加密消息,私有密钥用于解密他们。
该系统的好处在于公有密钥的使用,顾名思义,它可以公之于众。任何获得公有密钥的人都可以发送一个秘密消息。只有拥有私有密钥的人才可能解密消息。
最常使用的公有密钥算法是RSA。
以公开的方式发送一个公有密钥而无须担心被第三者看到的特性是一个巨大的优点,但是密钥系统仍然只适用于常规用途。通常,我们会使用一种混合的系统。公有密钥系统应用于为密钥系统传输密钥,密钥系统应用于会话通信的其余部分。虽然这样会增加系统的复杂度,但是这却是可以容忍的,因为密钥系统比公有密钥系统快约1000倍。
15.10 数字签名
数字签名与公有密钥加密相关,但是与公有密钥和私有密钥的作用相反。一个发送者可以用密钥加密和签名一个消息。当人们接收消息的时候,接收者可以用发送者的公有密钥对它解密。因为发送者是唯一可以访问密钥的人,接收者可以确认消息是由谁发送以及它有没有被修改。
值得注意的是,尽管消息被加密了,但拥有公有密钥的任何人都可以阅读它。尽管使用了相同的技术和密钥,但是在这里,加密的目的是为了防止篡改和否认,而不是防止别人阅读消息。
对于大量消息来说,由于公有密钥的速度比较慢,就出现了另一种称为哈希函数的算法。通常,它可以用于提高效率。哈希函数为给定的消息计算出一个消息摘要或者哈希值。算法产生什么值并不重要。重要的是其输出是唯一的,也就是说,每次使用一个特定的输入时候,输出是样的。该输出较小,因此算法较快。
最常见的哈希函数是MD5和SHA。
哈希函数可以为特定消息产生相匹配的消息摘要。如果有一个消息和一个消息摘要,只要确认摘要没有被篡改,就可以确认该消息没有被篡改。最近,创建一个数字签名最常用的方法是用一个快速哈希函数为整个消息创建一个消息摘要,然后使用速度较慢的公有密钥加密算法对简短的消息摘要进行加密。现在,签名可以通过任何常规的、可能不安全的方式发送。
当接收到一个签名消息的时候,我们可检查它。用发送者的公有密钥解密签名。使用于发送者同样方法产生该消息的一个哈希值。如果解密的哈希值匹配产生的哈希值,就可以确认消息来自发送者而而且没有被篡改。
数字签名与公有密钥加密相关,但是与公有密钥和私有密钥的作用相反。一个发送者可以用密钥加密和签名一个消息。当人们接收消息的时候,接收者可以用发送者的公有密钥对它解密。因为发送者是唯一可以访问密钥的人,接收者可以确认消息是由谁发送以及它有没有被修改。
值得注意的是,尽管消息被加密了,但拥有公有密钥的任何人都可以阅读它。尽管使用了相同的技术和密钥,但是在这里,加密的目的是为了防止篡改和否认,而不是防止别人阅读消息。
对于大量消息来说,由于公有密钥的速度比较慢,就出现了另一种称为哈希函数的算法。通常,它可以用于提高效率。哈希函数为给定的消息计算出一个消息摘要或者哈希值。算法产生什么值并不重要。重要的是其输出是唯一的,也就是说,每次使用一个特定的输入时候,输出是样的。该输出较小,因此算法较快。
最常见的哈希函数是MD5和SHA。
哈希函数可以为特定消息产生相匹配的消息摘要。如果有一个消息和一个消息摘要,只要确认摘要没有被篡改,就可以确认该消息没有被篡改。最近,创建一个数字签名最常用的方法是用一个快速哈希函数为整个消息创建一个消息摘要,然后使用速度较慢的公有密钥加密算法对简短的消息摘要进行加密。现在,签名可以通过任何常规的、可能不安全的方式发送。
当接收到一个签名消息的时候,我们可检查它。用发送者的公有密钥解密签名。使用于发送者同样方法产生该消息的一个哈希值。如果解密的哈希值匹配产生的哈希值,就可以确认消息来自发送者而而且没有被篡改。
15.11 数字证书
能够验证一条消息没有被篡改以及一组消息都来自一个特定的用户或机器是很好的。对于商业往来来说,将用户或者服务器与一个真实的法律实体(如人或公司)结合成一体可能会更好。
对于商业贸易来说,有可信的第三方验证所参与的实体,以及他们证书上记录的细节是非常有意义的。
这些第三方验证称为认证授权(CA)。论点证授权公司可以为个人或组织颁发数字证书,从而证明其身份。两个最著名的CA公司是VeriSign和Thawte。
认证授权公司可以颁发一个证书,用来证明他们可以保证该个人和组织的身份或标识。需要注意的是,要将证书作为一个信誉说明书或者信誉陈述是没有什么价值的。它并不能保证与我们打交道的人或组织具有良好的信誉,它真正的意义是,如果对方违约,我们就有机会知道对方真实的地址和个人,以便控告他们。
数字证书最常见的用途是为电子商务网站提供一个可以信任的氛围。拥有一个由著名CA所颁发的证书,Web浏览器可以通过SSL的方式连接到网站而不会出现警告对话框。支持SSL连接的Web服务器通常又称为安全的Web服务器。
能够验证一条消息没有被篡改以及一组消息都来自一个特定的用户或机器是很好的。对于商业往来来说,将用户或者服务器与一个真实的法律实体(如人或公司)结合成一体可能会更好。
对于商业贸易来说,有可信的第三方验证所参与的实体,以及他们证书上记录的细节是非常有意义的。
这些第三方验证称为认证授权(CA)。论点证授权公司可以为个人或组织颁发数字证书,从而证明其身份。两个最著名的CA公司是VeriSign和Thawte。
认证授权公司可以颁发一个证书,用来证明他们可以保证该个人和组织的身份或标识。需要注意的是,要将证书作为一个信誉说明书或者信誉陈述是没有什么价值的。它并不能保证与我们打交道的人或组织具有良好的信誉,它真正的意义是,如果对方违约,我们就有机会知道对方真实的地址和个人,以便控告他们。
数字证书最常见的用途是为电子商务网站提供一个可以信任的氛围。拥有一个由著名CA所颁发的证书,Web浏览器可以通过SSL的方式连接到网站而不会出现警告对话框。支持SSL连接的Web服务器通常又称为安全的Web服务器。
15.12 安全的Web服务器
通过加密套接字协议层(Secure Sockets Layer),我们可以使用Apache Web服务器、Microsoft IIS或者其他的免费或商业Web服务器,与浏览器之间进行安全的通信。使用Apache产品,我们可以使用类似于UNIX的操作系统。这肯定比IIS更可靠,但是也更难安装。当然,也可以选择在Windows平台下使用Apache。
在生成自己的数字证书以后,就可以立即开始使用SSL了,但是Web浏览器将向网站访问者发出警告,警告将告诉访问者,证书是你自己签发的。要有效地使用SSL,还需要一个认证授权公司颁发的一个证书。
对于不同的CA公司来说,获取证书的确切过程各不相同,但是一般地说,需要向CA证明公司是法律承认的公司,有确切的实际地址并且拥有相关域名。
通过加密套接字协议层(Secure Sockets Layer),我们可以使用Apache Web服务器、Microsoft IIS或者其他的免费或商业Web服务器,与浏览器之间进行安全的通信。使用Apache产品,我们可以使用类似于UNIX的操作系统。这肯定比IIS更可靠,但是也更难安装。当然,也可以选择在Windows平台下使用Apache。
在生成自己的数字证书以后,就可以立即开始使用SSL了,但是Web浏览器将向网站访问者发出警告,警告将告诉访问者,证书是你自己签发的。要有效地使用SSL,还需要一个认证授权公司颁发的一个证书。
对于不同的CA公司来说,获取证书的确切过程各不相同,但是一般地说,需要向CA证明公司是法律承认的公司,有确切的实际地址并且拥有相关域名。
15.13 审计与日志记录
操作系统允许把各种各样的事件记入到日志文件中。从安全的角度考虑,我们可能关心的事件包括网络错误,对特定数据文件(例如,配置文件或NT注册表)的访问,对一些特定的程序(例如,在UNIX系统中使用su命令,可用来将自己变成另一个用户,通常是root用户)的调用。
日志文件还可以帮助我们在出错的时候检测错误或者恶意操作。如果在注意到问题之后检查它们,它们还可以告诉我们一个问题或者非法入侵是如何发生的。日志文件有两个主要问题,大小和准确性。
如果将检测和记录问题的条件设置为最极端的情况,最终将得到庞大的日志文件而难以检查。要帮助整理庞大的日志文件,可能需要使用一个现存的工作或者从安全政策中得到的审计脚本,这样就可以在日志中搜索“感兴趣”的事件。审计过程可以实时发生,也可以定期发生。
特别情况下,日志文件容易受到攻击。如果入侵者拥有系统的root用户权限或管理员权限,他就可以随意修改日志文件以掩饰行踪。UNIX可以将事件记录到一个独立的机器中。这意味着一个入侵者必须控制至少两台机器才能掩饰行踪。类似的功能在NT中也可以实现,但是没有在UNIX下实现容易。
系统管理员可以进行定期审计。但是我们可能还要一个外部的审计人员定期检查管理员的操作。
操作系统允许把各种各样的事件记入到日志文件中。从安全的角度考虑,我们可能关心的事件包括网络错误,对特定数据文件(例如,配置文件或NT注册表)的访问,对一些特定的程序(例如,在UNIX系统中使用su命令,可用来将自己变成另一个用户,通常是root用户)的调用。
日志文件还可以帮助我们在出错的时候检测错误或者恶意操作。如果在注意到问题之后检查它们,它们还可以告诉我们一个问题或者非法入侵是如何发生的。日志文件有两个主要问题,大小和准确性。
如果将检测和记录问题的条件设置为最极端的情况,最终将得到庞大的日志文件而难以检查。要帮助整理庞大的日志文件,可能需要使用一个现存的工作或者从安全政策中得到的审计脚本,这样就可以在日志中搜索“感兴趣”的事件。审计过程可以实时发生,也可以定期发生。
特别情况下,日志文件容易受到攻击。如果入侵者拥有系统的root用户权限或管理员权限,他就可以随意修改日志文件以掩饰行踪。UNIX可以将事件记录到一个独立的机器中。这意味着一个入侵者必须控制至少两台机器才能掩饰行踪。类似的功能在NT中也可以实现,但是没有在UNIX下实现容易。
系统管理员可以进行定期审计。但是我们可能还要一个外部的审计人员定期检查管理员的操作。
15.14 防火墙
在网络中,设计防火墙的目的是将本地网络与外部网络相分离。
防火墙用于保护内部网络中的机器以防外来攻击。它过滤和拒绝不符合标准的消息,限制防火墙之外的个人和机器的行为。
有时,防火墙也用于限制其内部的个人和机器的行为。一个防火墙可以限制用户使用的网络协议,限制他们可以连接的主机,或者迫使他们使用代理服务器以降低带宽费用。
防火墙可以根据信息包的类型、源地址、目的地址或端口信息对其进行过滤。对于一些信息包,可能只是简单地丢弃它,但是一些事件可能触发日志记录或者警告。
在网络中,设计防火墙的目的是将本地网络与外部网络相分离。
防火墙用于保护内部网络中的机器以防外来攻击。它过滤和拒绝不符合标准的消息,限制防火墙之外的个人和机器的行为。
有时,防火墙也用于限制其内部的个人和机器的行为。一个防火墙可以限制用户使用的网络协议,限制他们可以连接的主机,或者迫使他们使用代理服务器以降低带宽费用。
防火墙可以根据信息包的类型、源地址、目的地址或端口信息对其进行过滤。对于一些信息包,可能只是简单地丢弃它,但是一些事件可能触发日志记录或者警告。
15.15 备份数据
在任何灾难恢复计划中,都不能够低估备份的重要性。
我们必须定期备份网站的所有组件——静态网页、脚本和数据库。备份的频率取决于网站的动态程度。如果它完全是静态的,可以只在修改网站的时候对其进行备份。但是,在本书中,我们所讨论的这类网站可能都要频繁修改,特别是如果接收在线订单的话。
大多数规模适当的网站都需要在服务器上使用RAID(廉价冗余磁盘阵列),它可以支持镜像。
应该根据更新量的大小以一定的频率进行独立的备份。这些备份应该保存在独立的介质上,这些介质更适宜放置于一个安全的、独立的地方,以防火灾、盗窃或自然灾害。
在任何灾难恢复计划中,都不能够低估备份的重要性。
我们必须定期备份网站的所有组件——静态网页、脚本和数据库。备份的频率取决于网站的动态程度。如果它完全是静态的,可以只在修改网站的时候对其进行备份。但是,在本书中,我们所讨论的这类网站可能都要频繁修改,特别是如果接收在线订单的话。
大多数规模适当的网站都需要在服务器上使用RAID(廉价冗余磁盘阵列),它可以支持镜像。
应该根据更新量的大小以一定的频率进行独立的备份。这些备份应该保存在独立的介质上,这些介质更适宜放置于一个安全的、独立的地方,以防火灾、盗窃或自然灾害。
15.15.2 备份与恢复MySQL数据库
备份一个正在工作的数据库比较复杂。要避免在数据库修改的过程中复制任何表数据。
备份一个正在工作的数据库比较复杂。要避免在数据库修改的过程中复制任何表数据。
15.16 自然环境安全
到目前为止,我们考虑的安全威胁都与无形的东西(如软件)有关,但是,我们不应该忽略系统的自然环境安全。网站需要空调,需要防火、防人(笨拙的人和罪犯)、防止电力故障和网络故障。
到目前为止,我们考虑的安全威胁都与无形的东西(如软件)有关,但是,我们不应该忽略系统的自然环境安全。网站需要空调,需要防火、防人(笨拙的人和罪犯)、防止电力故障和网络故障。
15.17 下一章
相关阅读:
- 《PHP和MySQL Web开发》学习笔记(十三) (jayson, 2007-9-05)
- 《PHP和MySQL Web开发》学习笔记(十四) (jayson, 2007-9-07)
- 《PHP和MySQL Web开发》学习笔记(十五) (jayson, 2007-9-11)
- 《PHP和MySQL Web开发》学习笔记(十六) (jayson, 2007-9-14)
