热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

多路非对称攻击:HTTP/2服务器上的下一代DDoS

 近年来,使用HTTP协议的分布式拒绝服务(DDoS)攻击正在流行,这个方向上的最新趋势是使用消耗大量计算的请求来发起攻击,这些称为非对称工作负载攻击(Asymmetric Workload Atta

 

近年来,使用HTTP协议的分布式拒绝服务(DDoS)攻击正在流行,这个方向上的最新趋势是使用消耗大量计算的请求来发起攻击,这些称为非对称工作负载攻击(Asymmetric Workload Attacks)的攻击可以使用有限的资源关闭服务器,并且极难检测。 HTTP/2的引入受到开发人员的欢迎,它改善了用户体验和效率。通过使用多路复用(Multiplexing)和服务器推送(Server Push)同时传输HTTP请求及其关联的内联资源的能力,使之成为可能。多路复用已使请求流量突发,并且基于连接限制的DDoS检测机制已过时。与其意图相反,复用也可能被滥用以在单个TCP连接中使用多个高工作负载请求发起复杂的DDoS攻击,在这一领域还没有进行足够的研究。现有研究表明,HTTP/2协议使用户可以轻松发起DDoS攻击,但是没有研究关注HTTP/2服务器是否可以更有效地处理DDoS攻击。此外,对于复用和服务器推送被滥用的可能性,尚未进行足够的研究。在这项工作中,分析了在相同负载下非对称DDoS攻击下与HTTP/1.1服务器相比的HTTP/2服务器的性能。本文提出了一种新的DDoS,称为多路非对称DDoS攻击,它通过与预期不同的方式利用Multiplexing。研究证明了这种攻击可以仅使用几个攻击客户端,就令服务器瘫痪。在启用Server Push的情况下,对服务器的多路复用非对称攻击除了触发应用程序层攻击外,还会触发出口网络层泛洪。

 

0x01 Introduction

自互联网问世以来,DDoS攻击一直困扰着互联网, DDoS攻击主要可以在网络层或应用层执行。网络层的攻击需要更多资源来执行,这导致攻击者近年来将目标对准了应用层。应用层DDoS攻击试图耗尽服务器资源,例如CPU或数据库周期,内存或套接字连接。它们使用合法请求,并且可以使用相对较低的攻击量执行。这使他们可以绕过大多数现有的DDoS防御机制。在过去十年中,使用HTTP协议的DDoS攻击开始声名狼藉,在2018年第一季度占所有攻击的10%左右。专门针对CPU使用率的攻击(称为CPU耗尽攻击)构成了应用程序层DDoS攻击的主要部分。近年来,还记录了利用消耗大量计算的HTTP请求的CPU耗尽攻击的更复杂版本。这些攻击称为非对称工作负载攻击,可以用更少的资源耗尽服务器,从而带来非常困难的挑战。

2015年HTTP/2的标准化标志着互联网的重大变化。HTTP/2旨在通过减少客户端的页面加载时间来提高HTTP协议的效率。该协议的新版本中进行的一些重大更改包括使用新的二进制成帧系统,引入了报头压缩,多路复用和服务器推送。多路复用的引入允许用户将多个HTTP请求捆绑到一个TCP连接中,从而大大减少了网络带宽。另一方面,服务器推送允许服务器在没有显式请求的情况下将内联资源发送到客户端。多路复用和报头压缩的结合已导致HTTP/2中的请求大小大大减少,从而降低了带宽利用率。这些修改有助于减少大多数客户端的页面加载延迟,尤其是在动态Web应用程序的情况下。单独使用多路复用可以在某些情况下将页面加载时间缩短40%,客户端服务质量(QoS)的这种改进导致Web服务器和浏览器快速采用HTTP/2。大多数现代浏览器都支持HTTP/2。目前,所有网站中有40.7%使用HTTP/2。尽管HTTP/2在改善用户体验方面是有效的,但它在以下方面也面临问题:

•突发流量:HTTP/2请求流量基本上是突发性的。对于相同的请求速率,HTTP/1.1中的稳定请求流现在已由大量请求的短脉冲代替。这使得必须过度配置Web服务器以同时处理比以前所需的更多请求,并使HTTP/2服务器容易受到DoS(或DDoS)攻击。

•增强的客户端请求生成功能:HTTP/2中的多路复用和报头压缩已导致单个请求的大小减少,从而使用户可以使用相同的带宽和数据包生成功能发送更多请求。反过来,这使攻击者可以更有效地发起DDoS攻击。

•滥用新引入的功能:HTTP/2引入了许多旨在改善用户体验并减少响应时间的功能。但是,大多数这些功能可能会被滥用,以在没有适当验证的情况下对Web服务器发起攻击。例如,HTTP/2允许用户为请求指定优先级顺序,以改善QoS。引入此功能的初衷是为了改善用户体验,但是Imperva认为可以滥用此功能,以便在服务器上产生DoS攻击。

开展这项研究工作的动机有两个方面:

•HTTP/2比其前身更容易受到DDoS攻击,因为它每个请求执行的工作更多。但是,现有的研究工作尚未在公平的评估环境下比较这两种协议的性能。尽管HTTP/2服务器在每个请求上执行的工作要比其前任多,但它们还具有多项性能改进功能,例如二进制编码可以弥补这一缺陷。在这项工作中,希望比较两个服务器处于相同负载下的非对称工作负载攻击期间HTTP/1.1和HTTP/2服务器的性能。据

•对于滥用复用和服务器推送在HTTP/2服务器上生成复杂攻击的可能性,尚未进行任何研究工作。复用允许攻击者从单个系统同时发送多个请求,从而无需购买大型僵尸网络。除此之外,客户端可以完全控制要复用的请求。这允许客户端从单个系统同时发送多个高工作负载请求并发起攻击。服务器推送也存在类似问题。为了提高性能,服务器必须推送客户端所需的资源。盲目地推送与请求相关的所有资源将在很大程度上影响性能。通过这项工作,试图证明多路复用和服务器推送可能被滥用来发起复杂的DDoS攻击,并说明了盲目处理到达服务器的每个请求的危险。HTTP/2允许通过单个TCP连接发送多个消息,并在服务器上同时进行处理。通过在单个连接中发送多个内联请求,可以更快地加载内容繁多的网页。通过下图a和下b中的图示出了复用的特征。

 

0x02 Next-Generation DDoS Attacks by Exploiting Multiplexing and Server Push

通常,通过发送一个用于检索文本内容的基本请求和多个用于检索正确呈现页面所需的内容的内联请求(例如图像,CSS和Javascript文件)来满足对Web应用程序的请求。基本请求通常在计算上很昂贵,因为它们在服务器上启动一些处理,而内联请求通常是静态的并且可以轻松处理。由于网页几乎总是需要这些内联资源来正确呈现,因此通常在对基本页面的请求之后是对其内联资源的请求。 HTTP/2复用和服务器推送实质上是通过将所有资源捆绑在一起并通过不同的流为它们提供服务,从而消除请求和接收这些资源的开销。但是,多路复用提出了一些安全方面的考虑。通过允许单个TCP连接同时进行多个请求,多路复用从本质上消除了购买大型僵尸网络发起攻击的需要。同样,尽管有复用的预期用途,但是对可以将哪些请求复用在一起也没有限制。攻击者可以利用此优势,并将多个基本请求捆绑到单个TCP连接中,并迫使服务器同时处理它们。如果多路复用计算量大的非对称请求以形成攻击有效载荷,则可能会出现DoS情况。


A.多路非对称攻击

本文提出了一种称为多路非对称攻击的攻击,其中,攻击者将服务器允许的尽可能多的非对称工作负载攻击请求复用到单个TCP连接中,并同时启动它们。这种攻击极为危险,因为每个复用请求本身就是一个非对称工作负载请求,需要进行大量计算。所有这些请求的组合可能会导致仅带有少数攻击系统的服务器瘫痪。除此之外,由于报头压缩的影响,这种攻击所产生的入口带宽将非常低。可以通过从前k个高工作负载请求中随机选择来生成更隐秘的攻击版本。与使用单个URL作为目标相比,这为攻击者提供了更好的伪装。如果没有对传入连接进行正确的行为分析,则服务器将无法检测到这种攻击,因为它利用了合法请求并且已通过HTTP/2协议允许的功能进行了发送。


B.开启服务器推送的多路非对称攻击

正确使用Server Push可以减少页面加载时间,减少客户端的工作量,从而改善客户端的用户体验,但同时也会给Web服务器带来负担。现在,Web服务器需要同时或快速连续地服务多个请求。服务器推送,因此提高了服务请求时的服务器利用率。

服务器推送的另一方面是服务器现在将多个资源同时发送回客户端,从而导致出口带宽利用率提高。在支持Server Push的服务器上发起Multiplexed Asymmetric攻击时,可能会出现特别复杂的情况。在这种攻击中,服务器被迫为每个攻击者同时处理n个请求(其中n是多路复用的程度),这导致服务器利用率的大幅提高。另一方面,服务器现在必须发送n个请求的响应,每个请求都具有多个关联的内联资源(例如c)。因此,与运行HTTP/1.1的服务器相比,出口带宽被放大了n*c倍。这可能导致泛洪攻击,从而影响服务器出口带宽和附近的路由器,并在网络层也引起DDoS攻击。

 

0x03 Attack Methodology

生成非对称工作负载攻击需要一个准备阶段,在该阶段中,攻击者必须监视Web应用程序以选择要在其上发起攻击的URL。由于增加了复杂性,因此现有DDoS攻击生成工具均无法生成非对称攻击。生成非对称工作负载攻击的整个过程可以概括为四个步骤,如下图所示。


A. Web应用程序扫描

生成非对称工作负载攻击的第一步是识别Web应用程序的结构。更具体地说,攻击者需要知道Web应用程序中的不同URL,以标识最适合的URL。为了标识Web应用程序的结构,可以使用Web扫描器来搜寻目标Web应用程序并标识不同的URL。


B.确定高工作量状态

下一步是确定每个请求的资源需求。请求的平均响应时间可以用作其工作量的近似值。从Web应用程序中的所有请求URL到其响应时间(代表其工作量)的映射构成了该Web应用程序的Request工作负载概况(Request Workload Profile)。下图显示了为示例Web应用程序获得的Request工作负载概况。

考虑一个Web应用程序,该应用程序旨在处理m个不同类型的基本请求R={r1,r2,…,rm}和n个不同的内联请求S={s1,s2,…,sn},这样N=m+n。这些请求引入了不同的计算级别,这些计算级别可以近似于k个不同类别的工作负载,W={w1,w2,…,wk},w1


C.攻击向量选择

一旦为Web应用程序生成了Request Workload Profile,攻击者就会获得有关Web应用程序的信息,该信息可用于发起攻击。攻击者首先选择要发起的攻击类型,然后从Web应用程序的工作负载概况中选择适当的攻击请求。在这项工作中使用了两种类型的攻击。

•非对称攻击:非对称工作负载攻击利用Web应用程序的Request工作负载概况,并选择Web应用程序中计算量最大的请求。换句话说,请求r‘∈{r|r∈R and f(r)= wk}。

•隐蔽非对称攻击:不对称工作负载攻击的一个更隐蔽的变化是从前l个工作负载类别中选择请求,而不仅仅是前一个类别。在这种情况下,请求r’∈{r|r∈R and f(r)∈{wk,wk-1,…,wk-l+1}}。可以注意到,当l = k时,攻击的这种变化分解为随机HTTP泛洪。

确定请求类型后,必须将请求传递到目标Web应用程序。根据请求的传递方式,有两个攻击媒介。

1)简单非对称攻击:简单的非对称攻击向量可能会使用受感染的系统建立与目标Web应用程序的ε个TCP连接,并通过这些连接发送攻击请求。

