文档库 最新最全的文档下载
当前位置:文档库 › WebLogic Server 如何检测失败

WebLogic Server 如何检测失败

WebLogic Server 如何检测失败
WebLogic Server 如何检测失败

WebLogic Server 如何检测失败

群集中的WebLogic Server 实例通过监视下列内容来检测其对等服务器实例的失败:?与对等服务器的套接口连接

?定期的服务器心跳消息

使用IP 套接口的失败检测

WebLogic Server 实例将监视对等服务器实例之间的IP 套接口使用情况作为检测失败的即时方法。如果某个服务器连接到了群集中它的一个对等服务器,并开始通过套接口传输数据,则该套接口的意外关闭会导致该对等服务器被标记为“失败”,其关联服务也会从JNDI 命名树中删除。

WebLogic Server“心跳”

如果群集的服务器实例对于对等通信没有打开的套接口,则还可以通过WebLogic Server 心跳检测失败的服务器。群集中的所有服务器实例都使用多播向群集的其他成员广播定期的服务器心跳消息。每个心跳消息都包含唯一标识发送该消息的服务器的数据。服务器以10 秒的定期间隔广播其心跳消息。而群集中的每个服务器又会监视多播地址以确保所有对等服务器的心跳消息都在进行发送。

如果监视多播地址的服务器丢失了来自对等服务器的三个心跳(即,如果它在30 秒或更长的时间内没有收到来自该服务器的心跳),则监视服务器会将该对等服务器标记为“失败”。然后它会根据需要更新其本地JNDI 树,以取消承载在该失败服务器上的服务。

因此,即使服务器没有为对等通信打开套接口,它们也可以检测失败。

注意:有关WebLogic Server 如何使用IP 套接口和多播通信的详细信息,请参阅群集中的WebLogic Server 通信。

Servlet 和JSP 的复制和故障转移

要支持Servlet 和JSP 在群集中的自动复制和故障转移,Weblogic Server 支持两种用于保留HTTP 会话状态的机制:

?硬件负载平衡器

对于使用受支持硬件负载平衡解决方案的群集,负载平衡硬件只是将客户端请

求重定向到WebLogic Server 群集中的任何可用服务器。而群集自身则从群

集中的次级服务器获得客户端HTTP 会话状态副本。

?代理插件

在使用Web 服务器和WebLogic 代理插件的群集中,代理插件会以透明方

式处理到客户端的故障转移。如果某个服务器失败,该插件则会在次级服务器

上定位复制的HTTP 会话状态,然后相应地重定向客户端请求。

本部分包含下列主题:

?HTTP 会话状态复制

?使用代理访问群集的Servlet 和JSP

?使用负载平衡硬件访问群集的Servlet 和JSP

?跨群集的会话状态复制

HTTP 会话状态复制

Weblogic Server 使用两种方法来跨群集复制HTTP 会话状态:

?内存中复制

使用内存中复制时,WebLogic Server 会将会话状态从一个服务器实例复制

到另一个服务器实例。主服务器在客户端首先连接的服务器上创建主会话状态,

在群集中的另一个WebLogic Server 实例上创建次级副本。该副本总是保持

最新状态,以便承载Servlet 的服务器失败时可以使用该副本。

?基于JDBC 的持久性

在基于JDBC 的持久性中,WebLogic Server 使用基于文件的持久性或基于

JDBC 的持久性维护Servlet 或JSP 的HTTP 会话状态。有关这些持久性

机制的详细信息,请参阅“WebLogic HTTP Servlet 编程”中的配置会话持久

性。

基于JDBC 的持久性还用于广域网(Wide Area Network,简称WAN)中

的HTTP 会话状态复制。有关详细信息,请参阅WAN HTTP 会话状态复制。

注意:持久性存储类型设置为replicated或

replicated_if_clustered的Web 应用程序必须定位到群集或群集的所有节点。如果这种Web 应用程序仅定位到群集中的某些节点,则不会部署该Web 应用程序。内存中复制需要Web 应用程序均匀部署到群集中的所有节点上。

下列部分描述了使用内存中复制的会话状态复制。

HTTP 会话状态复制的要求

要针对HTTP 会话状态使用内存中复制,必须使用WebLogic 代理插件或负载平衡硬件配置相同的Web 服务器集合访问WebLogic Server 群集。

受支持的服务器和代理软件

WebLogic 代理插件维护着承载群集Servlet 或JSP 的WebLogic Server 实例的列表,并使用循环法策略向这些实例转发HTTP 请求。如果某个WebLogic Server 实例失败,该插件还会提供定位客户端HTTP 会话状态副本所需的逻辑。

HTTP 会话状态的内存中复制受下列Web 服务器和代理软件支持:

?带有HttpClusterServlet的WebLogic Server

?带有Netscape(代理)插件的Netscape Enterprise Server

?带有Apache Server(代理)插件的Apache

?带有Microsoft-IIS(代理)插件的Microsoft Internet Information Server 有关设置代理插件的说明,请参阅配置代理插件。

负载平衡器要求

如果选择使用负载平衡硬件而不是代替代理插件,则该负载平衡硬件必须支持兼容的被动或主动Cookie 持久性机制和SSL 持久性。有关这些要求的详细信息,请参阅负载平衡器配置要求。有关设置负载平衡器的说明,请参阅配置支持被动Cookie 持久性的负载平衡器。

群集Servlet 和JSP 的编程注意事项

本部分着重讲述要在群集环境中部署的Servlet 和JSP 的主要编程约束和建议。

?会话数据必须可序列化

要支持HTTP 会话状态的内存中复制,所有Servlet 和JSP 会话数据都必须

可序列化。

注意:序列化是将复杂的数据结构(如数据的并行组织,一次会传输一定数量的位还有一些并行通道)转换为序列形式(这种形式一次传输一个位)的过程;序列接口提供此转换以实现数据传输。

对象中的每个字段必须都可序列化或者是暂态的才能认为该对象可序列化。如果Servlet 或JSP 使用可序列化对象和非可序列化对象的组合,WebLogic Server 则不会复制非可序列化对象的会话状态。

?使用setAttribute 更改会话状态

在实现javax.servlet.http.HttpSession的HTTP Servlet 中,使用HttpSession.setAttribute(它替换了不赞成使用的

putValue)可更改会话对象中的特性。如果使用setAttribute设置会话对象中的特性,则使用内存中复制在群集中复制该对象及其特性。如果使用其他设置方法来更改会话中的对象,WebLogic Server 则不会复制这些更

改。每次对会话中的对象进行更改时,都应该调用setAttribute() 以

便在群集中更新该对象。

与之相似,使用removeAttribute(它则替换了不赞成使用的

removeValue)可从会话对象删除特性。

注意:使用不赞成使用的putValue和removeValue方法也可

以复制会话特性。

?考虑序列化开销

序列化会话数据会为复制会话状态引入一些开销。当序列化对象的大小增加时,

这种开销也会增加。如果您计划在会话中创建非常大的对象,则请对Servlet

的性能进行测试,以确保该性能可以接受。

?控制对会话数据的框架访问

如果您要设计使用多个框架的Web 应用程序,则请记住,一个给定框架集中

的多个框架所创建的请求不会同步。例如,即使某个客户端在逻辑上只应创建

一个会话,但框架集中的多个框架也可能会代表客户端应用程序创建多个会话。

在群集环境中,框架请求之间的较差协调性可能会导致意外的应用程序行为。

例如,因为代理插件会单独处理每个请求,所以多个框架请求可能会“重置”应

用程序与群集实例之间的关联。应用程序还可能会因为通过框架集中的多个框

架修改同一个会话特性,而损坏会话数据。

为了避免意外的应用程序行为,请仔细计划带有框架的会话数据的访问方式。

您可以应用下列常规规则之一来避免常见的问题:

?在某个给定的框架集中,确保只有一个框架创建和修改会话数据。

?总是在应用程序使用的第一个框架集的框架中创建会话(例如,在访问的

第一个HTML 页中创建会话)。创建了会话之后,仅在除第一个框架集之外

的框架集中访问会话数据。

使用复制组

默认情况下,WebLogic Server 尝试在未承载主会话状态的计算机上创建会话状态副本。您可以使用复制组对放置次级状态的位置进行进一步控制。复制组是要用于存储会话状态

副本的群集服务器的首选列表。

使用WebLogic Server 控制台可以定义要承载各个服务器实例的唯一计算机名。这些计算机名可与新的WebLogic Server 实例相关联,以标识这些服务器在系统中所在的位置。

计算机名通常用于表明在同一台计算机上运行的服务器。例如,您要为在同一台计算机或

同一个服务器硬件上运行的所有服务器实例分配相同的计算机名。

