http www安全必备知识

要投巨资维护Web站点的安全。另一个最近的例子是,国内最大的综合性网站新浪在某天上午被黑客成功攻击,其门户页面被换成了黄色页面。给新浪造成了不小的副作用。这两个例子说明了Web站点的安全是十分重要的,可以说,随着Internet的飞速发展,Web的安全其重要性逐渐超过其他应用安全。同时,由于Web必须要有开放性,这就是说,必须让任何人都能够有访问的权利,因此,使得防范更加困难。

Web的安全分为服务器安全和客户端安全(浏览器),前者主要针对Web的构建者,后者针对普通的用户。本章将就这两方面展开讨论。

二、什么是HTTP

HTTP(Hypertext Transfer Protocol)超文本传输协议允许用户从WWW(World Wide Web)以及其他分布式信息系统请求和接受超文本的内容。它运行在TCP之上并用绑定服务器端口80,然后它还可以使用其他端口和协议来提供一个可靠的数据流。它是一个请求/响应协议。为了获得信息,一个浏览器客户程序(如netscape)向一个Apache服务器建立一个TCP连接并请求一个资源(“GET”)。服务器检查请求并根据服务器配置和包含的内容进行响应。服务器也许发送一个超文本标记语言(HTML)文件、文本、图片、声音、影像或一个java applet,它们可以在浏览器显示出来。服务器也可以运行一个程序来响应浏览器的请求(如通用网关接口或服务器的应用程序接口)。

测试HTTP连接的一个简易方法(同时也是一个潜在的安全漏洞)是telnet到一个Web服务器主机的端口80。可以输入“GET/”来浏览站点的基本HTML文档(如index.html),如下所示(去掉了HTML内容):

$ telnet 80

Trying…

Connected to .

Escape character is ‘^]'

(在此敲入GET /) GET /

下面刷的出来一个html的文件,例如:

<html>

<head>

<title>老虎之家</title>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

</head>

<frameset rows="128,327*" frameborder="YES" border="0" framespacing="0" cols="*

<frame name="topFrame" scrolling="NO" noresize src="index-3.html" >

<frame name="mainFrame" src="index-2.html">

</frameset>

<noframes><body bgcolor="#FFFFFF">

</body></noframes>

</html>

Connection closed by foreign host.

三、安全风险的分类

Web安全风险一般可以分为三类:

l 对Web服务器及其相连LAN的威胁

对Web客户机的威胁

对服务器和客户机之间的通信信道的威胁

1.服务器的风险

通常的网络安全总是设置各种各样的限制,使得不明身份的人无法获得非授权的服务但是Web服务器恰恰相反,它希望接受尽可能多的客户,对客户几乎没有任何限制和要求,好了,这样,相对于其他网络服务器,Web是最容易受到攻击的。最常见的威胁是HTTP服务器软件中的bug、错误的配置、不安全的CGI程序或者缺乏强大的机密功能等等。服务器通常受到的侵害有:修改和替换服务器提供的内容;获得对服务器访问控制保护的保密文档的访问权;在服务器上执行任意命令并破坏服务器的系统安全;检查日志文件来危害用户的隐私;进行服务拒绝攻击,使服务器或者网络连接失败。

2.客户端风险

浏览网页是一个并不十分安全的活动。Bug、不合适的“活跃内容”和脚本以及服务器管理可以带给浏览者如下危害:应用程序和系统崩溃;包括病毒和特洛一木马在内的恶意代码;丢失保密的信息;隐私被侵犯等等。

主要的Web浏览器都支持下载嵌在HTML主页中的脚本并在浏览器中执行他们的功能。通常,这些程序用来与用户交互并在浏览器和服务器之间传输信息。例如,在Netscape的javascript和微软的Vbscript中都存在过bug。甚至在没有bug时,对一个有恶意的Web管理员来说,把能够突破保密措施或引起严重损失的脚本放在HTML主页中也是挺容易的。一种常见的攻击方式是创建一个javascript来欺骗性的产生一个错误信息或一个提示来要求用户提供网络登录ID和口令。其他的客户风险来自于隐私的侵犯。许多Web站点为客户写了一个验证cookie,cookie可以跟踪用户并暴露他们去了什么站点。按照指定cookie处理的RFC的要求,客户软件应提供一种方式来指明cookie应该或不应该被保存的域。