HTTP/1.1 Web服务器(或没有复用的HTTP/2服务器)在任何时刻t进行单个连接而产生的工作负载为:

其中rt是在时间t处理的请求。如果假设攻击者可以使用ε个攻击客户端,则每个时刻提交给服务器的总工作负载为:

其中0 <α≤1是同步效率。如果可以完全同步所有攻击客户端以完全同时启动请求,则α= 1并且:

但是,由于同步和网络延迟问题,所有攻击的客户端将无法在同一时间发起攻击,从而导致攻击效率略有下降。对于任何给定的α值,攻击者始终会尝试减少攻击客户端的数量ε,以便发起攻击所需的资源更少。这可以通过在Web应用程序中发送计算量最大的请求来最大化f(rt)来实现。这对应于使用非对称工作负载请求来发起攻击,在这种情况下,工作负载变为:

2)多路非对称攻击:HTTP/2中的多路攻击使攻击者可以在同一TCP连接中发送多个请求,这意味着这些请求将在大约同一时间到达并由服务器执行。在两种情况下研究这种攻击的影响-服务器关闭和服务器打开。

案例I:服务器推送关闭时的多路非对称攻击,在这种攻击中,每个攻击的客户端都建立一个TCP连接,并将ω非对称工作负载请求同时发送到服务器。因此,可以使一个攻击性客户端传递到服务器的工作负载变为:

