computer 版 (精华区)
发信人: Aug (如风), 信区: network
标 题: CGI的安全<转载> (10)
发信站: 听涛站 (Tue Mar 14 16:04:37 2000), 转信
3.安全处理
我前面简要讨论的只是安全问题的一个方面。现在流行的CGI应用程序倾向于
收集信用卡信息。数据收集是CGI应用程序的一个简单的任务,但是敏感信息的
收集需要一个将信息从浏览器传送给服务器和CGI程序的安全途径。
举个例子,假设我要通过Internet来销售书。我可能在浏览器上建立一个表
单,允许要购书的顾客通过表单提交它的个人信息和信用卡号码。受到这些信
息后,我会将它们存储到我的计算机作为商业记录。
如果有人侵入我的商业计算机,那么他可能会访问存放顾客信息和信用卡号
码的机密数据。为了避免这种情况,我会审查我的计算机配置安全了,并确定
用来接受表单的CGI脚本不会被恶意的操纵。换句话说,我,作为计算机的系统
管理员和CGI程序员,要尽力控制住第一个问题:防止信息直接从我的计算机中
被窃取。
然而,怎样防止当信息由客户端发往服务器过程中有人中途窃取呢?记住信
息怎样由Web服务器传送到CGI程序了吗?信息通过网络由浏览器先传送到服务
器,然后服务器将信息传送给CGI程序。这些信息可能在由客户机传送到服务器
时被中途窃取(如图2)。注意,为了保护信息使其不会被中途窃取,必须在客户
和服务器之间进行加密。当然,如果你的客户机不能识别的话,你不能执行特
定CGI的加密。
_______________ ______________
| 浏览器 | 表单输入 | |
|(用户提交表单; |—————————————>| |
|浏览器将其以通 |<—————————————| 服务器 |
|常文本发送出去)| 分析CGI输出 | |
--------------- | | --------------
| | 表 || /\CGI
不怀好意的hacker 单 || ||输
输 || ||出
入 || ||
\/ ||
_____________
| |
| CGI |
| |
-------------
(图2)
More: Java,CGI和安全处理
由于Web处理的特点,使用你独有的单独通过CGI程序实现的安全处理协议的
唯一途径是:在表单信息通过浏览器传送到服务器之前将其加密。这个方案如
图3。
_______________ ______________
| 浏览器 | 加密表单输入 | |
| 用户提交表单; |—————————————>| |
|浏览器将输入加 |<—————————————| 服务器 |
|密,发送加密信息| 分析CGI输出 | |
--------------- | | --------------
| | 加 || /\CGI
阻止 修补 密 || ||输
恶意 再次 输 || ||出
hacker 阻止 入 || ||(解密)
\/ ||
_____________
| CGI |
|解密处理输入,|
| 发出响应。 |
-------------
(图3)
之前,发展你自己的安全处理协议几乎是不可能的。感谢Java这样的语言,最
近在客户端处理所作的创新,使得这个发展变成可能。
方法是产生一个标准HTML格式扩展的Java接口。当Java的提交按钮被选择时,
Java Applet会在利用标准的POST HTTP请求将它发送到Web服务器前先将值加密
(参照图4)
Web浏览器
_______________ ______________
| JAVA APPLET | 加密数据 | |
| 表单;用户提交 |—————————————>| |
|数据,APPLET加密|<—————————————| 服务器 |
|数据,发给服务器| CGI输出 | |
--------------- --------------
加 || /\CGI
密 || ||输
数 || ||出
据 || ||
\/ ||
________________
| CGI |
|使用与APPLET相同|
|方案解密数据并处|
|理,发出解密响应.|
----------------
(图4)
使用Java作为客户机来发送和接收加密的数据将允许你使用自己定制的加密
方案,而不需要一个昂贵的商业服务器。
因此,在网络上安全保密地传送数据信息需要调整浏览器和服务器之间的通
信路径,有一些是不能仅仅靠CGI就能够控制的。目前有两种加密客户机/服务
器信息处理的建议:SSL(Secure Sockets Layer)和SHTTP(Secure HTTP),分别
由Netscape和EIT(Enterprise Integrations Technology)提议。关于这点,
目前还不清楚哪一个将成为标准;很多公司在他们的服务器中两种都采用了。
因此,知道如何在这两者中编写CGI程序是很有用的。
3-1.SSL
SSL是一个协议独立的加密方案,在网络信息包的应用层和传输层之间
提供了安全的通道(参照图5)。简单说来,就是HTML或CGI经过了幕后的
服务器进行了加密处理,然而对HTML和CGI的作者来说是透明的。
_______________ ____________________
| 浏览器 | 传输层加密数据 | 服务器 |
|(发出标准的HTTP |—————————————>|(解密数据;解释成标准|
| 请求) |<—————————————|请求并发出标准响应) |
---------------- 传输层加密数据 --------------------
(图5)
因为客户端和服务器端网络程序处理加密过程,几乎你的所有的CGI脚本不
需要进行安全事务的修正。有一个显著的例外。一个nph(no-parse-header)
的CGI程序绕过服务器而直接与客户端进行通信。因此,nph的CGI脚本不会经
过加密处理,因为信息未得到加密。受此影响的一个值得注意的CGI应用程序
是Netscape服务器推动的动态实现(Netscape server-push animations)。我
怀疑这是主要应该值得注意的,然而,更有可能因为要安全的传输敏感信息
而牺牲页面中的动画。
3-2.SHTTP
SHTTP采用一种和SSL不同的方法。它通过扩展HTTP协议(应用层)来运作,优
于一个较低层。因此,尽管SSL可以应用于所有的网络服务,然而SHTTP是一个
特定的Web协议。
另外,还有其它的优点。作为HTTP的扩展集,SHTTP全兼容于HTTP和SHTTP的
浏览器和服务器。为了使用SSL,你必须有一个支持SSL的浏览器和服务器。另外,
SHTTP是一个更灵活的协议。例如,这个服务器可以指定首选的加密方案。
SHTTP处理依赖于附加的HTTP头。因此,如果你想让你的CGI程序采用SHTTP的
加密处理,你需要包含适当的头。例如,替换简单返回HTTP头。
Content-type:text/html
当一个SHTTP服务器从CGI应用程序中收到这个信息,它会知道在将其发送到
浏览器之前将信息加密。一个非SHTTP的浏览器将忽略附加的头。
关于使用SHTTP的更多的信息,请参照SHTTP的说明书:
http://www.commerce.net/information/standards/drafts/shttp.txt
4.概要
安全是你在处理网络应用程序(例如WWW)中不可避免的一件事。如果你的
Web服务器没有安全的配置,那么编写安全的CGI应用程序就不是非常有用
的了。一个正确配置的Web服务器,从另一方面讲,可以最小限度的减少因
为糟糕的CGI脚本而带来的损害。
大体上,我们应该记住下面的原则:
A.你的程序应当只能提供你指定的服务。
B.不到必要的时候不暴露任何有关你的服务器的信息。
C.如果有人成功的闯入你的系统,应最小限度的减少损害。
D.确定你的应用程序是安全可靠并且严密的。
当你编写CGI程序时,要特别注意你的编程语言的局限性(或不足)以及传
递给shell的不确定的变量。
--
※ 来源:.华南网木棉站 bbs.gznet.edu.cn.[FROM: 202.193.76.12]
--
※ 来源:.听涛站 cces.net.[FROM: 匿名天使的家]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:1.335毫秒