如果不在同一台计算机上运行多个WebLogic Server 实例,则不需要指定WebLogic Server 计算机名。没有计算机名的服务器将被视为位于不同的计算机上。有关设置计算机名的详细说明,请参阅配置计算机名。

当您配置群集的服务器实例时,可以将服务器分配到复制组,还可以分配到用于承载在该服务器上创建的主HTTP 会话状态副本的首选次级复制组。

当客户端连接群集中的服务器并创建主会话状态后,承载该主状态的服务器会对群集中的其他服务器进行排名,以确定应由哪个服务器来承载次级状态。服务器排名是使用服务器位置(它是否与主服务器位于同一台计算机上)及其参与主服务器首选复制组的情况的组合来进行分配的。下表显示了群集中服务器的相对排名。

主WebLogic Server 根据这些规则对群集的其他成员进行排名,然后选择排名最高的服务器来承载次级会话状态。例如,下图显示了为各种不同地理位置配置的复制组。

图6-1 不同地理位置的复制组

在此示例中,服务器A、B 和 C 是复制组“Headquarters”的成员,它们使用首选次级复制组“Crosstown”。与之相对,服务器X、Y 和Z 是组“Crosstown”的成员,它们使用首选次级复制组“Headquarters”。服务器A、B 和X 位于同一台计算机“sardina”上。

如果客户端连接服务器 A 并创建了HTTP 会话状态,

?服务器Y 和Z 则很可能承载此状态的副本,因为它们位于另外的计算机上,并且是服务器 A 的首选次级组成员。

?服务器X 的排名次高,因为它也是该首选复制组的成员(即使它与主服务器位于同一台计算机上)。

?服务器C 排名第三,因为它位于其他计算机上,但不是该首选次级组的成员。

?服务器B 的排名最低,因为它与服务器A 位于同一台计算机上(如果出现硬件失败则可能与 A 一起失败),并且不是该首选次级组的成员。

要配置服务器在复制组中的成员资格,或分配服务器的首选次级复制组,请按照配置复制组中的说明进行操作。

使用代理访问群集的Servlet 和JSP

本部分描述代理传输到群集Servlet 和JSP 的请求的连接和故障转移过程。有关设置代理插件的说明,请参阅配置代理插件。

下图显示了正在访问群集中承载的Servlet 的客户端。此示例仅使用一个WebLogic Server 来为静态HTTP 请求提供服务;所有Servlet 请求均通过HttpClusterServlet转发到WebLogic Server 群集。

图6-2 使用代理访问Servlet 和JSP

注意:接下来的讨论也适用于使用第三方Web 服务器和WebLogic 代理插件来代替WebLogic Server 和HttpClusterServlet的情况。

代理连接过程

当HTTP 客户端请求Servlet 时,HttpClusterServlet将该请求代理传输到WebLogic Server 群集。HttpClusterServlet维护群集中所有服务器的列表以及访问群集时要使用的负载平衡逻辑。在上面的示例中,HttpClusterServlet将客户端请求路由到了WebLogic Server A 承载的Servlet。WebLogic Server A 成为

了承载该客户端的Servlet 会话的主服务器。

为了对该Servlet 提供故障转移服务,主服务器将客户端的Servlet 会话状态复制到群

集中的某个次级WebLogic Server。这样可确保即使在主服务器失败(例如由于网络失

败)时该会话状态的副本仍存在。在上面的示例中,服务器 B 被选择为次级服务器。Servlet 页通过HttpClusterServlet返回到客户端,然后客户端浏览器收到指令,写入列出该Servlet 会话状态主位置和次级位置的Cookie。如果客户端浏览器不支持Cookie,WebLogic Server 则可以使用URL 重写来代替。

使用URL 重写跟踪会话副本

WebLogic Server 的默认配置使用客户端Cookie 来跟踪承载客户端Servlet 会话状态的主服务器和次级服务器。如果客户端浏览器禁用了Cookie 的使用,WebLogic Server 还可以使用URL 重写来跟踪主服务器和次级服务器。使用URL 重写时,两个位置的客户端会话状态都会嵌入到在客户端和代理服务器之间传递的URL 中。为了支持此功能,您必须确保在WebLogic Server 群集上启用了URL 重写。有关如何启用URL 重写的说明,请参阅“使用会话和会话持久性”中的使用URL 重写功能。

代理故障转移过程

如果主服务器失败,HttpClusterServlet就使用客户端的Cookie 信息来确定承载会话状态副本的次级WebLogic Server 的位置。HttpClusterServlet会自动将客户端的下一个HTTP 请求重定向到次级服务器,故障转移对于客户端是透明的。

发生失败之后,WebLogic Server B 成为承载Servlet 会话状态的主服务器,并且会创建新的次级服务器(在上面示例中为服务器C)。在HTTP 响应中,代理会更新客户端的Cookie 来反映新的主服务器和次级服务器,以考虑后续故障转移的可能性。

在由两个服务器组成的群集中,客户端将以透明方式故障转移到承载次级会话状态的服务器。但是,客户端会话状态的复制不会继续,除非另一个WebLogic Server 变为可用状态并加入该群集。例如,如果原始主服务器重新启动或重新连接网络,则会使用它来承载次级会话状态。

使用负载平衡硬件访问群集的Servlet 和JSP

为了支持通过负载平衡硬件的直接客户端访问,WebLogic Server 复制系统允许客户端使用次级会话状态,而不管客户端故障转移到哪个服务器。WebLogic Server 使用客户端Cookie 或URL 重写记录主服务器位置和次级服务器位置。但是,此信息仅用作

Servlet 会话状态位置的历史记录;通过负载平衡硬件访问群集时,客户端不会在失败之后使用Cookie 信息主动定位服务器。

下列部分描述了使用负载平衡硬件进行HTTP 会话状态复制时的连接和故障转移过程。

使用负载平衡硬件的连接

下图说明了客户端通过负载平衡器访问群集的连接过程。

图6-3 使用负载平衡硬件的连接

当Web 应用程序的客户端使用公共IP 地址请求Servlet 时:

1.负载平衡器根据其配置的策略向WebLogic Server 群集路由客户端的连接请求。

它将请求定向到了WebLogic Server A。

2.WebLogic Server A 的作用是该客户端Servlet 会话状态的主要主机。它使用使

用复制组中描述的排名系统来选择承载会话状态副本的服务器。在上面的示例中,

WebLogic Server B 被选择为了承载该副本的服务器。

3.客户端得到指令在本地Cookie 中记录WebLogic Server 实例A 和B 的位

置。如果客户端不允许Cookie,主服务器和次级服务器的记录则可以通过URL 重写记

录在返回到客户端的URL 中。

注意:必须启用WebLogic Server URL 重写功能才能支持不允许

Cookie 的客户端,如使用URL 重写跟踪会话副本中所述。

4.当客户端对群集进行附加请求时,负载平衡器将使用客户端Cookie 中的标识符来

确保这些请求继续转至WebLogic Server A(而不是负载平衡到群集中的另一个服务

器)。这样将确保在会话的生命周期内,客户端一直与承载主会话对象的服务器保持关联。

使用负载平衡硬件的故障转移

如果在客户端会话期间服务器 A 失败,则客户端到服务器 A 的下一个连接请求也将失败,如下图所示。

图6-4 使用负载平衡硬件的故障转移

为了响应连接失败:

1.负载平衡硬件使用其配置的策略将请求定向到群集中的可用WebLogic Server。

在上面的示例中,假设在WebLogic Server A 失败之后,负载平衡器将客户端的请求

路由到了WebLogic Server C。

2.当客户端连接WebLogic Server C 时,服务器使用客户端Cookie 中的信息(如

果使用URL 重写则使用HTTP 请求中的信息)来获取WebLogic Server B 上的会话

状态副本。该故障转移过程对于客户端一直保持完全透明。

WebLogic Server C 成为客户端主会话状态的新主机,WebLogic Server B 继续承载会话状态副本。有关主要主机和次级主机的此新信息在客户端的Cookie 中或通过URL 重写再次更新。

跨群集的会话状态复制

除了提供群集中服务器间的HTTP 会话状态复制之外,WebLogic 服务器还提供了跨多个群集复制HTTP 会话状态的功能。通过使群集可以在多个地理区域、电网和互联网服务提供商之间分布,此功能增强了高可用性并提高了容错能力。本部分讨论WebLogic Server 支持的两种跨群集复制机制:

?跨群集复制的网络要求

?跨群集复制的配置要求

?MAN HTTP 会话状态复制

?WAN HTTP 会话状态复制

有关HTTP 会话状态复制的常规信息,请参阅HTTP 会话状态复制。有关使用硬件负载平衡器的详细信息,请参阅使用负载平衡硬件访问群集的Servlet 和JSP。

跨群集复制的网络要求