其中ω是攻击者采用的多路复用程度,而Ω是在服务器上配置的最大多路复用程度。如果攻击者可以利用ε个攻击客户端,则服务器上的总工作负载为:

案例II:服务器推送打开时的多路非对称攻击,启用服务器推送时,服务器不仅处理它收到的请求,而且还必须发送关联的内联请求。假设每个网页平均内嵌x个内联请求,在这种情况下,单个攻击客户端传递给服务器的工作负载为:

假设内联请求在计算复杂度方面没有基础请求通常具有的广泛差异,则与单个HTTP/2请求相关的工作量可以减少为:

当启用多路复用和服务器推送时,使用ε攻击客户端,传递给服务器的总工作负载为:

为了耗尽服务器资源,使用多路复用非对称攻击似乎是最好的选择,因为它会将攻击能力放大了ω倍,这是多路复用的放大程度。显然,攻击者可以通过选择非对称攻击工作负载请求并利用服务器提供的完整多路复用优势来获得最大收益。在这种情况下,传递到Web应用程序的工作负载将变为:

如果还启用了服务器推送,则工作负载会进一步增加:


D.发动攻击

与非对称攻击相关的第四步也是最后一步是攻击本身的实际发动,这可以通过任何支持HTTP/2的HTTP请求生成工具来完成。

 

