技术改变世界 阅读塑造人生! - shaogx.com

This string was altered by TechBlog\Plugins\Example.; This is an example to show the potential of an offcanvas layout pattern in Bootstrap. Try some responsive-range viewport sizes to see it in action.

保障Web服务的安全

从基于传送的安全转移到基于信息的安全当我给出关于Web服务的介绍的时候,不可避免的就会有来自于听众的关于安全的问题。最常见的问题是:“你是如何保障Web服务的安全的”。通常会跟随着怀疑的论断:“Web服务不可能是安全的”。... 全文

Web服务 安全

浅谈Web自动化测试原理

目前市面上有很多Web UI自动化测试框架,比如WatiN, Selinimu,WebDriver,还有VS2010中的Coded UI等等. 这些框架都可以操作Web中的控件,模拟用户输入,点击等操作,实现Web自动化测试。其实这些工具的原理都一样,都是通过调用IE COM接口和HTML DOM 对IE浏览器以及WEB测试对象的操作。本文介绍脱离这些自动化测试框架。 直接使用.NET提供的shdocvm.dll库来操作IE浏览器,使用mshtml.dll库来操作IE中的 HTML对象。阅读目录优点添加引用操作IE使用IE Develop Toolbar 查看HTML DOM操作IE中的HTML元素源代码下载优点... 全文

Web自动化测试

学习如何设置 IIS Web 站点权限

我们今天依旧来学习IIS Web 的知识。IIS 将检查 Web 站点权限,以确定在 IIS Web 站点中可能发生的操作类型,例如允许脚本源访问或允许文件夹浏览。您应该为 IIS Web 站点分配权限,以便进一步保证 IIS 服务器上的站点在本指南定义的三种环境下的安全性。... 全文

IIS Web

Web服务器故障的奇怪原因

伴随着对信息化要求的不断提升,相信多数单位都会架设自己的Web服务器,来在Internet网络中发布信息、宣传自我。为了保证任何一位上网用户都能顺畅地访问到Web服务器中的内容,网络管理员在正式发布Web信息之前往往需要设置一下IIS服务器,以便确保单位的Web网站可以始终如一地稳定运行。然而很多时候,我们都会遇到Web服务器访问失败的故障现象,面对Web服务器故障,我们往往会表现得手忙脚乱,根本不知道该从何处着手,来解决这些Web服务器故障。其实,造成Web服务器故障的因素有很多,我们需要对此进行逐一排查,才能高效解决对应的Web服务器故障现象。Web服务器故障故障现象... 全文

Web服务器故障

PHP实现多web服务器共享SESSION数据