要使用WebLogic Server 执行跨群集复制,您的网络必须包含全局和本地硬件负载平衡器。图 6-5显示了两种类型的负载平衡器如何在多群集环境中进行交互以支持跨群集复制。有关在WebLogic Server 环境中使用负载平衡器的常规信息,请参阅使用负载平衡硬件的连接。

图6-5 跨群集复制的负载平衡器要求

下列部分描述了此网络配置中的每个组件。

全局负载平衡器

在支持跨群集复制的网络配置中,全局负载平衡器负责在群集之间平衡HTTP 请求。当请求传入时,全局负载平衡器根据每个群集当前正在处理的请求数来确定将该请求发送到哪个群集。然后将该请求传递到所选群集的本地负载平衡器。

本地负载平衡器

本地负载平衡器从全局负载平衡器那里接收HTTP 请求。本地负载平衡器负责在群集中的

服务器之间平衡HTTP 请求。

复制

为了将会话数据从一个群集复制到另一个群集,复制通道必须配置为将会话状态信息从主

群集通信到次级群集。用于复制会话信息的具体方法取决于您要实现的跨群集复制的类型。有关详细信息,请参阅MAN HTTP 会话状态复制或WAN HTTP 会话状态复制。

故障转移

当群集中的某个服务器失败时,本地负载平衡器负责将请求传输到群集中的其他服务器。

当整个群集都失败时,本地负载平衡器则会将HTTP 请求返回到全局负载平衡器。然后全

局负载平衡器将此请求重定向到其他本地负载平衡器。

跨群集复制的配置要求

下列过程简要列出了配置跨群集复制所需的基本步骤。

1.根据您的网络配置和要求安装WebLogic 服务器。此过程包括将WebLogic

Server 实例安装在承载WLS 实例的每台物理计算机上。

2.安装和配置硬件负载平衡器。有关负载平衡器要求的详细信息,请参阅跨群集复制

的网络要求。有关安装和配置负载平衡器的详细信息,请参阅您的负载平衡器文档。

下面是配置硬件负载平衡器以支持跨群集复制时的一些常规注意事项:

?您必须将负载平衡器配置为维护会话ID。如果负载平衡器不维护会话

ID,后续请求将始终发送到新服务器。有关详细信息,请参阅使用负载平衡

硬件的连接。

?您应该确保群集故障转移超时值没有设置得很高。此值应在3-5 秒左右。

有些硬件负载平衡器的默认值比该值要长很多。

?您必须对负载平衡器进行配置,才能了解主群集或服务器失败时要使用哪

个备用群集。

3.根据群集要求创建和配置域。

注意:跨群集复制需要将每个群集分配到不同的域。

4.除了创建和配置域之外,还应该创建和配置群集和受管服务器。有关创建和

配置域的信息,请参阅“了解域配置”中的使用WebLogic 工具配置域。

5.下面是配置域以支持跨群集复制时的一些注意事项:

?每个域的设置和配置都应该相同。除了域相同外,群集和服务器配置、服

务器群集数等也应该相同。

?每个域中的应用程序部署应该相同。

?设置域时,必须启用两个域之间的信任。有关在域之间启用信任的详细信

息,请参阅“确保WebLogic Server 安全”中的启用WebLogic Server 域

之间的信任。

6.如果在WAN 环境中使用跨群集复制,则必须创建用于维护会话状态的数据源。有关详细信息,请参阅WAN 会话状态复制的数据库配置。

7.创建和配置了域、服务器和群集之后,应该验证特定于跨群集复制的配置元素是否已配置正确。两个域的这些参数配置必须相同。

下表列出了config.xml 中用于配置跨群集复制的群集元素的子元素:

配置跨群集的会话状态复制

您可以使用第三方复制产品来跨群集复制状态,也可以允许WebLogic Server 跨群集复制会话状态。您应该根据所使用的方法记住下列配置注意事项:

?如果使用第三方产品,则请确保已经为jdbc-pool指定了值,并且backup-cluster-address为空白。

?如果使用WebLogic Server 处理会话状态复制,则必须同时配置jdbc-pool和backup-cluster-address。

如果backup-cluster-address 为null,WebLogic Server 则会假设您使用第三方产品来处理复制。这种情况下,会话数据对于远程数据库没有持久性,只是在本地具有持久性。

配置复制通道

复制通道指的是专门用于在群集之间复制流量的常规网络通道。有关配置网络通道的常规信息,请参阅“配置WebLogic Server 环境”中的配置网络资源。

创建网络通道使其用作跨群集复制的复制通道时,适用下列注意事项:

?必须确保该复制通道在所有群集成员上都已经创建,并且具有相同的名称。

?该通道只应用于复制。其他类型的网络流量应定向到其他网络通道。

MAN HTTP 会话状态复制

城域网(Metropolitan Area Network,简称MAN)中的资源通常位于不同的物理位置,但地理距离足够近,网络滞后不是什么问题。MAN 中的网络通信通常具有较低的滞后和较快的互连速度。MAN 中的群集可安装在不同的物理位置,这样会改善可用性。

为了在MAN 中提供故障转移,WebLogic Server 提供了在两个不同群集之间工作的内存中机制。这样就使得会话状态能够从一个群集同步复制到另一个群集,条件是网络滞后为几毫秒的时间。使用同步方法的优点在于保证了内存中复制的可靠性。

注意:同步状态复制的性能取决于群集之间的网络滞后。仅应该在群集之间的滞后可接受的情况下才使用此方法。

MAN 中的复制

本部分讨论了MAN 中跨多个群集进行故障转移的几种可能场景。图5-6 显示了MAN 中典型的多群集环境。

图6-6 MAN 复制

此图显示了下列HTTP 会话状态场景:

1.客户端创建了通过全局负载平衡器进行传递的请求。

2.全局负载平衡器根据当前系统负载将请求传递到某个本地负载平衡器。在这里,会

话请求传递到了本地负载平衡器1。

3.然后该本地负载平衡器又根据系统负载将该请求传递到了群集中的某个服务器,在

这里是S1。请求到达S1 之后,此受管服务器成为此HTTP 会话的主服务器。如果没

有失败,此服务器则会处理后续的请求。

4.服务器建立HTTP 会话之后,当前会话状态将复制到指定的次级服务器。

MAN 中的故障转移场景

下列部分根据图5-6 中的MAN 配置描述了不同的故障转移场景。

故障转移场景 1

如果群集 1 中的所有服务器均失败,全局负载平衡器会将所有后续会话请求均自动故障转移到群集2。已经复制到群集2 的所有会话都将恢复,客户端不会发生数据丢失。

故障转移场景 2

假设主服务器S1 承载在群集 1 上,次级服务器S6 承载在群集 2 上。如果S1 崩溃,则群集 1 上的任何其他服务器(S2 或S3)都可以获取该请求,并从服务器S6 检索会话数据。S6 仍为备用服务器。

故障转移场景 3

假设主服务器S1 承载在群集 1 上,次级服务器S6 承载在群集 2 上。如果次级服务器S6 失败,则主服务器S1 会在群集 2 上自动选择新次级服务器。收到客户端请求时,将在该新次级服务器上备份会话信息。

故障转移场景 4

如果两个群集之间的通信失败,主服务器则将会话状态自动复制到本地群集中的新次级服务器。一旦两个群集之间的通信恢复,任何后续客户端请求则都会复制到远程群集上。

MAN 复制、负载平衡器和会话粘连性

MAN 复制依赖全局负载平衡器来维护群集关系,依赖本地负载平衡器来维护服务器关系。

如果群集中的某个服务器失败,则由本地负载平衡器负责确保会话状态复制到群集中的另一个服务器。如果群集中的所有服务器均失败或不可用,则由全局负载平衡器负责将会话状态复制到另一个群集。这样一来,除非整个群集均失败,否则不会故障转移到另一个群集。

客户端通过负载平衡器建立与群集之间的连接之后,该客户端必须一直维护与该群集的粘连性(只要该群集正常运行)。

WAN HTTP 会话状态复制

广域网(Wide Area Network,简称WAN)中的资源通常跨越不同的地理区域进行分布。

除了需要网络流量穿越较长的距离之外,这些资源通常还会被多个路由器和其他网络瓶颈分隔开来。WAN 中的网络通信通常具有较高的滞后,互连速度也比较慢。

WAN 中较慢的网络性能使得使用类似MAN 中所使用的同步复制机制变得非常困难。

WebLogic Server 通过使用异步数据复制方案在WAN 中的群集之间进行故障转移。

WAN 中的复制

本部分讨论WAN 中跨多个群集故障转移的几种可能场景。图5-7 显示了WAN 中典型的多群集环境。

图6-7 WAN 复制

此图显示了下列HTTP 会话状态场景:

1.客户端创建了通过全局负载平衡器进行传递的请求。