0x04 Implementation Details



A.服务器配置

在测试设置中,受害者是具有Intel Xeon 3.70 Ghz CPU,运行Ubuntu 18.04的64 GB RAM的系统上的Apache 2.4 Web服务器。在三个电子商务Web应用程序(Opencart,Magento和Prestashop)上测试了提出的攻击模型。由于目标是比较HTTP/1.1和HTTP/2的性能,因此将Web服务器配置为支持两种版本的协议。另外,由于HTTP/2的现有实现均不支持该协议的未加密版本,因此将HTTP/2与HTTP/1.1和SSL(HTTPS)的性能进行了比较。 Apache配置为使用Worker MPM模型,并配置为最多接受5000个同时请求。


B.攻击工具

编写了Linux Shell脚本来爬网Web应用程序并标识不同的URL或请求。然后,脚本将请求发送到每个URL,并记录平均响应时间。对有关不同URL的响应时间的详细信息进行了排序,并获得了非对称工作负载和隐蔽非对称工作负载攻击的目标URL。这些URL被传递到攻击脚本,以生成请求并将请求发送到目标Web服务器。在可用的请求生成工具中,nghttp2提供了最全面的HTTP/功能介绍,因此已在攻击脚本中使用了它。

 

0x05 Results and Discussion



A.简单非对称DDoS攻击下HTTP/1.1和HTTP/2的性能比较

