安全web服务器的设计与实现 web服务器安全程序有哪些实现方式
什么是 Web安全?Web应用漏洞的防御实现
什么是 Web安全?
创新互联总部坐落于成都市区,致力网站建设服务有成都网站建设、成都网站设计、网络营销策划、网页设计、网站维护、公众号搭建、成都小程序开发、软件开发等为企业提供一整套的信息化建设解决方案。创造真正意义上的网站建设,为互联网品牌在互动行销领域创造价值而不懈努力!
Web安全是计算机术语。随着Web2.0、社交网络等一系列新型的互联网产品诞生问世,基于Web环境的互联网应用越来越广泛,企业信息化的过程中各种应用都架设在Web平台上,Web业务的迅速发展也引起黑客们的窥探,接踵而至的就是Web安全威胁的凸显。
黑客利用网站操作系统的漏洞和Web服务程序的SQL注入漏洞等得到Web服务器的控制权限,轻则篡改网页内容,重则窃取重要内部数据,更为严重的则是在网页中植入恶意代码,使得网站访问者受到侵害。
Web安全的现状及原因
目前,很多业务都依赖于互联网,无论是网上银行、网上购物、还是网络 游戏 等,恶意攻击者们出于各种不良目的,对Web 服务器进行攻击,想方设法通过各种手段获取他人的个人账户信息谋取利益。正是如此,Web业务平台最容易遭受攻击。
而针对Web服务器的攻击也是五花八门,常见的有挂马、SQL注入、缓冲区溢出、嗅探、利用IIS等针对Webserver漏洞进行攻击。
一方面,由于TCP/IP的设计是没有考虑安全问题的,网络上传输的数据是没有任何安全防护。攻击者们可利用系统漏洞造成系统进程缓冲区溢出,攻击者可能获得或者提升自己在有漏洞的系统上的用户权限来运行任意程序,甚至安装和运行恶意代码,窃取机密数据。
而应用层面的软件在开发过程中也没有过多考虑到安全的问题,这使得程序本身存在很多漏洞,诸如缓冲区溢出、SQL注入等等流行的应用层攻击,这些都属于在软件研发过程中疏忽了对安全的考虑所致。
另一方面,个人用户由于好奇心,被攻击者利用木马或病毒程序进行攻击,攻击者将木马或病毒程序捆绑在一些诱人的图片、音视频或免费软件等文件中,然后将这些文件置于某些网站当中,再引诱用户去单击或下载运行,或通过电子邮件附件和QQ、MSN等即时聊天软件,将这些捆绑了木马或病毒的文件发送给用户,让用户打开或运行这些文件。
Web安全的三个细分
Web安全主要分为:1、保护服务器及其数据的安全。2、保护服务器和用户之间传递的信息的安全。3、保护Web应用客户端及其环境安全这三个方面。
Web应用防火墙
Web应用安全问题本质上源于软件质量问题。但Web应用相较传统的软件,具有其独特性。Web应用往往是某个机构所独有的应用,对其存在的漏洞,已知的通用漏洞签名缺乏有效性;
需要频繁地变更以满足业务目标,从而使得很难维持有序的开发周期;需要全面考虑客户端与服务端的复杂交互场景,而往往很多开发者没有很好地理解业务流程;人们通常认为Web开发比较简单,缺乏经验的开发者也可以胜任。
Web应用安全,理想情况下应该在软件开发生命周期遵循安全编码原则,并在各阶段采取相应的安全措施。
然而,多数网站的实际情况是:大量早期开发的Web应用,由于 历史 原因,都存在不同程度的安全问题。对于这些已上线、正提供生产的Web应用,由于其定制化特点决定了没有通用补丁可用,而整改代码因代价过大变得较难施行或者需要较长的整改周期。
这种现状,专业的Web安全防护工具是一种合理的选择。WEB应用防火墙(以下简称WAF)正是这类专业工具,提供了一种安全运维控制手段:基于对HTTP/HTTPS流量的双向分析,为Web应用提供实时的防护。
Web应用漏洞的防御实现
对于常见的Web应用漏洞,应该从3个方面入手进行防御:
1、对 Web应用开发者而言
大部分Web应用常见漏洞都是在Web应用开发中,由于开发者没有对用户输入的参数进行检测或者检测不严格造成的。所以,Web应用开发者应该树立很强的安全意识,开发中编写安全代码;
对用户提交的URL、查询关键字、HTTP头、POST数据等进行严格的检测和限制,只接受一定长度范围内、采用适当格式及编码的字符,阻塞、过滤或者忽略其它的任何字符。通过编写安全的Web应用代码,可以消除绝大部分的Web应用安全问题。
2、对Web网站管理员而言
作为负责网站日常维护管理工作Web管理员,应该及时跟踪并安装最新的、支撑Web网站运行的各种软件的安全补丁,确保攻击者无法通过软件漏洞对网站进行攻击。
除了软件本身的漏洞外,Web服务器、数据库等不正确的配置也可能导致Web应用安全问题。Web网站管理员应该对网站各种软件配置进行仔细检测,降低安全问题的出现可能。
此外,Web管理员还应该定期审计Web服务器日志,检测是否存在异常访问,及早发现潜在的安全问题。
3、使用网络防攻击设备
前两种都是预防方式,相对来说很理想化。在现实中,Web应用系统的漏洞仍旧不可避免:部分Web网站已经存在大量的安全漏洞,而Web开发者和网站管理员并没有意识到或发现这些安全漏洞。
由于Web应用是采用HTTP协议,普通的防火墙设备无法对Web类攻击进行防御,因此需要使用入侵防御设备来实现安全防护。
如何用Java实现Web服务器
一 HTTP协议的作用原理
WWW是以Internet作为传输媒介的一个应用系统 WWW网上最基本的传输单位是Web网页 WWW的工作基于客户机/服务器计算模型 由Web 浏览器(客户机)和Web服务器(服务器)构成 两者之间采用超文本传送协议(HTTP)进行通信 HTTP协议是基于TCP/IP协议之上的协议 是Web浏览器和Web服务器之间的应用层协议 是通用的 无状态的 面向对象的协议 HTTP协议的作用原理包括四个步骤
( ) 连接 Web浏览器与Web服务器建立连接 打开一个称为socket(套接字)的虚拟文件 此文件的建立标志着连接建立成功
( ) 请求 Web浏览器通过socket向Web服务器提交请求 HTTP的请求一般是GET或POST命令(POST用于FORM参数的传递) GET命令的格式为
GET 路径/文件名 HTTP/
文件名指出所访问的文件 HTTP/ 指出Web浏览器使用的HTTP版本
( ) 应答 Web浏览器提交请求后 通过HTTP协议传送给Web服务器 Web服务器接到后 进行事务处理 处理结果又通过HTTP传回给Web浏览器 从而在Web浏览器上显示出所请求的页面
例 假设客户机与 /mydir/l建立了连接 就会发送GET命令 GET /mydir/l HTTP/ 主机名为的Web服务器从它的文档空间中搜索子目录mydir的文件l 如果找到该文件 Web服务器把该文件内容传送给相应的Web浏览器
为了告知 Web浏览器传送内容的类型 Web服务器首先传送一些HTTP头信息 然后传送具体内容(即HTTP体信息) HTTP头信息和HTTP体信息之间用一个空行分开
常用的HTTP头信息有
① HTTP OK
这是Web服务器应答的第一行 列出服务器正在运行的HTTP版本号和应答代码 代码 OK 表示请求完成
② MIME_Version
它指示MIME类型的版本
③ content_type 类型
这个头信息非常重要 它指示HTTP体信息的MIME类型 如 content_type text/指示传送的数据是HTML文档
④ content_length 长度值
它指示HTTP体信息的长度(字节)
( ) 关闭连接 当应答结束后 Web浏览器与Web服务器必须断开 以保证其它Web浏览器能够与Web服务器建立连接
二 Java实现Web服务器功能的程序设计
根据上述HTTP协议的作用原理 实现GET请求的Web服务器程序的方法如下
( ) 创建ServerSocket类对象 监听端口 这是为了区别于HTTP的标准TCP/IP端口 而取的
( ) 等待 接受客户机连接到端口 得到与客户机连接的socket
( ) 创建与socket字相关联的输入流instream和输出流outstream
( ) 从与socket关联的输入流instream中读取一行客户机提交的请求信息 请求信息的格式为 GET 路径/文件名 HTTP/
( ) 从请求信息中获取请求类型 如果请求类型是GET 则从请求信息中获取所访问的HTML文件名 没有HTML文件名时 则以l作为文件名
( ) 如果HTML文件存在 则打开HTML文件 把HTTP头信息和HTML文件内容通过socket传回给Web浏览器 然后关闭文件 否则发送错误信息给Web浏览器
( ) 关闭与相应Web浏览器连接的socket字
下面的程序是根据上述方法编写的 可实现多线程的Web服务器 以保证多个客户机能同时与该Web服务器连接
程序 WebServer java文件
//WebServer java 用JAVA编写Web服务器
import java io *
import *
public class WebServer {
public static void main(String args[]) {
int i= PORT=
ServerSocket server=null
Socket client=null
try {
server=new ServerSocket(PORT)
System out println( Web Server is listening on port +server getLocalPort())
for ( ) {client=server accept() //接受客户机的连接请求
new ConnectionThread(client i) start()
i++
}
} catch (Exception e) {System out println(e) }
}
}
/* ConnnectionThread类完成与一个Web浏览器的通信 */
class ConnectionThread extends Thread {
Socket client //连接Web浏览器的socket字
int counter //计数器
public ConnectionThread(Socket cl int c) {
client=cl
counter=c
}
public void run() //线程体
{try {
String destIP=client getInetAddress() toString() //客户机IP地址
int destport=client getPort() //客户机端口号
System out println( Connection +counter+ connected to +destIP+ on port +destport+ )
PrintStream outstream=new PrintStream(client getOutputStream())
DataInputStream instream=new DataInputStream(client getInputStream())
String inline=instream readLine() //读取Web浏览器提交的请求信息
System out println( Received +inline)
if (getrequest(inline)) { //如果是GET请求
String filename=getfilename(inline)
File file=new File(filename)
if (file exists()) { //若文件存在 则将文件送给Web浏览器
System out println(filename+ requested )
outstream println( HTTP/ OK )
outstream println( MIME_version )
outstream println( Content_Type text/ )
int len=(int)file length()
outstream println( Content_Length +len)
outstream println( )
sendfile(outstream file) //发送文件
outstream flush()
} else { //文件不存在时
String notfound=
Error file not found
outstream println( HTTP/ no found )
outstream println( Content_Type text/ )
outstream println( Content_Length +notfound length()+ )
outstream println( )
outstream println(notfound)
outstream flush()
}
}
long m =
while (m ) {m ++ } //延时
client close()
} catch (IOException e) {
System out println( Exception +e)
}
}
/* 获取请求类型是否为 GET */
boolean getrequest(String s) {
if (s length() )
{if (s substring( ) equalsIgnoreCase( GET )) return true
}
return false
}
/* 获取要访问的文件名 */
String getfilename(String s) {
String f=s substring(s indexOf(′ ′)+ )
f=f substring( f indexOf(′ ′))
try {
if (f charAt( )==′/′)
f=f substring( )
} catch (StringIndexOutOfBoundsException e) {
System out println( Exception +e)
}
if (f equals( )) f= l
return f
}
/*把指定文件发送给Web浏览器 */
void sendfile(PrintStream outs File file) {
try {
DataInputStream in=new DataInputStream(new FileInputStream(file))
int len=(int)file length()
byte buf[]=new byte[len]
in readFully(buf)
outs write(buf len)
outs flush()
in close()
} catch (Exception e) {
System out println( Error retrieving file )
System exit( )
}
}
}
程序中的ConnectionThread线程子类用来分析一个Web浏览器提交的请求 并将应答信息传回给Web浏览器 其中 getrequest()方法用来检测客户的请求是否为 GET getfilename(s)方法是从客户请求信息s中获取要访问的HTML文件名 sendfile()方法把指定文件内容通过socket传回给Web浏览器
对上述程序的getrequest()方法和相关部分作修改 也能对POST请求进行处理
三 运行实例
为了测试上述程序的正确性 将编译后的WebServer class ConnectionThread class和下面的l文件置于网络的某台主机的同一目录中(如 主机NT SRV的C JWEB目录)
程序 l文件
这是用JAVA写出的WEB服务器主页
年 月 日
首先在该主机上用java命令运行WebServer class
C jwebjava webserver
然后在客户机运行浏览器软件 在URL处输入WebServer程序所属的URL地址(如 ) 就在浏览器窗口显示出指定的HTML文档
注意 不能缺省端口号 如缺省 则运行该主机的正常WEB服务器
lishixinzhi/Article/program/Java/hx/201311/26626
如何在Win8系统中搭建Web服务器
对于网站开始人员来说,搭建WEB服务器是实现开发的第一步,也是所必须具备的基本技能。同时对于刚接触WEB设计的人员来说,这也是自我学习的开始。今天就让我们一起来学习一直在Win8系统中搭建WEB服务器的基本方法,希望对大家有所帮助。
操作步骤如下:
1、将鼠标移动到桌面右下方,然后从弹出的扩展菜单中点击“设置”按钮,将在打开的扩展窗口中选择“控制面板”项进入。
2、在打开的“控制面板”窗口中,依次点击“程序”→“启动或关闭Windows功能”。
3、接着在打开的“Windows窗口”功能窗口中,勾选“Web管理工具”下面所有地的选项,勾选“万维网服务”下面的“应用程序开发”下所有选项。如图所示,最后点击“确定”按钮,以便完成更新过程。
4、更新完成后,再次进入“控制面板”,点击“系统和安全”→“管理工具”,并在打开的“管理工具”窗口中找到并双击“”进入。
5、在打开的“Internet(IIS)信息服务”窗口中,依次展开“PC”→“网站”→“Default Web Site”,然后切换到“内容视图”模式,右击“iisstart.htm”,从弹出的右键菜单中选择“浏览”项。
6、如果此时能打开网页,则表示IIS已安装完成,Web服务器就搭建成功啦。
参考链接:
标题名称:安全web服务器的设计与实现 web服务器安全程序有哪些实现方式
文章出自:http://scyanting.com/article/dddpgii.html