2.全局负载平衡器根据当前系统负载将请求传递到某个本地负载平衡器。在这里,会

话请求传递到了本地负载平衡器1。

3.然后该本地负载平衡器又根据系统负载将该请求传递到群集中的某个服务器,在这

里是S1。请求到达S1 之后,此受管服务器成为此HTTP 会话的主服务器。如果没有

失败,此服务器则会处理后续的请求。

4.服务器建立HTTP 会话之后,当前会话状态将复制到指定的次级服务器。

WAN 中的故障转移场景

本部分描述WAN 环境中可能的故障转移场景。

故障转移场景 1

如果群集 1 中的所有服务器均失败,全局负载平衡器会将所有后续会话请求自动故障转移到群集2。所有会话均根据数据库上最后一次已知的刷新进行备份。

故障转移场景 2

假设主服务器S1 承载在群集 1 上,次级服务器S6 承载在群集 2 上。如果S1 崩溃,S6 则会成为新的主服务器。会话状态将在新的次级服务器上备份。

WAN 会话状态复制的数据库配置

本部分描述WAN 中跨群集会话状态复制的数据源配置要求。有关设置跨群集复制的更多常规信息,请参阅跨群集复制的配置要求。

要在WAN 环境中启用跨群集复制,必须创建指向存储会话状态信息的数据库的JDBC 数据源。执行下列步骤可设置和配置您的数据库:

1.根据供应商文档安装和配置数据库服务器软件。

2.创建引用此数据库的JDBC 数据源。有关创建JDBC 数据源的详细信息,请参阅

“配置和管理WebLogic JDBC”中的配置JDBC 数据源。

此数据源也可配置为JDBC 多数据源。有关配置多数据源的详细信息,请参阅

“配置和管理WebLogic JDBC”中的配置JDBC 多数据源。

3.将主群集和次级群集的DataSourceForSessionPersistence都

设置为指向此数据源。

4.根据下列Schema 在数据库中创建名为WLS_WAN_PERSISTENCE的表:

CREATE TABLE WLS_WAN_PERSISTENCE_TABLE (

WL_ID VARCHAR2(100) NOT NULL,

WL_CONTEXT_PATH VARCHAR(50) NOT NULL,

WL_CREATE_TIME NUMBER(20),

WL_ACCESS_TIME NUMBER(20),

WL_MAX_INACTIVE_INTERVAL NUMBER(38),

WL_VERSION NUMBER(38) NOT NULL,

WL_INTERNAL_ATTRIBUTE NUMBER(20),

WL_SESSION_ATTRIBUTE_KEY NUMBER(20),

WL_SESSION_ATTRIBUTE_VALUE LONG RAW,

PRIMARY KEY(WL_ID, WL_CONTEXT_PATH,

WL_VERSION));

下表描述了此表中每行所包含的内容:

EJB 和RMI 的复制和故障转移

对于群集的EJB 和RMI,故障转移是使用对象的可以副本感知存根控件完成的。当客户端通过可识别副本的存根控件调用失败的服务时,该存根控件会检测到失败,并在另一个副本上重试该调用。

对于群集对象,自动故障转移通常仅在该对象具有幂等性的情况下才会发生。如果任何方法都可以多次调用,并且每次调用该方法都不会产生不同的结果,则该对象具有幂等性。没有永久性副作用的方法就总是符合这样的要求。一定要使用幂等性编写具有副作用的方法。

以购物车服务调用addItem()将物品添加到购物车为例。假设客户端 C 在服务器

S1 的副本上进行了此调用。S1 收到了该调用,但在成功返回到C 之前,S1 发生了崩溃。此时,该物品已经添加到了购物车中,但副本感知存根控件收到了异常。如果该存根控件要在服务器S2 上重试该方法,该物品将第二次添加到购物车中。正因为如此,在请求已经发送但返回之前,副本感知存根控件在默认情况下不会重试失败的方法。此行为可以通过将服务标记为具有幂等性来进行替换。

使用副本感知存根控件群集对象

如果EJB 或RMI 对象进行了群集,则该对象的实例将部署在群集中的所有WebLogic Server 实例上。客户端可以选择要调用该对象的哪个实例。该对象的每个实例都称为一个副本。

支持在WebLogic Server 中群集对象的关键技术为副本感知存根控件。当您编译支持群集的EJB (在其部署描述符中定义)时,appc会通过rmic编译器传递EJB 的接口以生成该Bean 的副本感知存根控件。对于RMI 对象,您要通过对rmic使用命令行选项的方式来显式生成副本感知存根控件,如“WebLogic RMI 编程”中的使用WebLogic RMI 编译器所述。

副本感知存根控件看起来好像是与常规RMI 存根控件相同的调用者。但是该存根控件不表示单个的对象,而表示一个副本集合。副本感知存根控件包含了在部署对象的任何WebLogic Server 实例上定位EJB 或RMI 类所需的逻辑。当您部署可以识别群集的EJB 或RMI 对象时,其实现将绑定到JNDI 树中。正如群集范围的JNDI 命名服务中描述的那样,群集的WebLogic Server 实例具有更新JNDI 树的功能,以便列出可在其中使用该对象的所有服务器实例。当客户端访问群集对象时,实现会被副本感知存根控件所替换,该存根控件会被发送到客户端。

该存根控件包含了用于对对象的方法调用进行负载平衡的负载平衡算法(或调用路由类)。对于每个调用,存根控件都可以采用其负载算法以选择要调用哪个副本。这就以对于调用者透明的方式在群集中提供了负载平衡。要了解可用于RMI 对象和EJB 的负载平衡算法,请参阅EJB 和RMI 对象的负载平衡。如果在调用期间发生失败,存根控件会截获到异常,并在另一个副本上重试该调用。这样就提供了对于调用者也透明的故障转移。

不同类型EJB 的群集支持

EJB 与普通的RMI 对象不同,其不同之处在于每个EJB 都可能生成两个不同的副本感知存根控件:一个用于EJBHome接口,一个用于EJBObject接口。这就表示EJB 可以在两个级别实现负载平衡和故障转移的优点:

?当客户端使用EJBHome存根控件查找EJB 对象时

?当客户端使用EJBObject存根控件针对EJB 进行方法调用时

下列部分描述了不同类型EJB 的群集支持。

群集的EJBHome

所有Bean Home 接口(用于查找或创建Bean 实例)都可以群集,方法是通过在weblogic-ejb-jar.xml中指定home-is-clusterable元素决定的内容。

注意:无状态会话Bean、有状态会话Bean 和实体Bean 都具有Home 接口。

消息驱动的Bean 则没有Home 接口。

当Bean 部署到群集时,每个服务器都会将该Bean 的Home 接口以相同的名称绑定到其群集JNDI 树。当客户端从群集请求该Bean 的主页时,执行该查找的服务器实例会返回一个EJBHome存根控件,该存根控件具有到每个服务器上该主页的引用。

当客户端发出create()或find()调用时,存根控件路由会根据负载平衡算法从副本列表中选择服务器,然后将调用路由到该服务器上的Home 接口。选择的Home 接

口收到该调用,在该服务器实例上创建Bean 实例并执行该调用,即创建该Bean 的实例。

注意:WebLogic Server 支持为EJB Home 接口提供服务器关系的负载平衡算法。要了解服务器关系以及它如何影响负载平衡和故障转移的信息,请参阅循环法关系、基于权数关系和随机关系。

群集的EJBObject

EJBObject存根控件会跟踪群集中EJB 的可用副本。

无状态会话Bean

当主页创建无状态Bean 时,它会返回一个EJBObject存根控件,其中列出了该Bean 应该部署到的群集中的所有服务器。因为无状态Bean 不代表客户端保存任何状态,所以该存根控件不用将任何调用路由到承载该Bean 的任何服务器。发生失败时,该存根控件可以自动故障转移。该存根控件不会自动将Bean 视为具有幂等性,因此不会自动从所有失败进行恢复。如果Bean 编写时带有幂等方法,则可以在部署描述符中注明此内容,然后在所有情况下都会启用自动故障转移。

注意:WebLogic Server 支持为无状态EJB 远程接口提供服务器关系的负载平衡选项。要了解服务器关系以及它如何影响负载平衡和故障转移的信息,请参阅循环法关系、基于权数关系和随机关系。

有状态会话Bean

有状态服务的方法级别故障转移需要状态复制。WebLogic Server 通过使用类似于HTTP 会话状态所用的复制方案将主Bean 实例的状态复制到次级服务器实例,从而满足此要求。

当Home 接口创建无状态会话Bean 实例时,它使用与使用复制组中所定义的相同的规则来选择要承载复制状态的次级实例。Home 接口向客户端返回一个EJBObject存根控件,其中列出了主Bean 实例的位置以及复制Bean 状态的位置。