上图显示了HTTP/2 Web服务器的性能与运行HTTP/1.1的Web服务器的性能比较。上面第一张图a-c显示了这两种协议在隐蔽非对称工作负载期间的性能,第二张图a-c显示了在非对称工作负载下随着攻击请求率的增加而提高的性能。

该实验的结果表明,在受到非对称工作负载攻击时,HTTP/2的性能比使用SSL的HTTP/1.1更好。 HTTP/2的性能可与没有SSL的HTTP/1.1媲美,甚至略胜于它。这种改进的性能可归因于HTTP/2中的大量性能开销,例如二进制帧和标头压缩。该结果清楚地表明,尽管对HTTP/2提出了批评,但实际上在相同的负载下它的性能要优于其前身。


B.在多路非对称攻击下分析HTTP/2服务器的性能

即使简单的非对称攻击证明可以有效地关闭HTTP/2服务器,将多个高工作负载请求复用到单个TCP连接中的能力对于HTTP/2服务器而言也可能是更大的挑战。在本节中,分析了上述多路非对称攻击对HTTP/2服务器的影响。与非对称工作负载攻击类似,可以通过从前k个高工作负载请求中随机选择来采用更隐蔽的攻击版本。

上图显示了在不同程度的多路复用和攻击的客户端数量下,目标服务器的CPU使用率如何变化。该实验的结果表明,将请求多路复用到单个TCP连接中的能力构成了严重的安全威胁,使攻击者可以毫不费力地提供更多非对称攻击有效载荷。在这种情况下,当多路复用度为100时,仅使用四个攻击客户端即可关闭目标系统Magento,CPU使用率达到80%。可以看出,攻击向量的乘积效应不是线性的。这是由于同步效率因子(α)的影响,以及同步如此大量攻击请求的困难。如果可以确保适当的同步,则乘法效果将线性增加,并且攻击将更具破坏性。

上图展示了使用nghttp2工具(启用或不启用多路复用)执行的HTTP/2非对称DDoS攻击之间的比较。此处将复用度设置为100。当攻击的客户端数量较少时,复用的乘积效应清晰可见。随着客户数量的增加,乘积效应由于同步效率因子(α)的影响而降低。通过适当的同步,相乘效果将接近ω。但是,可以观察到,与简单的非对称攻击相比,多路复用的非对称攻击可以通过较少的资源来提高CPU利用率。


C.在多路非对称DDoS攻击下分析服务器推送对HTTP/2服务器的影响

上图描绘了打开和关闭服务器推送时在多路非对称攻击(ω= 100)期间目标服务器的CPU使用率的变化。结果表明,Server Push可以提高服务器的CPU利用率,但增长幅度不大。根据公式,仅由于服务器推送而导致的每个请求的CPU使用率峰值为:

μs是内联请求的平均工作负载。由于大多数内联请求都是简单的GET请求,并且不会执行太多服务器计算,因此此结果是可以理解的。

下图描述了在多路非对称攻击(ω= 100)期间,出口网络带宽如何随攻击客户端的数量而变化。由于在两种情况下对应于网络带宽的值差异很大,选择使用半对数图表示结果,网络带宽以对数刻度为底数2。Opencart的实际网络带宽值为在下表中给出。

上图和上表均清楚地表明,在服务器上启用服务器推送后,网络带宽将大大增加。出口流量的激增可能会阻塞与服务器相邻的路由器和其他网络设备。大多数网络层DDoS防御都试图检测入口流量的增加,并且通常不对从服务器流出的流量进行任何检查。即使在启用出口筛选的情况下,也不太可能阻止攻击,因为流量正在流向具有合法IP地址的客户端。

尽管当前支持服务器推送的服务器比例很小,但是人们越来越需要努力理解实现和使用服务器推送的最佳方法。使用服务器推送的服务器数量也在稳定增长。诸如此类的利用多路复用和服务器推送的攻击在不久的将来可能会变得司空见惯,因此有必要开发针对它们的主动防御机制。

 

0x06 Conclusion