3.传输安全

在Web客户机和Web服务器之间传输的信息可能在连接的任一端或中间任何地方被窃听或截取,包括客户机的LAN、服务器的LAN、客户机的ISP、服务器的ISP、两个ISP之间的任何中介网络。

幸运的是,目前IPSec(IP协议安全体系结构)的提出,使得网络通信可以通过在IP层进行认证和加密。但是目前还没有普及。

四、保护Web服务器的安全

1.选择安全的服务器软件

在Linux上有很多的httpd服务器软件。例如:

* America Online Inc. AOLserver2.x

* Allegro Software RomPager 2.x

* Apache Group Apache1.x

* Hawkeye Project Hawkeye 1.x.x

* Sun Microsystems Java Server 1.x

* Idonex AB Roxen 1.x

* Spyglass Spyglass MicroServer 2.x

* Rapid Logic Inc. WebControl 2.x

* IMatix Xitami 2.x

* Zeus Technology Zeus Web Application Server 3

* VqSoft vqServer 1.x

如果大家有兴趣,可以到有关的站点去访问,了解其性能和特点。在这些软件中,Apache无疑是最为成功的。在Internet上有超过一半的网站使用Apache。在Apache的最新版本中有以下安全特征:

* 可以通过域名、IP地址、用户和分组来禁止访问

* 可以配置用户分组(而不是单独一个用户列表)

* 可以不重启服务器来修改用户访问控制列表

* CGI可执行程序能在拥有者的UID下执行

* 基于目录文档的权限是分层的

* 一个文档的一部分可以根据安全规则被隐藏

* 支持SSL2.0和3.0

* 有一个可用的口令机制

* 可以基于URL制定安全规则

2.服务器配置的一般规则

通常,Web服务器应该把一些好的系统安全路径、配置和工具结合起来加强安全。例如:

尽量让一个主机投入Web服务器之中,不允许无理由的交互式登录。删除Web管理员帐号之外的其他用户

从/etc/inetd.conf中禁止不需要的服务。如果站点需要ftp功能,那么让另外一台主机作为ftp服务器。其他服务应该被禁止或者限制,包括telnet、finger、netstat/systat、echo等等。

删除不需要的shell和解释器。如果不运行Perl CGI脚本,就删除Perl

不支持自动列目录、符号链跟随和服务器端包含这样的选项

密切检测Web日志

应用安全的Web服务器软件,如支持Secure Sockets Layer(SSL)的软件

考虑在一个chroot环境中运行服务器

使用防火墙来控制对服务器的访问

仔细规划谁能访问一个安全服务器上的内容目录是很重要的。多数Web服务器支持各种访问控制方式。通常可以把访问权限在指定的IP地址或DNS主机名中,或指定必须提供口令来采访特定目录的用户。如果一个Web服务器中有保密的公司信息,就需要采取措施保证资料在自己的手中。在一个服务器上使用CGI要格外小心。一个CGI程序可能在系统中做出任何事情,从向外部人员提供访问权限到删除重要文件。

五、保护Web客户端的安全

客户端软件通常是微软的IE,或是被微软挤压的netscape(还好在x-window下使用率比较高),还有简单的lynx等等。

1.好的客户端安全经验

要认真考虑程序提供的安全设置,如果禁止了java和javascript,就会使浏览器更安全。应定期清理cache和cookie文件,避免去声誉不佳的站点以及使用“save”选项合为不可信的文件使用“open”选项。

2.Mozilla

1998年,netscape公司决定发行navigator的源代码,并创建一个单独的机构来监控它的发行与维护:Mozilla.org。我们如果有时间的话,分析它的源代码相信对我们提高客户端安全有很大好处。详见