下图显示了正在访问群集的有状态会话EJB 的客户端。

图6-8 访问有状态会话EJB 的客户端

sql注入漏洞测试指南

sql注入漏洞测试指南 一、s ql注入的定义 一般是指在存在SQL注入漏洞的web应用上,攻击者将恶意构造的SQL语句通过web应用的输入点注入到后端数据库中 执行,以达到恶意操作数据库数据的目的。 SQL注入是通过正常的web应用服务器端口进行的,表面上与正常的数据请求没什么区别,如果不对这类恶意构造的SQL 语句进行防御的话,数据库很可能会因为SQL注入漏洞的存在 导致数据库中的信息受到威胁,比如数据被删除,挂马,留后 门,甚至被进一步利用而拿到操作系统的管理员权限。 二、s ql注入攻击是如何发生的 无论是内网环境还是外网环境(互联网),B/S模式架构的web应用(以下指网站)都直接或者间接地受到各种类型的web 攻击。对于后端数据库来说,以SQL注入带来的危害最为普遍, 由于网站服务端语言自身的缺陷与程序员编写代码的安全意识 不足导致了攻击者可以将恶意SQL语句注入到正常的数据库操 作指令上,从而在数据库中被解析执行。 注入之前需要找到网站的各类与数据库形成交互的输入点。 通常的一个网站的输入点包括: 表单提交,主要是POST请求,也包括GET请求等;

URL参数提交,GET请求; Cookie参数提交; HTTP请求头部的一些可修改的值,比如Referer、User_Agent等,cookie也是存在于HTTP请求头中; 一些边缘的输入点,比如mp3文件的一些文件信息等; 其实只要服务端从客户端直接或间接获取到数据这一过程都是一次输入过程,无论直接或间接,输入的数据都应该默认认为是不安全的。 上面的各类输入点,只要任何一点存在过滤不严,过滤缺陷等问题,都有可能发生SQL注入攻击。很多时候SQL注入的过程都是由工具完成的,甚至包括大批量注入工具的使用。三、s ql注入举例 假设DB中存在如下数据: +----+---------+----------+ | id | uid | password | +----+---------+----------+ | 1 | test | abc | | 3 | user | abc | | 5 | user2| abc | | 6 | admin | abc | +----+---------+----------+

五大著名免费SQL注入漏洞扫描工具

大量的现代企业采用Web应用程序与其客户无缝地连接到一起,但由于不正确的编码,造成了许多安全问题。Web应用程序中的漏洞可使黑客获取对敏感信息(如个人数据、登录信息等)的直接访问。 Web应用程序准许访问者提交数据,并可通过互联网从数据库中检索数据。而数据库是多数Web应用程序的心脏。数据库维持着Web应用程序将特定内容交给访问者的数据,Web应用程序在将信息交给客户、供应商时,也从数据库取得数据。 SQL注入攻击是最为常见的Web应用程序攻击技术,它会试图绕过SQL命令。在用户输入没有“净化”时,如果执行这种输入便会表现出一种SQL注入漏洞。 检查SQL注入漏洞主要涉及到两方面,一是审计用户的Web应用程序,二是通过使用自动化的SQL注入扫描器执行审记的最佳方法。在此,笔者罗列了一些对Web应用程序开发人员和专业的安全审计人员有价值的SQL注入扫描程序。 一、SQLIer SQLIer可以找到网站上一个有SQL注入漏洞的URL,并根据有关信息来生成利用SQL注入漏洞,但它不要求用户的交互。通过这种方法,它可以生成一个UNION SELECT查询,进而可以强力攻击数据库口令。这个程序在利用漏洞时并不使用引号,这意味着它可适应多种网站。 SQLIer通过“true/false”SQL注入漏洞强力口令。借助于“true/false” SQL注入漏洞强力口令,用户是无法从数据库查询数据的,只能查询一个可返回“true”、“false”值的语句。 据统计,一个八个字符的口令(包括十进制ASCII代码的任何字符)仅需要大约1分钟即可破解。 其使用语法如下,sqlier [选项] [URL] 。其选项如下: -c :[主机] 清除主机的漏洞利用信息 -s :[秒]在网页请求之间等待的秒数 -u:[用户名]从数据库中强力攻击的用户名,用逗号隔开。 -w:[选项]将[选项]交由wget 此外,此程序还支持猜测字段名,有如下几种选择: --table-names [表格名称]:可进行猜测的表格名称,用逗号隔开。 --user-fields[用户字段]:可进行猜测的用户名字段名称,用逗号隔开。 --pass-fields [口令字段]:可进行猜测的口令字段名称,用逗号隔开。 下面说一下其基本用法: 例如,假设在下面的URL中有一个SQL注入漏洞: https://www.wendangku.net/doc/db16550924.html,/sqlihole.php?id=1 我们运行下面这个命令: sqlier -s 10 https://www.wendangku.net/doc/db16550924.html,/sqlihole.php?id=1从数据库中得到足够的信息,以利用其口令,其中的数字“10”表示要在每次查询之间等待10秒钟。 如果表格、用户名字段、口令字段名猜测得正确,那么漏洞利用程序会把用户名交付查询,准备从数据库中强力攻击口令。 sqlier -s 10 https://www.wendangku.net/doc/db16550924.html, -u BCable,administrator,root,user4 然而,如果内建的字段/表格名称没有猜中正确的字段名,用户就可以执行: sqlier -s 10 https://www.wendangku.net/doc/db16550924.html, --table-names [table_names] --user-fields [user_fields] --pass-fields [pass_fields]

SQL注入检测

写在前面: 现在的网络,脚本入侵十分的流行,而脚本注入漏洞更是风靡黑客界。不管是老鸟还是新起步的小菜,都会为它那巨大的威力和灵活多变的招式所着迷。正是因为注入攻击的流行,使的市面上的注入工具层出不穷。比较出名的有小竹的NBSI、教主的HDSI和啊D的注入工具等等。这大大方便的小菜们掌握注入漏洞。可是,工具是死的,注入的手法却是活的,能否根据实际情况灵活地构造SQL注入语句,得到自己想要的信息,是高手与小菜的根本区别。只用工具,而不去管它的原理,是不可能得到提高的,当然,在遇到一些特殊情况的时候,那些只会用工具的小菜们也只能放弃了。所以学会手工注入自己构造SQL注入语句是一个黑客爱好者必上的一堂课。 恶补基础: 要想学会手工注入,有一个名词是不得不提的,那就是数据库系统。 1。简介 数据库系统分为数据库和数据库管理系统!数据库是存放数据的地方,数据库管理系统则是管理数据库的软件!数据库中数据的存储节构叫数据模型!有四种常见的数据模型,分别是层次模型、网状模型、关系模型和面向对象模型。其中关系数据模型是最主要的数据模型,ACCESS、MSSQL、ORACLE等都是关系模型数据库系统。其中以ACCESS、MSSQL数据库系统最为常见!这些都是理论的知识,希望大家理解。 2。基本概念 表:表是一个关系数据库的基本组成元素!它按行与列组合排列成相关信息。通常行称为记录,列称为域。每个域称为一个字段!每一条记录都由多个字段组成。每个字段的名字叫做字段名,每个字段的值叫估字段值。表中的每一行即每一条记录都拥有想同的结构。如图1。 图1中的这张表里有14行,即14条记录。有4列,即4个字段,4个字段的名字分别叫:job_id(下面对应的1、2、3等都是这个字段的值,后面三个字段的值举一反三!) 、job_ desc、 min_lvl、max_lvl。因为本文不是专讲数据库知识的,所以这里只讲一些最重要的概念,有兴趣的朋友可以自己去查看数据库的有关资料! 3。注入的条件 只有调用数据库的动态页面才有可有存在注入漏洞,动态页面包括asp php jsp cgi 等。本文只讲对ASP页面的注入。那什么是调用数据库的页面呢?比如这样的形势:asp?id= php?id= 这样的样子的都是调用数据库的页面。"?"后面加的id的名字叫变量,注意这个变量是可以随便换的,"="号后面的值名字叫参数!这个参数也是可以变的!大家的思路一定要灵活,要学会举一反三,不要太死板。 4。注入漏洞的原理分析:

SQL注入攻击实验报告

实验报告 (实验名称:SQL注入攻击)