一、问题起源 稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一个整体性强的网站,用户系统是统一的,即一套用户名、密码在整个网站的各个模块中都是可以登录使用的。各个服务器共享用户数据是比较容易实现的,只需要在后端放个数据库服务器,各个服务器通过统一接口对用户数据进行访问即可。但还存在一个问题,就是用户在这个服务器登录之后,进入另一个服务器的别的模块时,仍然需要重新登录,这就是一次登录,全部通行的问题,映射到技术上,其实就是各个服务器之间如何实现共享 SESSION 数据的问题。 二、PHP SESSION 的工作原理在解决问题之前,先来了解一下 PHP SESSION 的工作原理。在客户端(如浏览器)登录网站时,被访问的 PHP 页面可以使用 session_start() 打开 SESSION,这样就会产生客户端的唯一标识 SESSION ID(此 ID 可通过函数 session_id() 获取/设置)。SESSION ID 可以通过两种方式保留在客户端,使得请求不同的页面时,PHP 程序可以获知客户端的 SESSION ID;一种是将 SESSION ID 自动加入到 GET 的 URL 中,或者 POST 的表单中,默认情况下,变量名为 PHPSESSID;另一种是通过 COOKIE,将 SESSION ID 保存在 COOKIE 中,默认情况下,这个 COOKIE 的名字为 PHPSESSID。这里我们主要以 COOKIE 方式进行说明,因为应用比较广泛。 那么 SESSION 的数据保存在哪里呢?当然是在服务器端,但不是保存在内存中,而是保存在文件或数据库中。默认情况下,php.ini 中设置的 SESSION 保存方式是 files(session.save_handler = files),即使用读写文件的方式保存 SESSION 数据,而 SESSION 文件保存的目录由 session.save_path 指定,文件名以 sess_ 为前缀,后跟 SESSION ID,如:sess_c72665af28a8b14c0fe11afe3b59b51b。文件中的数据即是序列化之后的 SESSION 数据了。如果访问量大,可能产生的 SESSION 文件会比较多,这时可以设置分级目录进行 SESSION 文件的保存,效率会提高很多,设置方法为:session.save_path="N;/save_path",N 为分级的级数,save_path 为开始目录。当写入 SESSION 数据的时候,PHP 会获取到客户端的 SESSION_ID,然后根据这个 SESSION ID 到指定的 SESSION 文件保存目录中找到相应的 SESSION 文件,不存在则创建之,最后将数据序列化之后写入文件。读取 SESSION 数据是也是类似的操作流程,对读出来的数据需要进行解序列化,生成相应的 SESSION 变量。 三、多服务器共享SESSION 的主要障碍及解决办法 通过了解 SESSION 的工作原理,我们可以发现,在默认情况下,各个服务器会各自分别对同 一个客户端产生 SESSION ID,如对于同一个用户浏览器,A 服务器产生的 SESSION ID 是 30de1e9de3192ba6ce2992d27a1b6a0a,而 B 服务器生成的则是 c72665af28a8b14c0fe11afe3b59b51b。另外,PHP 的 SESSION 数据都是分别保存在 本服务器的文件系统中。 确定了问题所在之后,就可以着手进行解决了。想要共享 SESSION 数据,那就必须实现两个目标:一个是各个服务器对同一个客户端产生的 SESSION ID 必须相同,并且可通过同一个 COOKIE 进行传递,也就是说各个服务器必须可以读取同一个名为 PHPSESSID 的 COOKIE; 另一个是 SESSION 数据的存储方式/位置必须保证各个服务器都能够访问到。 简单地说就是多 服务器共享客户端的 SESSION ID,同时还必须共享服务器端的 SESSION 数据。 第一个目标的实现其实很简单,只需要对 COOKIE 的域(domain)进行特殊地设置即可, 默认情况下,COOKIE 的域是当前服务器的域名/IP 地址,而域不同的话,各个服务器所设 置的 COOKIE 是不能相互访问的。四、代码实现 首先创建数据表,MySQL 的 SQL 语句如下: CREATE TABLE `sess` ( `sesskey` varchar(32) NOT NULL default '', `expiry` bigint(20) NOT NULL default '0', `data` longtext NOT NULL, PRIMARY KEY (`sesskey`), KEY `expiry` (`expiry`) ) TYPE=MyISAM sesskey 为 SESSION ID,expiry 为 SESSION 过期时间,data 用于保存 SESSION 数据。 默认情况下 SESSION 数据是以文件方式保存,想要使用数据库方式保存,就必须重新定义 SESSION 各个操作的处理函数。PHP 提供了 session_set_save_handle() 函数,可以用此函数自定义 SESSION 的处理过程,当然首先要先将 session.save_handler 改成 user,可在 PHP 中进行设置: session_module_name('user'); 接下来着重讲一下 session_set_save_handle() 函数, 此函数有六个参数: session_set_save_handler ( string open, string close, string read, string write, string destroy, string gc ) 各个参数为各项操作的函数名,这些操作依次是: 打开、关闭、读取、写入、销毁、垃圾回收。PHP 手册中有详细的例子, 在这里我们使用 OO 的方式来实现这些操作,详细代码如下:<?php define ( 'MY_SESS_TIME' , 3600 ); //SESSION 生存时长 //类定义 class My_Sess { function init () { $domain = '.infor96.com' ; //不使用 GET/POST 变量方式 ini_set ( 'session.use_trans_sid' , 0 ); //设置垃圾回收最大生存时间 ini_set ( 'session.gc_maxlifetime' , MY_SESS_TIME ); //使用 COOKIE 保存 SESSION ID 的方式 ini_set ( 'session.use_cookies' , 1 ); ini_set ( 'session.cookie_path' , '/' );//多主机共享保存 SESSION ID 的 COOKIE ini_set ( 'session.cookie_domain' , $domain ); //将 session.save_handler 设置为 user, //而不是默认的 files session_module_name ( 'user' ); //定义 SESSION 各项操作所对应的方法名: session_set_save_handler ( array( 'My_Sess' , 'open' ), //对应于静态方法 My_Sess::open(),下同。 array( 'My_Sess' , 'close' ), array( 'My_Sess' , 'read' ),array( 'My_Sess' , 'write' ), array( 'My_Sess' , 'destroy' ),array( 'My_Sess' , 'gc' ) ); }//end function function open ( $save_path , $session_name ) { return true ; } //end function function close () { global $MY_SESS_CONN ; if ( $MY_SESS_CONN ) {//关闭数据库连接 $MY_SESS_CONN -> Close (); } return true ; }//end function function read ( $sesskey ) { global $MY_SESS_CONN ;$sql = 'SELECT data FROM sess WHERE sesskey=' . $MY_SESS_CONN -> qstr ( $sesskey ) . ' AND expiry>=' . time ();$rs =& $MY_SESS_CONN -> Execute ( $sql ); if ( $rs ) { if ( $rs -> EOF ) { return '' ; } else {//读取到对应于 SESSION ID 的 SESSION 数据 $v = $rs -> fields [ 0 ]; $rs -> Close (); return $v ; } //end if } //end if return '' ; } //end function function write ( $sesskey , $data ) { global $MY_SESS_CONN ; $qkey = $MY_SESS_CONN -> qstr ( $sesskey );$expiry = time () + My_SESS_TIME ; //设置过期时间//写入 SESSION $arr = array( 'sesskey' => $qkey , 'expiry' => $expiry , 'data' => $data );$MY_SESS_CONN -> Replace ( 'sess' , $arr , 'sesskey' , $autoQuote = true );return true ; } //end function function destroy ( $sesskey ) { global $MY_SESS_CONN ;$sql = 'DELETE FROM sess WHERE sesskey=' . $MY_SESS_CONN -> qstr ( $sesskey );$rs =& $MY_SESS_CONN -> Execute ( $sql ); return true ; }//end function function gc ( $maxlifetime = null ) { global $MY_SESS_CONN ;$sql = 'DELETE FROM sess WHERE expiry<' . time (); $MY_SESS_CONN -> Execute ( $sql );//由于经常性的对表 sess 做删除操作,容易产生碎片,//所以在垃圾回收中对该表进行优化操作。$sql = 'OPTIMIZE TABLE sess' ;$MY_SESS_CONN -> Execute ( $sql ); return true ; } //end function } ///:~//使用 ADOdb 作为数据库抽象层。 require_once( 'adodb/adodb.inc.php' );//数据库配置项,可放入配置文件中(如:config.inc.php)。 $db_type = 'mysql' ;$db_host = '192.168.212.1' ; $db_user = 'sess_user' ; $db_pass = 'sess_pass' ; $db_name = 'sess_db' ;//创建数据库连接,这是一个全局变量。 $GLOBALS [ 'MY_SESS_CONN' ] =& ADONewConnection ( $db_type ); $GLOBALS [ 'MY_SESS_CONN' ]-> Connect ( $db_host , $db_user , $db_pass , $db_name );//初始化 SESSION 设置,必须在 session_start() 之前运行!! My_Sess :: init (); ?> 五、遗留问题 如果网站的访问量很大的话,SESSION 的读写会频繁地对数据库进行操作,这样效率就会明显降低。考虑到 SESSION 数据一般不会很大,可以尝试用 C/Java 写个多线程的程序,用 HASH 表保存 SESSION 数据,并通过 socket 通信进行数据读写,这样 SESSION 就保存在内存中,读写速度应该会快很多。另外还可以通过负载均衡来分担服务器负载。 (责任编辑:城尘 68476636-8003)... 全文