分布式拒绝服务(DDoS)攻击是一类可能永远不会消失的攻击。在过去的几年中,使用HTTP请求发起DDoS攻击的人数有所增加。最近还观察到非对称工作负载攻击,该攻击使用计算量大的请求来更快地关闭服务器。由于HTTP/2强制服务器执行更多计算,并使它更容易受到DDoS攻击,因此受到了批评。同样令人担忧的是,由于提高了HTTP/2的性能而引入的诸如Multiplexing和Server Push之类的功能可能会被滥用来发起攻击。在这项工作中,在服务器CPU利用率方面探索了HTTP/2服务器与其前身相比的性能。已经表明,对于相同数量和类型的请求,由于协议的修改,HTTP/2服务器实际上比运行HTTP/1.1的服务器性能更好。但是,尽管性能有所提高,但HTTP/2服务器仍容易受到称为多路复用非对称攻击的新攻击媒介的攻击。已经证明,这种攻击可以导致一台服务器的攻击客户端数量减少到四个。还证明了,如果在HTTP/2服务器上启用了服务器推送,则使用多路复用的非对称攻击也可能导致网络层的出口泛洪攻击。这可能导致应用程序层攻击和网络层攻击与单个攻击媒介的组合。通过演示这些攻击的可行性,试图揭示一个事实,即请求流的协议遵从性并不意味着该请求流不受攻击。为了完全保护系统不受DDoS攻击,有必要进行行为分析,其中要考虑到协议功能的预期用途以及合法用户如何使用该功能。在此方向上的未来工作应集中于对预期的用户行为进行建模,并开发异常检测技术来检测这些复杂的攻击。


推荐阅读
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • 本文探讨了服务器系统架构的性能评估方法,包括性能评估的目的、步骤以及如何选择合适的度量标准。文章还介绍了几种常用的基准测试程序及其应用,并详细说明了Web服务器性能评估的关键指标与测试方法。 ... [详细]
  • WebBenchmark:强大的Web API性能测试工具
    本文介绍了一款名为WebBenchmark的Web API性能测试工具,该工具不仅支持HTTP和HTTPS服务的测试,还提供了丰富的功能来帮助开发者进行高效的性能评估。 ... [详细]
  • 服务器虚拟化存储设计,完美规划储存与资源,部署高性能虚拟化桌面
    规划部署虚拟桌面环境前,必须先估算目前所使用实体桌面环境的工作负载与IOPS性能,并慎选储存设备。唯有谨慎估算贴近实际的IOPS性能,才能 ... [详细]
  • 本文详细介绍如何安装和配置DedeCMS的移动端站点,包括新版本安装、老版本升级、模板适配以及必要的代码修改,以确保移动站点的正常运行。 ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • JavaScript 跨域解决方案详解
    本文详细介绍了JavaScript在不同域之间进行数据传输或通信的技术,包括使用JSONP、修改document.domain、利用window.name以及HTML5的postMessage方法等跨域解决方案。 ... [详细]
  • Fiddler 安装与配置指南
    本文详细介绍了Fiddler的安装步骤及配置方法,旨在帮助用户顺利抓取用户Token。文章还涵盖了一些常见问题的解决方案,以确保安装过程顺利。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • 本文探讨了在Windows系统中运行Apache服务器时频繁出现崩溃的问题,并提供了多种可能的解决方案和建议。错误日志显示多个子进程因达到最大请求限制而退出。 ... [详细]
  • PHP面试题精选及答案解析
    本文精选了新浪PHP笔试题及最新的PHP面试题,并提供了详细的答案解析,帮助求职者更好地准备PHP相关的面试。 ... [详细]
  • 深入解析:存储技术的演变与发展
    本文探讨了从单机文件系统到分布式文件系统的存储技术发展过程,详细解释了各种存储模型及其特点。 ... [详细]
  • Flutter 核心技术与混合开发模式深入解析
    本文深入探讨了 Flutter 的核心技术,特别是其混合开发模式,包括统一管理模式和三端分离模式,以及混合栈原理。通过对比不同模式的优缺点,帮助开发者选择最适合项目的混合开发策略。 ... [详细]
author-avatar
行者师兄2502861743
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有