一、实验目的 通过SQL注入攻击,掌握网站的工作机制,认识到SQL注入攻击的防范措施,加强对Web攻击的防范。 二、实验环境 描述实验开展所基于的网络环境,给出网络拓扑、IP地址、web服务器、客户机等信息。 宿主机(客户机):操作系统为Windows 10,IP为192.168.18.11,在主机上安装虚拟化软件Vmware Player,在此基础上创建虚拟机并安装操作系统,进行网络配置,采用环回适配器,桥接模式,实现宿主机与虚拟机之间的网络通信,虚拟机(Web服务器):操作系统为Windows XP,IP为192.168.18.9, 本实验利用windows 的iis 服务搭建了一个有SQL 注入漏洞的网站“ASP 新闻发布系统”,以该网站为目标,对其实施SQL 注入攻击。 本实验所需工具如下: IIS 是Internet Information Server 的缩写,是微软提供的Internet 服务器软件,包括Web、等服务器,也是目前常用的服务器软件。版本不限。 “啊D”注入工具:对“MSSQL 显错模式”、“MSSQL 不显错模式”、“Access”等数据库都有很好的注入检测能力,内集“跨库查询”、“注入点扫描”、“管理入口检测”、“目录查看”等等于一身的注入工具包。 “ASP 新闻发布系统”Ok3w v4.6 源码。 三、实验内容 (一)配置实验环境, 首先选择网络适配器,安装环回适配器,在主机上安装Vmware Player,成功启动虚拟机。接着配置宿主机和虚拟机的IP,如图 要注意的是,配置主机上的IP时,应该选择VMnet8,并且注意勾取Bridge

如何防范SQL注入漏洞

如何防范SQL注入漏洞,下面给出4个函数,足够你抵挡一切SQL注入漏洞!读懂代码,你就能融会贯通。 注意要对所有的request对象进行过滤:包括 request.cookie, request.Server Variables 等等容易被忽视的对象: function killn(byval s1) '过滤数值型参数 if not isnumeric(s1) then killn=0 else if s1<0 or s1>2147483647 then killn=0 else killn=clng(s1) end if end if end function function killc(byval s1) 过滤货币型参数 if not isnumeric(s1) then killc=0 else killc=formatnumber(s1,2,-1,0,0) end if end function function killw(byval s1) '过滤字符型参数 if len(s1)=0 then killw="" else killw=trim(replace(s1,"'","")) end if end function function killbad(byval s1) 过滤所有危险字符,包括跨站脚本 If len(s1) = 0 then killbad="" else killbad = trim(replace(replace(replace(replace (replace(replace(replace(replace(s1,Chr(10), "
"), Chr(34), """), ">", ">"), "<", "<"), "&", "&"), chr(39),"'"),chr(32)," "),chr(13),""))

921202-信息系统安全与对抗实践-9. sql注入漏洞(一)

信息系统安全与对抗实践 SQL 注入漏洞(一)

内容提要 ?SQL注入漏洞 -基本介绍 -基本原理 -攻击步骤 ?靶场搭建 -DVWA(综合型靶场) -Sqli-labs(SQL注入靶场) 2

3 ?SQL Injection ,即SQL 注入,是指攻击者通过注入恶意的SQL 命令,破坏SQL 查询语句的结构,从而达到执行恶意SQL 语句的目的。SQL 注入漏洞的危害是巨大的,常常会导致整个数据库被“脱裤”,尽管如此,SQL 注入仍是现在最常见的Web 漏洞之一。 ?原理 select *from user where username =‘$username ’,红色部分内容为用户可控的内容,如果我们尝试输入一个单引号(‘)。Sql 语句就变成了select *from user where username =’’’,前面两个单引号组成了一对,后面空出一个单引号不符合语法规则,所以产生报错。此时我们已经修改了原本SQL 语句的结构。 输入$username 参数的地方也叫做注入点,注入点可能存在于GET 参数内、POST 参数内、HTTP 头字段内等。SQL 注入漏洞

SQL注入漏洞 ?原理 如果我们输入’ or ‘1’=‘1,那么sql语句就会变成select * from user where username = ‘’or ‘1’=‘1’,此时该语句就等同于select * from user 。 ?实战 -绕过登录 select * from username = ‘$username’ and password =‘$password’ -方法 ?使用注释 ?闭合单引号 4

SQL注入专题(防范+攻击)全手册

SQL注入专题(防范+攻击)全手册 SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。 随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。 但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据,是高手与“菜鸟”的根本区别。 1楼:SQL注入漏洞全接触--入门篇 2楼:SQL注入漏洞全接触--进阶篇 3楼:SQL注入漏洞全接触--高级篇 4楼:SQL Server应用程序中的高级SQL注入 5楼:编写通用的ASP防SQL注入攻击程序 6楼:利用instr()函数防止SQL注入攻击 7楼:SQL注入攻击的原理及其防范措施 8楼:跨站式SQL注入技巧 9楼:防范Sql注入式攻击 10楼:Dreamweaver中sql注入式攻击的防范 11楼:PHP与SQL注入攻击 12楼:SQL注入攻击零距离 13楼:SQL注入技术和跨站脚本攻击的检测 14楼:菜鸟入门级:SQL注入攻击 15楼:三步堵死SQL注入漏洞 16楼:SQL注入实战---利用“dbo”获得SQL管理权限和系统权限 17楼:两个防SQL注入过滤代码 18楼:蓝雨设计整站SQL注入漏洞 19楼:SQL注入渗透某网络安全公司的网站全过程 20楼:sql注入防御 21楼:终极防范SQL注入漏洞 22楼:SQL注入与ASP木马上传 23楼:如何在SQL注入时保护数据库 24楼:天晨设计整站SQL注入漏洞

web安全性测试sql注入高级篇

看完入门篇和进阶篇后,稍加练习,破解一般的网站是没问题了。但如果碰到表名列名猜不到,或程序作者过滤了一些特殊字符,怎么提高注入的成功率?怎么样提高猜解效率?请大家接着往下看高级篇。 第一节、利用系统表注入SQLServer数据库 SQLServer是一个功能强大的数据库系统,与操作系统也有紧密的联系,这给开发者带来了很大的方便,但另一方面,也为注入者提供了一个跳板,我们先来看看几个具体的例子: ①;exec master..xp_cmdshell “net user name password /add”-- 分号;在SQLServer中表示隔开前后两句语句,--表示后面的语句为注释,所以,这句语句在SQLServer中将被分成两句执行,先是Select出ID=1的记录,然后执行存储过程xp_cmdshell,这个存储过程用于调用系统命令,于是,用net命令新建了用户名为name、密码为password的windows的帐号,接着: ②;exec master..xp_cmdshell “net localgroup name administrators /add”-- 将新建的帐号name加入管理员组,不用两分钟,你已经拿到了系统最高权限!当然,这种方法只适用于用sa连接数据库的情况,否则,是没有权限调用xp_cmdshell的。 ③;;and db_name()>0 前面有个类似的例子and user>0,作用是获取连接用户名,db_name()是另一个系统变量,返回的是连接的数据库名。 ④;backup database 数据库名to disk=’c:\inetpub\wwwroot\1.db’;-- 这是相当狠的一招,从③拿到的数据库名,加上某些IIS出错暴露出的绝对路径,将数据库备份到Web目录下面,再用HTTP把整个数据库就完完整整的下载回来,所有的管理员及用户密码都一览无遗!在不知道绝对路径的时候,还可以备份到网络地址的方法(如\\,但成功率不高。

Php中sql注入漏洞示例 sql注入漏洞修复

Php中sql注入漏洞示例sql注入漏洞修复 这篇文章主要介绍了php中sql注入漏洞示例,大家在开发中一定要注意 在开发网站的时候,出于安全考虑,需要过滤从页面传递过来的字符。通常,用户可以通过以下接口调用数据库的内容:URL地址栏、登陆界面、留言板、搜索框等。这往往给骇客留下了可乘之机。轻则数据遭到泄露,重则服务器被拿下。 一、SQL注入的步骤 a) 寻找注入点(如:登录界面、留言板等) b) 用户自己构造SQL语句(如:' or 1=1#,后面会讲解) c) 将sql语句发送给数据库管理系统(DBMS) d) DBMS接收请求,并将该请求解释成机器代码指令,执行必要的存取操作 e) DBMS接受返回的结果,并处理,返回给用户 因为用户构造了特殊的SQL语句,必定返回特殊的结果(只要你的SQL语句够灵活的话)。 下面,通过一个实例具体来演示下SQL注入 二、SQL注入实例详解(以上测试均假设服务器未开启magic_quote_gpc) 1) 前期准备工作 先来演示通过SQL注入漏洞,登入后台管理员界面 首先,创建一张试验用的数据表: 代码如下: CREATETABLE `users` ( `id`int(11) NOT NULL AUTO_INCREMENT, `username`varchar(64) NOT NULL, `password`varchar(64) NOT NULL, `email`varchar(64) NOT NULL, PRIMARYKEY (`id`),

UNIQUEKEY `username` (`username`) )ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1; 添加一条记录用于测试: 代码如下: INSERTINTO users (username,password,email) VALUES('MarcoFly',md5('test'),'marcofly@https://www.wendangku.net/doc/db16550924.html,'); 接下来,贴上登录界面的源代码: 代码如下: Sql注入演示 用户名: 密码: 当用户点击提交按钮的时候,将会把表单数据提交给validate.php页面,validate.php页面用来判断用户输入的用户名和密码有没有都符合要求(这一步至关重要,也往往是SQL漏洞所在) 代码如下: $conn=@mysql_connect("localhost",'root','')or die("数据库连接失败!");; mysql_select_db("injection",$conn) or die("您要选择的数据库不存在"); $name=$_POST['username']; $pwd=$_POST['password']; $sql="select * from users where username='$name' andpassword='$pwd'"; $query=mysql_query($sql); $arr=mysql_fetch_array($query); if(is_array($arr)){ header("Location:manager.php"); }else{

Web应用SQL注入漏洞检测工具的设计与实现

龙源期刊网 https://www.wendangku.net/doc/db16550924.html, Web应用SQL注入漏洞检测工具的设计与实现 作者:张鑫张婷段新东林玉香 来源:《信息安全与技术》2014年第08期 【摘要】由于Web应用系统的开发周期较短,同时开发人员安全编程意识不足,Web 应用程序会存在漏洞。因此,检测Web应用系统的安全性是安全领域的亟待解决的问题。SQL注入漏洞检测工具模拟黑客攻击的方式,采用网络爬虫技术建立需检测的URL库,依据SQL注入模板精心构造URL,并从根据浏览器返回信息,判定是否存在SQL注入点。可以提前意识到Web应用存在的漏洞,并及时修补,降低系统受攻击的风险,是有效的Web安全防护手段。 【关键词】 SQL注入;漏洞检测;Web安全 【中图分类号】 TP311 1 引言 采用B/S架构,并通过HTTP或HTTPS协议提供访问的应用服务统称为Web应用。目前,几乎所有政府、通信、证券、银行以及电子商务都支持在线交易和查询服务,包括个人账户、用户信息、交易记录等在内的用户的敏感信息,都通过Web应用系统存储在数据库中,一旦数据被盗取或篡改,都会造成巨大损失。为降低系统受攻击的风险,可利用Web应用安全漏洞扫描技术,可以实现在线的Web应用健康检查,提醒网站管理员进行修补,是效果好的Web安全防护手段。 2 Web 应用中常见漏洞攻击 Web 应用大多涉及服务器端的动态处理,同时,开发人员可能在开发过程中疏忽参数的输入检查,因此会出现各种Web 应用安全问题,会产生相关漏洞,例如文件包含漏洞,目录遍历漏洞,信息泄露漏洞和SQL 注入漏洞给攻击者留下可乘之机。 由于SQL 注入漏洞利用Web应用开放的端口,通常防火墙等设备无法检测到,所以其隐蔽性高,如果攻击者不留下痕迹,或者管理员没有查看数据库日志的习惯,基本不会发现。 根据美国国家漏洞数据库(NVD)的统计,SQL注入在针对Web应用攻击手段中名列榜首,是互联网危害最大的安全漏洞。SQL注入攻击的几个过程。

五大著名免费SQL注入漏洞扫描工具

五大著名免费SQL注入漏洞扫描工具 大量的现代企业采用Web应用程序与其客户无缝地连接到一起,但由于不正确的编码,造成了许多安全问题。Web应用程序中的漏洞可使黑客获取对敏感信息(如个人数据、登录信息等)的直接访问。 Web应用程序准许访问者提交数据,并可通过互联网从数据库中检索数据。而数据库是多数Web应用程序的心脏。数据库维持着Web应用程序将特定内容交给访问者的数据,Web应用程序在将信息交给客户、供应商时,也从数据库取得数据。 SQL注入攻击是最为常见的Web应用程序攻击技术,它会试图绕过SQL命令。在用户输入没有“净化”时,如果执行这种输入便会表现出一种SQL注入漏洞。 检查SQL注入漏洞主要涉及到两方面,一是审计用户的Web应用程序,二是通过使用自动化的SQL注入扫描器执行审记的最佳方法。在此,笔者罗列了一些对Web应用程序开发人员和专业的安全审计人员有价值的SQL注入扫描程序。 一、SQLIer SQLIer可以找到网站上一个有SQL注入漏洞的URL,并根据有关信息来生成利用SQL 注入漏洞,但它不要求用户的交互。通过这种方法,它可以生成一个UNION SELECT查询,进而可以强力攻击数据库口令。这个程序在利用漏洞时并不使用引号,这意味着它可适应多种网站。 SQLIer通过“true/false”SQL注入漏洞强力口令。借助于“true/false” SQL注入漏洞强力口令,用户是无法从数据库查询数据的,只能查询一个可返回“true”、“false”值的语句。 据统计,一个八个字符的口令(包括十进制ASCII代码的任何字符)仅需要大约1分钟即可破解。 其使用语法如下,sqlier [选项] [URL] 其选项如下: -c :[主机] 清除主机的漏洞利用信息 -s :[秒]在网页请求之间等待的秒数 -u:[用户名]从数据库中强力攻击的用户名,用逗号隔开。 -w:[选项]将[选项]交由wget 此外,此程序还支持猜测字段名,有如下几种选择: --table-names [表格名称]:可进行猜测的表格名称,用逗号隔开。

利用SQL注入漏洞登录后台

利用SQL注入漏洞登录后台 题记:工作需要,得好好补习下关于WEB安全方面的相关知识,故撰此文,权当总结,别无它意。读这篇文章,我假设读者有过写SQL语句的经历,或者能看得懂SQL语句 早在02年,国外关于SQL注入漏洞的技术文章已经很多,而国内在05年左右才开始的。 如今,谈SQL注入漏洞是否已是明日黄花,国内大大小小的网站都已经补上漏洞。但,百密必有一疏,入侵是偶然的,但安全绝对不是必然的。 前些天,网上传得沸沸扬扬的“拖库”事件给我们敲响了安全警钟。 在开发网站的时候,出于安全考虑,需要过滤从页面传递过来的字符。通常,用户可以通过以下接口调用数据库的内容:URL地址栏、登陆界面、留言板、搜索框等。这往往给骇客留下了可乘之机。轻则数据遭到泄露,重则服务器被拿下。 现在,很多网站开发人员知其然而不知其所以然,小弟也是,所以赶紧恶补下,总结如学习内容。希望对初学者能够起到抛砖引玉的作用。 一、SQL注入的步骤 a) 寻找注入点(如:登录界面、留言板等) b) 用户自己构造SQL语句(如:’ or 1=1#,后面会讲解) c) 将sql语句发送给数据库管理系统(DBMS) d) DBMS接收请求,并将该请求解释成机器代码指令,执行必要的存取操作 e) DBMS接受返回的结果,并处理,返回给用户 因为用户构造了特殊的SQL语句,必定返回特殊的结果(只要你的SQL语句够灵活的话)。 下面,我通过一个实例具体来演示下SQL注入 二、SQL注入实例详解(以上测试均假设服务器未开启magic_quote_gpc) 1) 前期准备工作 先来演示通过SQL注入漏洞,登入后台管理员界面

SQL注入攻击实验报告

实验报告 实验名称:SQL 注入攻击)