web

WEB服务器安全攻略解析

WEB服务器安全攻略一:转换角色,把自己当作可能的攻击者... 全文

WEB服务器 服务器

如何确保 Web应用安全

Web安全与你的应用环境以及使用方式是密切相关的目前,企业用户都以全业务为发展目标,安全形势的焦点已经从之前的网络安全老三样到应用安全和全业务安全发展。而做好这项工作的实质就是我们的企业用户应具有良好的业务支撑环境及安全意识。应用为王的时代,安全问题如何避免... 全文

Web应用 安全

抵御Web威胁的十大方法

Web威胁抵御方法如下:1.阻止对恶意软件服务器的访问当台式机用户从未知的恶意软件服务器请求HTTP和HTTPS网页时,立即阻止此请求,节约带宽并扫描资源。2.把移动代码限制到值得信任的网站脚本和活跃代码等移动代码可以让网络更加丰富有趣,但也黑客渗透桌面计算机和运行可执行代码或应用来执行文件中嵌入的脚本。3.在Web网关处扫描... 全文

Web 病毒

六大步骤评估Web过滤方案

Web过滤器可以使IT管理员适时地阻止非法的或不恰当的Web内容。任何企业都需要安全的Web过滤方案,但面对众多产品,如何才能确保购得能满足短期和长期需求的方案呢?在投资购买之前,企业需要进行一次彻底的评估。下面是一个有助于企业获得最佳投资回报的步骤清单:一、理解自己的互联网策略... 全文