3.Lynx

没有图片,没有声音的文本浏览器,我喜欢用它(在Linux下),但是注意,在缺省情况下不支持SSL。

4.用户隐私

有些站点要求用户在得到访问权之前必须登记。多数站点维护服务器日志,这有可能泄漏敏感信息,包括IP地址、ISP、前一个访问的站点等等。其他站点把cookie推到管道中以便在以后关联用户访问的站点。

用户可以遵循下面的规则:

不要求用户登记

只收集用户的电子邮件地址而不是完整的联系信息

不要与第三方共享电子邮件地址

不要使Web上的日志文件可以被访问

当日志文件不再需要时删除他们

目前,World Wide Web Consortium已经开始指定称为Platform for Privacy Preferences的声明,允许用户根据自己的意愿来控制身份信息的公布。不过,对我们国家不使用。

六、保护传输安全

从用户的观点来看,Web浏览可能危害隐私。它允许TCP/IP在两台机器之间提供一个匿名的数据流,但它不提供保密性、完整性和认证服务。有几个方案能为TCP/IP添加一个安全层,包括Secure Shell(SSH)和Microsoft的PCT。目前Secure Sockets Layer(SSL)占优势。

1.SSL

SSL是netscape用来在应用协议(如http、telnet、nntp或者ftp)和更低的TCP/IP层之间提供数据安全的协议。他提供三种基本的安全特征:

保密性 保密是通过对进程加密来实现的。根据连接双方的秘密协商,对称加密的密钥对每个连接都是唯一的

服务器认证 客户端要检查一个有效服务器的X.508v3证明,不论是一个RSA公开密钥证明,一个数字签名标准(DSS)证明,还是一个Diffie-Hellman证明。证明一般是由可信的证明代理发出的。

信息完整信 信息完整性(不被改动或者丢失)是由MAC(Message Authentication Code)保护的,它是一个根据信息和秘密数据进行计算的单项哈希函数。

另外,SSL提供一个可选的客户端认证。SSL的其他功能以及特殊的服务器认证被广泛应用于电子商务。虽然不同的Web浏览器以不同的方式指明一个安全的SSL连接,但是以“https://”开始的URL指明在客户端和服务器之间已经建立了一个安全的连接。

详见

2.TLS

TLS(Transport Layer Security)是由Transport Layer Security Working Group起草的,产生了一个RFC文档。

TLS用来建立一个安全的“会话”——它是一个客户机和一个服务器之间的关联,用来避免进行昂贵的协商来为每个新的安全参数建立一个额外的连接。该协议分为上层的TLS Handshake协议和下层的TLS Record协议。TLS Handshake协议为一个安全的会话建立加密参数。当使用TLS的客户端和服务器建立通信时,他们对协议版本达成一致,选择加密算法,还可以互相进行认证,并使用公开密钥加密技术来产生共享的秘密。

详见

3.建立一个TLS/SSL服务器

多数商用Web服务器产品的使用SSL。SSLeay使用了几个加密算法,某些可能要求商业许可证。SSLeay实现了5个不同的算法:DES、RSA、RC4、IDEA和Blowfish。RSA的专利属于美国。使用它是需要许可证的。

SSLeay和OpenSSL都可以集成到Apache Web服务器中。程序员Ben Laurie开发了一个Apache-SSL包,为Apache提供一组补丁程序、一些额外的源代码、一些帮助文件和配置文件实例。补丁程序需要用在Apache源代码中,其结果与SSLeay或OpenSSL编译并链接。

可以从下面的站点下载:

如果双方都知道另一方使用TLS/SSL,那么可以使任何运行在任一端口上的基于TCP地协议得到透明的安全。但是由于实际原因,为每个使用TLS/SSL保护安全的协议保留了几个端口号,这样允许包过滤防火墙让这些安全传输通过。例如:

名称    端口号   描述

Nsiiops 261/tcp  Iiop名字服务

https   443/tcp  http协议