一、实验目的 通过SQL注入攻击,掌握网站的工作机制,认识到SQL注入攻击的防范措施,加强对Wet攻击的防范。 二、实验环境 描述实验开展所基于的网络环境,给出网络拓扑、IP地址、web服务器、客户机等信息。 宿主机(客户机):操作系统为Windows 10,IP为,在主机上安装虚拟化软件Vmware Player,在此基础上创建虚拟机并安装操作系统,进行网络配置,采用环回适配器,桥接模式,实现宿主机与虚拟机之间的网络通信, 虚拟机(Web服务器):操作系统为Windows XP, IP为, 本实验利用windows的iis 服务搭建了一个有SQL注入漏洞的网站“ ASP新闻发布系统”,以该网站为目标,对其实施SQL注入攻击。 本实验所需工具如下: IIS 是In ternet In formation Server 的缩写,是微软提供的In ternet 服务器软件,包括Web FTP Mail等服务器,也是目前常用的服务器软件。版本不限。 “啊D'注入工具:对“ MSSQL显错模式”、“ MSSQL不显错模式”、 “ Access ”等数据库都有很好的注入检测能力,内集“跨库查询”、“注入点扫描”、“管理入口检测”、“目录查看”等等于一身的注入工具包。 “ ASP新闻发布系统” 0k3w源码。 三、实验内容 (一)配置实验环境, 首先选择网络适配器,安装环回适配器,在主机上安装VmwarePlayer,成功启 动虚拟机。接着配置宿主机和虚拟机的IP,如图 如鸭宓韵站M6,矗可咗取兰為詡鮒IP £&.逵删.你愛養从网屯雋諭苗細也義 晦电国酌pm 10 ?4出勺I 子网?屮 要注意的是,配置主机上的IP时,应该选择VMnet8,并且注意勾取Bridge

