首页
关于
友链
推荐
肥啾解析
百度一下
肥啾GPT
Search
1
宝塔面板登录 phpMyAdmin 提示服务器和客户端上指示的HTTPS之间不匹配
269 阅读
2
Customer complaints evolve with in-car tech
188 阅读
3
JavaScript解析
153 阅读
4
内连接,左连接,右连接作用及区别
111 阅读
5
所谓关系
109 阅读
默认分类
网游架设
手机游戏
python
PHP
Mysql
VBA
C++
JAVASCRIPT
javascript基础
Oracle
生产管理
计划控制
ERP系统开发
APS排产
MES研究
考勤系统
CPA
财管
实务
经济法
战略
审计
税法
藏书架
古典名著
世界名著
编程秘籍
攻防渗透
经管书籍
大佬传经
风雅读物
考试相关
心情格言
拾玉良言
外文报刊
外刊随选
Facebook
Twitter
China Daily
软考
登录
Search
标签搜索
期刊读物
古文
何瑜明
累计撰写
160
篇文章
累计收到
154
条评论
首页
栏目
默认分类
网游架设
手机游戏
python
PHP
Mysql
VBA
C++
JAVASCRIPT
javascript基础
Oracle
生产管理
计划控制
ERP系统开发
APS排产
MES研究
考勤系统
CPA
财管
实务
经济法
战略
审计
税法
藏书架
古典名著
世界名著
编程秘籍
攻防渗透
经管书籍
大佬传经
风雅读物
考试相关
心情格言
拾玉良言
外文报刊
外刊随选
Facebook
Twitter
China Daily
软考
页面
关于
友链
推荐
肥啾解析
百度一下
肥啾GPT
搜索到
160
篇与
的结果
2025-10-24
nodejs部署方法
1.创建package.json文件{ "name": "my-node-project", "version": "1.0.0", "main": "simple.js", "scripts": { "start": "node simple.js" }, "dependencies": {} }2.放开对应端口3.路由设置(可选)4.访问
2025年10月24日
5 阅读
0 评论
0 点赞
2025-10-16
XSS攻击方式
XSS(跨站脚本攻击)是一种通过注入恶意脚本代码到网页中,利用浏览器解析执行实施攻击的Web安全漏洞1。其核心原理是利用Web应用对用户输入数据过滤不足,将恶意脚本输出到客户端浏览器执行2。攻击原理详解漏洞成因未对用户输入进行充分验证、过滤及HTML实体编码恶意脚本通过URL参数、表单提交等方式直接输出至客户端浏览器浏览器无法区分正常内容与恶意脚本,直接执行注入的代码技术实现攻击者通常注入JavaScript代码(也可用VBScript、Flash等)通过script标签、事件处理器(如onload)或DOM操作触发执行类型 特点 危害场景 反射型XSS 通过恶意链接触发,非持久化 钓鱼链接、盗取Cookie 存储型XSS 代码存入数据库,持久化攻击 论坛留言、用户资料页DOM型XSS 纯前端漏洞,不经过服务器 动态修改DOM结构的页面存储型XSS的特殊性攻击者提交的恶意代码会被保存到服务器数据库(如论坛评论),当其他用户访问时,服务器会被动返回这些含恶意脚本的正常页面,形成"服务器→浏览器→攻击"的链条。反射型/DOM型XSS这两种类型完全在客户端完成攻击链,服务器仅作为非故意的中转者(反射型XSS中服务器反射了恶意参数,但未存储)。关键区别服务器文件本身未被篡改(对比:SQL注入会直接修改数据库)攻击依赖的是服务器对用户输入的不当处理和浏览器的脚本执行机制举例说明:假设攻击者在论坛发帖包含script恶意代码script:① 服务器存储了这段文本(非代码)② 当其他用户访问时,服务器返回包含该文本的HTML页面③ 用户浏览器误将文本当作可执行脚本解析防御本质是让服务器告诉浏览器:"这是要显示的文本,不是可执行的代码"(通过htmlspecialchars等编码实现)
2025年10月16日
2 阅读
0 评论
0 点赞
2025-10-11
SQL中通配符%和*的区别
标准SQL中的通配符:%是标准SQL中LIKE操作符使用的通配符,表示匹配任意数量的字符(包括零个字符)例如:LIKE 'abc%'匹配以"abc"开头的所有字符串特定系统中的通配符:*是某些特定系统(如Windows命令行、Unix shell)中使用的通配符在一些数据库工具(如MySQL命令行客户端)的简单模式匹配中也支持*主要区别:在标准SQL查询中必须使用%*通常只在特定工具或非标准扩展中使用例如在MySQL中,*可用于命令行简单查询,但在SQL语句中仍需用%何时用哪个:编写SQL语句时:总是用%使用数据库工具的非SQL模式匹配时:可能用*(取决于工具)在正则表达式中:两者都不是通配符,有完全不同的含义当编写标准SQL时,LIKE操作符总是使用%作为通配符。
2025年10月11日
2 阅读
0 评论
0 点赞
2025-09-26
include重复匹配解决办法
for (const exhaust of CONFIG_VALUES['护顶架']) { if (allText.includes(exhaust)) { values['护顶架'] = exhaust; //break; } }此代码会检测CONFIG_VALUES['护顶架']所有包含exhaust元素,当exhaust匹配到多个元素时导致类似前后蓝光灯,后蓝光灯的结果同时出现const matchedValues = []; let remainingText = allText; // 保存剩余未匹配文本 for (const exhaust of CONFIG_VALUES['护顶架']) { const matchIndex = remainingText.indexOf(exhaust); if (matchIndex !== -1) { matchedValues.push(exhaust); // 直接移除已匹配部分(保留前后文) remainingText = remainingText.substring(0, matchIndex) + remainingText.substring(matchIndex + exhaust.length); } } values['护顶架'] = matchedValues.join(', '); 这段代码实现了一个文本匹配和标记功能,主要用于从allText中提取特定配置值。以下是分步解释: 初始化变量: matchedValues数组用于存储匹配到的结果 remainingText初始化为原始文本allText的副本 循环匹配过程: 遍历CONFIG_VALUES['护顶架']中的每个配置项 使用indexOf查找配置项在当前剩余文本中的位置 如果找到匹配项,执行两个操作: a) 将匹配项加入结果数组 b) 从剩余文本中物理移除该匹配项 结果处理: 将匹配结果用逗号连接后存入values['护顶架'] 原始allText不会被修改(除非显式赋值) 特点说明: 采用字符串切割方式确保每个配置项只匹配一次 保持前后文连续性(移除时保留前后部分) 结果输出格式为逗号分隔的字符串 适合处理需要精确匹配且避免重复的场景 remainingText.substring(0, matchIndex) 截取从字符串开头到匹配位置之前的内容(保留匹配项前面的部分) remainingText.substring(matchIndex + exhaust.length) 截取从匹配项结束位置到字符串末尾的内容(保留匹配项后面的部分) 用+将前后两部分拼接 相当于在原字符串中"挖掉"匹配到的部分 举例说明: 假设原文本是"ABC护顶架123护顶架XYZ",匹配"护顶架"时: 第一次匹配:保留"ABC" + "123护顶架XYZ" → 新字符串为"ABC123护顶架XYZ" 第二次匹配时就不会重复匹配第一个"护顶架"了 这种处理方式比用特殊字符标记更彻底,直接从物理上移除已匹配内容。 用更直观的方式解释substring()的工作原理: 字符串切割原理: 可以把字符串想象成一列火车车厢,每个字符就是一个车厢 substring(start,end)就是指定要保留哪几节车厢 具体到这段代码: 假设原字符串是:"ABC护顶架123护顶架XYZ"(长度15) 匹配到"护顶架"(长度3)在位置3 matchIndex=3, exhaust.length=3 切割过程: substring(0,3) → "ABC"(保留匹配项前面的车厢) substring(3+3) → "123护顶架XYZ"(跳过匹配项,保留后面的车厢) 拼接结果:"ABC" + "123护顶架XYZ" = "ABC123护顶架XYZ" 关键特性: 不修改原字符串(生成新字符串) 第二个参数可省略表示截取到末尾 位置计算从0开始(第一个字符是位置0) 基础概念: substring(start) 表示从start位置开始截取到字符串末尾 substring(start, end) 表示截取start到end-1位置的子串 具体到您的例子: 原字符串:"ABC护顶架123护顶架XYZ" 第一次匹配"护顶架"在位置3(长度3) matchIndex + exhaust.length = 3 + 3 = 6 所以substring(6)就是从第6个字符开始截取 字符位置可视化: A(0) B(1) C(2) 护(3) 顶(4) 架(5) 1(6) 2(7) 3(8) 护(9) 顶(10) 架(11) X(12) Y(13) Z(14) 位置6正好是第一个"护顶架"后面的"1" 为什么是3+3: 第一个3是匹配项的起始位置("护"字的位置) 第二个3是"护顶架"的长度(3个字符) 相加得到的就是匹配项结束后的第一个位置 实际效果: 相当于在原字符串中"跳过"了已匹配的3个字符 从匹配项结束后的位置继续处理剩余字符串 这种写法是字符串处理的常用模式,确保: 已处理的内容不会重复处理 保持字符串处理的连续性 避免使用特殊字符标记带来的副作用matchIndex !== -1 这个条件是用来判断字符串是否包含目标子串的,具体原理如下: indexOf()方法的行为: 当子串存在时,返回该子串首次出现的索引位置(0或正整数) 当子串不存在时,固定返回-1 为什么用-1判断: 这是JavaScript语言的设计规范 -1作为"未找到"的专用标识值(不会与有效索引冲突,因为有效索引从0开始) 实际意义: matchIndex !== -1 表示"找到了匹配项" matchIndex === -1 表示"未找到匹配项"
2025年09月26日
1 阅读
0 评论
0 点赞
2025-09-16
navicat破解方法记录
客户端 Navicat16和17补丁.rar 正常安装完成后,不要打开navicat,先将网盘下载的Navicat16和17补丁压缩包解压,解压之后你会看到winmm.dll文件,将它移动到你刚刚安装navicat17的目录下,操作完成后,打开navicat,如果没有提示试用,则说明激活成功,可永久使用
2025年09月16日
4 阅读
0 评论
0 点赞
1
...
4
5
6
...
32
0:00