Ddm-ssl 448/tcp  DDM-SSL

Smtps   465/tcp  Smtp协议

Nntps   563/tcp  nntp协议

Sshell  614/tcp  SSLshell

Ldaps   636/tcp  Ldap协议

ftp-data 989/tcp  ftp协议和数据

Ftps    990/tcp   ftp控制

Telnets 992/tcp   telnet协议

Imaps   993/tcp   Imap4协议

Ircs    994/tcp   Irc协议

Pop3s   995/tcp   Pop3协议

七、其他

大多数Web服务器被设计成是由超级用户启动的。服务器必须作为root运行,使他能监视端口80。一旦服务器开始运行,它要改变它的UID中规定在配置文件中的用户名。不要像root那样运行你的服务器,虽然你的服务器必须用root启动,http.conf文件中一定不要包括user root行。如果这样,你的Web服务器执行的每个脚本都将作为超级用户运行,产生许多潜在地问题。

要当心把http和匿名ftp混合。许多站点用相同的目录来存储通过匿名ftp和通过网站访问的文档。例如,你可能有一个名为/netDocs的目录,他既是你的ftp用户的主目录又是你的Web服务器的根目录。这就允许把文件归到两类URLS,例如或者。在ftp上的http的主要优点是速度快、效率高。但是混合出现了各种安全问题:

允许匿名ftp访问http目录,给用户提供了在任何Web服务器上限制对文件的访问的办法。因此,如果在你的Web服务器上有机密文件长久使用这个办法,可能失去文件的机密性。

如果一个攻击者能下载你的CGI脚本,他可以搜索出攻击的路径。

你必须完全的确保ftp用户无法上载一个能在你的服务器上运行的脚本

显示给你的/etc/passwd文件也可能被用WWW服务的人见到,从而导致它的内容受破坏。

另外,还有一些注意事项:

删除不必要的用户(前面提到过)

不要安放NFS或输出任何目录

删除所有的编译程序

删除所有的不是用作引导或者Web服务器的实用程序

提供尽可能少的网络服务(再次重申)

不要运行邮件服务器

如果想知道更多关于HTTP/WWW的安全知识,请访问

(0)