SQL注入漏洞分析及防范

SQL注入漏洞分析及防范 随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。 SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。 但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据,是需要对sql注入有较深的理解。 根据国情,国内的网站用ASP+Access或SQLServer的占70%以上,PHP+MySQ占L20%,其他的不足10%。在本文,我们从分入门、进阶至高级讲解一下注入的方法及技巧,希望对安全工作者和程序员都有用处。 入门篇 如果你以前没试过SQL注入的话,那么第一步先把IE菜单=>工具=>Internet选项=>高级=>显示友好HTTP 错误信息前面的勾去掉。否则,不论服务器返回什么错误,IE都只显示为HTTP 500服务器错误,不能获得更多的提示信息。 第一节、SQL注入原理 以下我们从一个网站https://www.wendangku.net/doc/db16550924.html,开始(注:本文发表前已征得该站站长同意,大部分都是真实数据)。 在网站首页上,有名为“IE不能打开新窗口的多种解决方法”的链接,地址为: https://www.wendangku.net/doc/db16550924.html,/showdetail.asp?id=49,我们在这个地址后面加上单引号’,服务器会返回下面的错误提示: Microsoft JET Database Engine 错误 '80040e14' 字符串的语法错误在查询表达式 'ID=49'' 中。 /showdetail.asp,行8 从这个错误提示我们能看出下面几点: 1.网站使用的是Access数据库,通过JET引擎连接数据库,而不是通过ODBC。 2.程序没有判断客户端提交的数据是否符合程序要求。 3.该SQL语句所查询的表中有一名为ID的字段。 从上面的例子我们可以知道,SQL注入的原理,就是从客户端提交特殊的代码,从而收集程序及服务器的信息,从而获取你想到得到的资料。 第二节、判断能否进行SQL注入

SQL注入漏洞攻击研究及防范措施

基于SQL的Web系统安全防范——SQL注入漏洞 攻击研究及防范措施 SQL-Based Web System Security——Structured Query Language Injection Leak Attack Study And Defense Measure 摘要:在当今的数字世界中,人们发现在维持公开的Internet连接的同时,保护网络和计算机系统的安全变得越来越困难。病毒、木马、后门、蠕虫等攻击层出不穷,虚假网站的钓鱼行为也让警惕性不高的公众深受其害。据有关部门统计,2008年一季度,我国有15万台主机被植入木马,网站篡改数量迅速增加,预计已达5835个,其中政府网站达484个,每月564次的安全事件报告。为了减轻信息泄露及系统攻击带来的风险,企业和机构开始对自己的系统进行渗透性测试,找出其中存在的漏洞和安全隐患。本文通过对目前最流行的SQL注入漏洞攻击的过程做了逐一的分析, 并提出了检测方法和防范措施。 关键字:SQL注入漏洞攻击脚本攻击 SQL注入点检测防范模型有害代码

SQL注入(SQL Injection)漏洞攻击是目前网上最流行最热门的黑客脚本攻击方法之一,那什么是SQL 注入漏洞攻击呢?它是指黑客利用一些Web应用程序(如:网站、论坛、留言本、文章发布系统等)中某些存在不安全代码或SQL语句不缜密的页面,精心构造SQL语句,把非法的SQL语句指令转译到系统实际SQL语句中并执行它,以获取用户名、口令等敏感信息,从而达到控制主机服务器的攻击方法。 1. SQL注入漏洞攻击原理 1. 1 SQL注入漏洞攻击实现原理 SQL(Structured Query Language)是一种用来和数据库交互的语言文本。SQL注入的攻击原理就是攻击者通过Web应用程序利用SQL语句或字符串将非法的数据插入到服务器端数据库中,获取数据库的管理用户权限,然后将数据库管理用户权限提升至操作系统管理用户权限,控制服务器操作系统,获取重要信息及机密文件。 SQL注入漏洞攻击主要是通过借助于HDSI、NBSI 和Domain等SQL注入漏洞扫描工具扫描出Web页面中存在的SQL注入漏洞,从而定位SQL注入点,通过执行非法的SQL语句或字符串达到入侵者想要的操

关于SQL注入漏洞注入的补丁已经修补过程

关于SQL注入漏洞注入的补丁已经修补过 程 针对非书资料系统SQL注入问题 已经做以下修正: 1.已经在服务器端加强URL请求字符过滤 具体过滤字段如下: ///

/// 过滤标记 /// /// 包括HTML,脚本,数据库关键字,特殊字符的源码 /// 已经去除标记后的文字 public static string NoHTML(string Htmlstring) { if (Htmlstring == null) { return ""; } else { //删除脚本 Htmlstring = Regex.Replace(Htmlstring, @"]*?>.*?", "", RegexOptions.IgnoreCase); //删除HTML //Htmlstring = Regex.Replace(Htmlstring, @"<(.[^>]*)>", "", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"([/r/n])[/s]+", "", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"-->", "", RegexOptions.IgnoreCase);

RegexOptions.IgnoreCase); ?Htmlstring = Regex.Replace(Htmlstring, @"&(quot|#34);", "/"", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(amp|#38);", "&", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(lt|#60);", "<", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(gt|#62);", ">", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(nbsp|#160);", " ", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(iexcl|#161);", "/xa1", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(cent|#162);", "/xa2", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(pound|#163);", "/xa3", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(copy|#169);", "/xa9", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&#(/d+);", "", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "xp_cmdshell", "", RegexOptions.IgnoreCase); ?//删除与数据库相关的词 // Htmlstring = Regex.Replace(Htmlstring, "select", "", RegexOptions.IgnoreCase); // Htmlstring = Regex.Replace(Htmlstring, "insert", "", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "delete from", "", RegexOptions.IgnoreCase); // Htmlstring = Regex.Replace(Htmlstring, "count''", "", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "drop table", "", RegexOptions.IgnoreCase);

SQL注入与XSS漏洞

SQL注入与XSS漏洞 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击. 当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。sql注入可能导致攻击者使用应用程序登陆在数据库中执行命令。如果应用程序使用特权过高的帐户连接到数据库,这种问题会变得很严重。在某些表单中,用户输入的内容直接用来构造(或者影响)动态sql命令,或者作为存储过程的输入参数,这些表单特别容易受到sql注入的攻击。而许多网站程序在编写时,没有对用户输入的合法性进行判断或者程序中本身的变量处理不当,使应用程序存在安全隐患。这样,用户就可以提交一段数据库查询的代码,根据程序返回的结果,获得一些敏感的信息或者控制整个服务器,于是sql注入就发生了。 注入大致方法: 先猜表名 And (Select count(*) from 表名)<>0 猜列名 And (Select count(列名) from 表名)<>0 或者也可以这样 and exists (select * from 表名) and exists (select 列名 from 表名) 返回正确的,那么写的表名或列名就是正确 这里要注意的是,exists这个不能应用于猜内容上,例如and exists (select le n(user) from admin)>3 这样是不信的 现在很多人都是喜欢查询里面的内容,一旦iis没有关闭错误提示的,那么就可以利用报错方法轻松获得库里面的内容 获得数据库连接用户名:;and user>0 这个是小竹提出来的,我这里引用《SQL注入天书》里面的一段话来讲解: ---------------------------------- ------------------------------------ ------------------------------------"重点在and user>0,我们知道,user是SQLServer的一个内置变量,它的值是当前连接的用户名,类型为nvarchar。拿一个 nvarchar的值跟int的数0比较,系统会先试图将nvarchar的值转成int型,当然,转的过程中肯定会出错,SQLSer ver

sql注入测试

sql注入原理 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。 根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。基于此,SQL注入的产生原因通常表现在以下几方面:①不当的类型处理;②不安全的数据库配置;③不合理的查询集处理;④不当的错误处理;⑤转义字符处理不合适;⑥多个提交处理不当。 sql注入攻击 当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。sql注入可能导致攻击者使用应用程序登陆在数据库中执行命令。相关的SQL 注入可以通过测试工具pangolin进行。如果应用程序使用特权过高的帐户连接到数据库,这种问题会变得很严重。在某些表单中,用户输入的内容直接用来构造动态sql命令,或者作为存储过程的输入参数,这些表单特别容易受到sql注入的攻击。而许多网站程序在编写时,没有对用户输入的合法性进行判断或者程序中本身的变量处理不当,使应用程序存在安全隐患。这样,用户就可以提交一段数据库查询的代码,根据程序返回的结果,获得一些敏感的信息或者控制整个服务器,于是sql注入就发生了。 防止SQL注入 归纳一下,主要有以下几点: 1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和 双"-"进行转换等。 2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。 3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。 4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。 5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装

相关文档