Web过滤

java web 应用获得真实ip

主要是针对代理做的一些东东....请参看原作者的文章 http://wangdei.javaeye.com/blog/310857... 全文

java web

Web开发之分页技术

    熟悉Web开发的小伙伴们都知道分页这个玩意儿,但是不会编程的小伙伴们对这个也绝对不陌生,只是不知道这是在Web开发中的一个非常重要的需求和技术罢了.    大家在浏览网上的文章或者图片的时候,经常会看到如下所示的页码显示效果:    这就是所谓的分页技术.为什么要进行分页呢?... 全文

web开发 分页

图说java web应用原理

1、服务器端直接将文件内容进行传,服务器产品如:apache/IIS等。2、服务器进行计算,生成html数据,进行传送。... 全文

web 图说 java

配置Web服务

实验说明:本实验用于配置web服务教员:龚老师实验名称:配置WEB服务涉及课程章节:《WINDOWS网络服务》第三章实验目的:理解WEB服务的工作原理,熟练掌握安装WEB服务及配置WEB服务实验设备:1)windows server 2003 VM 两台实验描述:实验一:创建WEB服务器和站点实验二:创建不同ip地址的站点实验三:创建不同tcp端口的站点实验四:创建不同主机头的站点实验步骤及截图:实验一:创建WEB服务器和站点... 全文

Web 服务 休闲 职场

corosync + web 集群服务的搭建

        Corosync在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等。它是一个新兴的软件,2008年推出,但其实它并不是一个真正意义上的新软件,在2002年的时候有一个项目Openais  , 它由于过大,分裂为两个子项目,其中可以实现HA心跳信息传输的功能就是Corosync ,它的代码60%左右来源于Openais. Corosync可以提供一个完整的HA功能,但是要实现更多,更复杂的功能,那就需要使用Openais了。Corosync是未来的发展方向。在以后的新项目里,一般采用Corosync,而hb_gui可以提供很好的HA管理功能,可以实现图形化的管理。另外相关的图形化有RHCS的套件luci+ricci.    本篇博客为大家介绍一下corosync的安装与使用... 全文

corosync + web

利用Stripes实现Java Web开发

Stripes是一个以让程序员的web开发简单而高效为准则来设计的基于动作的开源Java web框架。本文将介绍Stripes与其它如Struts之类基于动作的框架的区别和其提供的一些存在于Ruby on Rails之中的简单性,利用Stripes实现Java Web开发。... 全文

Stripes实现Java Web

WEB站点入侵常规方法

web入侵工作流程:收集情报,远程攻击,远程登录,获取WEBSHELL,取得普通用户的权限,取得超级用户的权限,留下后门,清除日志。主要内容包括目标分析,文档获取,破解密码,日志清除等技术。1:0day.2:已知漏洞包括已知WEB程序漏洞,服务软件漏洞,操作系统漏洞,EXP nday.3:WEB程序上传漏洞4:注入漏洞... 全文

WEB 入侵 嗅探

获取网站Web服务器类型的办法

获取网站Web服务器类型的办法如下:有些同学老问怎么判断Web服务器,问这个扫描器那个扫描器顿时月经来潮。如nmap nc nikto等好多可以的….要那么多扫描器干嘛 NMAP一个就够了!方法N多,举几个例子吧!  ... 全文

Web 服务器

社交网络时代下的企业Web安全

随着Wwb2.0技术逐渐深入人们的生活,社交网站的风靡也已经无法阻挡。根据11月11日CNNIC发布的《2009中国网民社交网络应用研究报告》,截止到2009年底,中国使用交友和社交网站的网民数将达到1.24亿,其中企业员工占据了这一庞大数字的三成多。当下很多年轻人都认为电子邮件已经过时了,他们更热衷使用即时的信息交流和更加开放的空间来与朋友们共享图片、音乐、视频等任何可以以数字化形式操作的东西。Facebook、Twitter、LinkedIn、甚至开心网等社交网站正是提供这样的平台,而它们的风靡也已经无法阻挡。如此庞大的社交网络人群给企业的Web安全带来了沉重的压力,企业需要Web安全已是当务之急。... 全文

web安全