相关推荐

  • 浅谈Python 钉钉报警必备知识系统讲解

    本章所讲内容: 1.钉钉报警设置 2.钉钉报警脚本运行. 1.钉钉报警设置 钉钉,关于webhook的报警需求,钉钉报警也是我们在公司中常见的报警系统,在这里主要是结合zabbix二次开发使用,来达到完美报警的使用. 1.1.钉钉报警第一步,创建群机器人 接口地址: https://oapi.dingtalk.com/robot/send?access_token=a25324cafc5b0f2bb239b5e56c71e7f378f570a3d281160dbec9e4f8c4a7e493 文

  • Java开发必备知识之数组详解

    一.ASCII码 二.为什么需要数组 案例: 160班 现在 77人 统计 全班的Java成绩 用程序进行存储 变量 统计 全班不及格的同学 要 补考 补考过的同学 修改成绩 定义 77 个变量 int 帅 = 59: int 洋 = 100: int cto = 60: int ceo = 58: 三.什么是数组 概念:数组就是内存中一块 连续的 内存空间,用于存放 相同类型 的多个数据 四.定义数组 声明一个数组:确定数组中存放的数据类型 语法: 数据类型[] 数组名://建议 数据类型 [

  • Java必备知识之位运算及常见进制解读

    目录 常见几种进制? Java八种按位运算? HashMap添加元素四步曲用到的位运算? 前奏:HashMap如何添加一个元素? 第一步曲 第二步曲 第三步曲 第四步曲 终曲:为什么HashMap底层源码用这么多位运算? 您好,我是贾斯汀,欢迎又进来学习啦! [学习背景] 学习Java的小伙伴,都知道想要提升个人技术水平,阅读JDK源码少不了,但是说实话还是有些难度的,底层源码实现的原理离不开各种常用的数据结构和算法,很多时候还会用到各种位运算,比如面试必问和工作写烂透了的HashMap,就一个

  • Android开发必备知识 为什么说Kotlin值得一试

    1.Hello, Kotlin Bugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly 邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 1.1 Kotlin的身世 写了许久Java,有没有发现其实你写了太多冗余的代码? 后来你体验了一下Python,有没有觉得不写分号的感觉真是超级爽? 你虽然勤勤恳恳,可到头来却被NullPointerException折磨的死去活来,难道就没有受够这种日子么? 直到有一天你发现自己已经写了好几十万行

  • 家不是一个讲理的地方_结婚后必备知识

    已婚要看..未婚更要看 这是我的好友在异国结婚时,他父亲从大陆寄来的信,结婚当日司仪当众就把全文朗诵出来,那是我见过最安静的一次请客场合,在场学生无不为其父母的挚爱而感动,虽然事隔多年但那个场景仍然深深印在脑海中,这篇文章后来流传开了,我则是一直保存到现在,希望能对你们有所启示. <<家不是一个讲理的地方. 一份不在婚礼上的家长致辞>> 萍儿: 爸妈听到你要结婚喜讯,真为你高兴,远隔千里,我们不能参加你的婚礼,不能在婚礼上献上我们的家长致辞,这是我们内心的一点遗憾. 但你是我们的女

  • jquery中$.fn和图片滚动效果实现的必备知识总结

    前言 图片滚动效果相信对大家来说都不陌生,烂大街的效果图如下所示,js实现代码很短,不过如果想做的话,必须掌握jquery.IIFE.setInterval等基础以及$.fn用法: jquery中$.fn用法 $.fn是jquery的命名空间,如果对jquery源码有过学习,就不难发现源码中有如下代码: jquery.fn=jquery.prototype={ init:function(selector,context){ /* *code */ } } 所以说jquery.fn也就是jque

  • http www安全必备知识

    要投巨资维护Web站点的安全.另一个最近的例子是,国内最大的综合性网站新浪在某天上午被黑客成功攻击,其门户页面被换成了黄色页面.给新浪造成了不小的副作用.这两个例子说明了Web站点的安全是十分重要的,可以说,随着Internet的飞速发展,Web的安全其重要性逐渐超过其他应用安全.同时,由于Web必须要有开放性,这就是说,必须让任何人都能够有访问的权利,因此,使得防范更加困难. Web的安全分为服务器安全和客户端安全(浏览器),前者主要针对Web的构建者,后者针对普通的用户.本章将就这两方面展开

  • JavaWeb开发入门第一篇必备知识讲解

    一.基本概念 1.1.WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 1).静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变. 2).动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同. 静态web资源开发技术:Html 常用动态web资源开发技术:JSP/Servlet.ASP.PHP等 在Java中

  • JavaScript 构造函数 面相对象学习必备知识

    复制代码 代码如下: function A(x) { this.x = x; } var obj = new A(5); alert(obj.x); 这段代码十分简单,但是我们重要的是看到了一个十分惊讶的结果,obj被我们赋予了一个属性x,就如同我们在C#中使用某个类的实例的时候一样.那么这个属性是怎么样产生的呢? 关键语句:this.x=x.这句话就是进行一个属性的申明与赋值,这里,我们肯定会问到,this是什么?为什么可以使用this.x来进行申明与赋值属性呢? 其实this代表的就是我们刚

  • python学习必备知识汇总

    一.变量 1.变量 •指在程序执行过程中,可变的量: •定义一个变量,就会伴随有3个特征,分别是内存ID.数据类型和变量值. •其他语言运行完之前,一定要手动把程序的内存空间释放掉.但python解释器是自带内存回收机制的,一旦python程序运行完后,会自动释放内存空间. age=10 print(id(age),type(age),age) 2.常量 •指在程序执行过程中,不可变的量: •一般都用大写字母定义常量. AGE=10 print(AGE) 3. 变量的命名方式 •驼峰体 AgeO

随机推荐