-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.html
351 lines (298 loc) · 50.3 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
<!DOCTYPE html><html lang="zh-CN" data-theme="light"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0,viewport-fit=cover"><title>一直小白 - Dir’s Blog</title><meta name="author" content="XiaoPu"><meta name="copyright" content="XiaoPu"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#ffffff"><meta name="description" content="做自己能做的,做好自己能做好的!">
<meta property="og:type" content="website">
<meta property="og:title" content="一直小白">
<meta property="og:url" content="https://www.xpctf.cn/index.html">
<meta property="og:site_name" content="一直小白">
<meta property="og:description" content="做自己能做的,做好自己能做好的!">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://www.xpctf.cn/img/avatar.png">
<meta property="article:author" content="XiaoPu">
<meta property="article:tag" content="Dir,CTFtools,Exploit,GetShell,PHP,扫描器,黑客,网络安全,信息安全,渗透测试,内网渗透,提权工具,Python,深度学习,PyTorch">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://www.xpctf.cn/img/avatar.png"><link rel="shortcut icon" href="/img/favicon.ico"><link rel="canonical" href="https://www.xpctf.cn/index.html"><link rel="preconnect" href="//cdn.jsdelivr.net"/><link rel="preconnect" href="//busuanzi.ibruce.info"/><link rel="stylesheet" href="/css/index.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/css/all.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox/fancybox.min.css" media="print" onload="this.media='all'"><script>const GLOBAL_CONFIG = {
root: '/',
algolia: undefined,
localSearch: {"path":"/search.xml","preload":false,"top_n_per_article":1,"unescape":false,"languages":{"hits_empty":"找不到您查询的内容:${query}","hits_stats":"共找到 ${hits} 篇文章"}},
translate: {"defaultEncoding":2,"translateDelay":0,"msgToTraditionalChinese":"繁","msgToSimplifiedChinese":"简"},
noticeOutdate: undefined,
highlight: {"plugin":"highlighjs","highlightCopy":true,"highlightLang":true,"highlightHeightLimit":false},
copy: {
success: '复制成功',
error: '复制错误',
noSupport: '浏览器不支持'
},
relativeDate: {
homepage: false,
post: false
},
runtime: '天',
dateSuffix: {
just: '刚刚',
min: '分钟前',
hour: '小时前',
day: '天前',
month: '个月前'
},
copyright: undefined,
lightbox: 'fancybox',
Snackbar: undefined,
source: {
justifiedGallery: {
js: 'https://cdn.jsdelivr.net/npm/flickr-justified-gallery/dist/fjGallery.min.js',
css: 'https://cdn.jsdelivr.net/npm/flickr-justified-gallery/dist/fjGallery.min.css'
}
},
isPhotoFigcaption: false,
islazyload: false,
isAnchor: false,
percent: {
toc: true,
rightside: false,
},
autoDarkmode: false
}</script><script id="config-diff">var GLOBAL_CONFIG_SITE = {
title: '一直小白',
isPost: false,
isHome: true,
isHighlightShrink: false,
isToc: false,
postUpdate: '2023-09-17 00:14:15'
}</script><noscript><style type="text/css">
#nav {
opacity: 1
}
.justified-gallery img {
opacity: 1
}
#recent-posts time,
#post-meta time {
display: inline !important
}
</style></noscript><script>(win=>{
win.saveToLocal = {
set: function setWithExpiry(key, value, ttl) {
if (ttl === 0) return
const now = new Date()
const expiryDay = ttl * 86400000
const item = {
value: value,
expiry: now.getTime() + expiryDay,
}
localStorage.setItem(key, JSON.stringify(item))
},
get: function getWithExpiry(key) {
const itemStr = localStorage.getItem(key)
if (!itemStr) {
return undefined
}
const item = JSON.parse(itemStr)
const now = new Date()
if (now.getTime() > item.expiry) {
localStorage.removeItem(key)
return undefined
}
return item.value
}
}
win.getScript = url => new Promise((resolve, reject) => {
const script = document.createElement('script')
script.src = url
script.async = true
script.onerror = reject
script.onload = script.onreadystatechange = function() {
const loadState = this.readyState
if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
script.onload = script.onreadystatechange = null
resolve()
}
document.head.appendChild(script)
})
win.getCSS = (url,id = false) => new Promise((resolve, reject) => {
const link = document.createElement('link')
link.rel = 'stylesheet'
link.href = url
if (id) link.id = id
link.onerror = reject
link.onload = link.onreadystatechange = function() {
const loadState = this.readyState
if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
link.onload = link.onreadystatechange = null
resolve()
}
document.head.appendChild(link)
})
win.activateDarkMode = function () {
document.documentElement.setAttribute('data-theme', 'dark')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#0d0d0d')
}
}
win.activateLightMode = function () {
document.documentElement.setAttribute('data-theme', 'light')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#ffffff')
}
}
const t = saveToLocal.get('theme')
if (t === 'dark') activateDarkMode()
else if (t === 'light') activateLightMode()
const asideStatus = saveToLocal.get('aside-status')
if (asideStatus !== undefined) {
if (asideStatus === 'hide') {
document.documentElement.classList.add('hide-aside')
} else {
document.documentElement.classList.remove('hide-aside')
}
}
const detectApple = () => {
if(/iPad|iPhone|iPod|Macintosh/.test(navigator.userAgent)){
document.documentElement.classList.add('apple')
}
}
detectApple()
})(window)</script><meta name="generator" content="Hexo 6.3.0"><link rel="alternate" href="/atom.xml" title="一直小白" type="application/atom+xml">
</head><body><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="avatar-img is-center"><img src="/img/avatar.png" onerror="onerror=null;src='/img/friend_404.gif'" alt="avatar"/></div><div class="sidebar-site-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">51</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">38</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">11</div></a></div><hr class="custom-hr"/><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fa fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fa fa-archive"></i><span> 归档</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fa fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fa fa-folder-open"></i><span> 分类</span></a></div><div class="menus_item"><a class="site-page" href="/link/"><i class="fa-fw fa fa-link"></i><span> 友链</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fa fa-heart"></i><span> 关于</span></a></div></div></div></div><div class="page" id="body-wrap"><header class="full_page" id="page-header" style="background-image: url('/img/index_img.jpg')"><nav id="nav"><span id="blog-info"><a href="/" title="一直小白"><span class="site-name">一直小白</span></a></span><div id="menus"><div id="search-button"><a class="site-page social-icon search" href="javascript:void(0);"><i class="fas fa-search fa-fw"></i><span> 搜索</span></a></div><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fa fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fa fa-archive"></i><span> 归档</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fa fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fa fa-folder-open"></i><span> 分类</span></a></div><div class="menus_item"><a class="site-page" href="/link/"><i class="fa-fw fa fa-link"></i><span> 友链</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fa fa-heart"></i><span> 关于</span></a></div></div><div id="toggle-menu"><a class="site-page" href="javascript:void(0);"><i class="fas fa-bars fa-fw"></i></a></div></div></nav><div id="site-info"><h1 id="site-title">一直小白</h1><div id="site-subtitle"><span id="subtitle"></span></div><div id="site_social_icons"><a class="social-icon" href="https://wpa.qq.com/msgrd?v=3&uin=23223856&site=qq&menu=yes" target="_blank" title="QQ"><i class="fab fa-qq"></i></a><a class="social-icon" href="https://wpa.qq.com/msgrd?v=3&uin=23223856&site=qq&menu=yes" target="_blank" title="WeChat"><i class="fab fa-weixin"></i></a><a class="social-icon" href="mailto:[email protected]" target="_blank" title="Email"><i class="fa fa-envelope"></i></a><a class="social-icon" href="/atom.xml" target="_blank" title="RSS"><i class="fa fa-rss"></i></a></div></div><div id="scroll-down"><i class="fas fa-angle-down scroll-down-effects"></i></div></header><main class="layout" id="content-inner"><div class="recent-posts" id="recent-posts"><div class="recent-post-item"><div class="post_cover left"><a href="/posts/ca3c/" title="【原创】掌上高考专业分数线js逆向"><img class="post-bg" src="https://img.xpctf.cn/img/202204092311468.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="【原创】掌上高考专业分数线js逆向"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/ca3c/" title="【原创】掌上高考专业分数线js逆向">【原创】掌上高考专业分数线js逆向</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-04-09T03:17:59.000Z" title="发表于 2022-04-09 11:17:59">2022-04-09</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/Python/">Python</a><i class="fas fa-angle-right article-meta-link"></i><a class="article-meta__categories" href="/categories/Python/%E7%88%AC%E8%99%AB/">爬虫</a></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-comments"></i><a href="/posts/ca3c/#post-comment"><span class="valine-comment-count" data-xid="/posts/ca3c/"><i class="fa-solid fa-spinner fa-spin"></i></span></a><span class="article-meta-label"> 条评论</span></span></div><div class="content">需求分析:爬取掌上高考每一年的专业录取分数
声明:本文章只用于学习研究,禁止用于但不限于商业用途、批量爬取
抓包
因为换页要求登录,所以我们打开开发者工具以后点下一年就会重新发数据包
分析后发现这个数据包就是请求的数据,返回数据和请求包都有加密,请求包里有个signsafe参数
分析请求包
ctrl+shift+f全局搜索signsafe,发现有两个js文件包含signsafe
先点开最后一个看,格式化以后继续搜索signsafe,发现uri是sendsmscode的,继续看看另外一个包(猜测:算法应该一样的,直接扣这个应该也可以)
发现只要带有signsafe的都是p赋值的,直接在p赋值的地方打上断点,然后继续发送请求包分析
认真看一下js代码,发现是url进行了HmacSHA1加密,密钥是常量D23ABC@#56,直接使用python改写
signsafe加密代码
1234567891011import base64import hmacfrom hashlib import sha1def hash_hmac(key, code): hmac_code = hm ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/posts/9650/" title="【原创】某查查协议头参数272a7bfd6c84f9233ae1逆向加密代码"><img class="post-bg" src="https://img.xpctf.cn/img/202110291810672.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="【原创】某查查协议头参数272a7bfd6c84f9233ae1逆向加密代码"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/9650/" title="【原创】某查查协议头参数272a7bfd6c84f9233ae1逆向加密代码">【原创】某查查协议头参数272a7bfd6c84f9233ae1逆向加密代码</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2021-10-29T10:09:01.000Z" title="发表于 2021-10-29 18:09:01">2021-10-29</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/Python/">Python</a><i class="fas fa-angle-right article-meta-link"></i><a class="article-meta__categories" href="/categories/Python/%E7%88%AC%E8%99%AB/">爬虫</a></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-comments"></i><a href="/posts/9650/#post-comment"><span class="valine-comment-count" data-xid="/posts/9650/"><i class="fa-solid fa-spinner fa-spin"></i></span></a><span class="article-meta-label"> 条评论</span></span></div><div class="content">环境:node.js(V8)
逆向过程略,代码如下:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319 ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/posts/17ca/" title="【原创】某易云音乐params和encSecKey参数逆向"><img class="post-bg" src="https://img.xpctf.cn/img/202110260343574.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="【原创】某易云音乐params和encSecKey参数逆向"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/17ca/" title="【原创】某易云音乐params和encSecKey参数逆向">【原创】某易云音乐params和encSecKey参数逆向</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2021-10-25T18:32:24.000Z" title="发表于 2021-10-26 02:32:24">2021-10-26</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/Python/">Python</a><i class="fas fa-angle-right article-meta-link"></i><a class="article-meta__categories" href="/categories/Python/%E7%88%AC%E8%99%AB/">爬虫</a></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-comments"></i><a href="/posts/17ca/#post-comment"><span class="valine-comment-count" data-xid="/posts/17ca/"><i class="fa-solid fa-spinner fa-spin"></i></span></a><span class="article-meta-label"> 条评论</span></span></div><div class="content">环境:
Python 3.8.5node v16.11.1npm 8.0.0Google Chrome 95.0.4638.54PyCharm 2021.2.2
本示例以评论为例,其他接口一样可以使用
使用了ajax技术请求,所以可以使用跟栈的方式找到加密点,但使用全局搜索的方式更快
点进去下断点,确定是我们加密参数,因为params和encSecKey都来自bUM9D,所以我们在bUM9D的位置下断点
点击下一页断点确实断住了,而且是我们要的数据
看到了一个asrsea方法,但这个方法不熟悉,应该是js给加到window了,先看看参数
通过控制台输出,i8a可能就是要加密的数据;
bsB3x([“流泪”, “强”])、bsB3x(WX6R.md)、bsB3x([“爱心”, “女孩”, “惊恐”, “大笑”])这三个参数应该是固定的,使用了混淆,如果不是固定的我们取js代码就行
现在来看看asrsea函数,(我再写文章的时候才搜的,原本想水一下,结果。。。。没窥屏!!!)
继续,继续,继续
跟进去window.asrsea函数,可以在控制台直接输入window.asrs ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/posts/c34f/" title="Node.Js运行AES RSA加密缺少window的解决方法"><img class="post-bg" src="https://img.xpctf.cn/img/202109151737709.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Node.Js运行AES RSA加密缺少window的解决方法"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/c34f/" title="Node.Js运行AES RSA加密缺少window的解决方法">Node.Js运行AES RSA加密缺少window的解决方法</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2021-09-15T09:29:15.000Z" title="发表于 2021-09-15 17:29:15">2021-09-15</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/Python/">Python</a><i class="fas fa-angle-right article-meta-link"></i><a class="article-meta__categories" href="/categories/Python/%E7%88%AC%E8%99%AB/">爬虫</a></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-comments"></i><a href="/posts/c34f/#post-comment"><span class="valine-comment-count" data-xid="/posts/c34f/"><i class="fa-solid fa-spinner fa-spin"></i></span></a><span class="article-meta-label"> 条评论</span></span></div><div class="content">Js逆向中,会遇到很多环境问题,比如navigator、document、window这些只有浏览器才有的,然后代码扣下来浏览器可以运行,在一些调试工具也可以运行,但是nodejs就是运行不了。
问过很多大佬, 他们说缺什么补什么,document和navigator就给一个空对象,window就给this,这样很多调试工具都可以用了,但是nodejs就是运行不了,报上面的错误。
在我不经意中居然解决了该问题,测试过nodejs和execjs都可以执行,就是window使用global变量
但是在js调试工具中报错:
总结如下:在调试工具中,window=this,在nodejs中,window=global。
</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/posts/c480/" title="电信光猫TEWA-708G超级管理密码破解"><img class="post-bg" src="https://img.xpctf.cn/img/202109021456764.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="电信光猫TEWA-708G超级管理密码破解"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/c480/" title="电信光猫TEWA-708G超级管理密码破解">电信光猫TEWA-708G超级管理密码破解</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2021-09-02T06:52:30.000Z" title="发表于 2021-09-02 14:52:30">2021-09-02</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%88%86%E4%BA%AB/">分享</a></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-comments"></i><a href="/posts/c480/#post-comment"><span class="valine-comment-count" data-xid="/posts/c480/"><i class="fa-solid fa-spinner fa-spin"></i></span></a><span class="article-meta-label"> 条评论</span></span></div><div class="content">先把U盘插到光猫USB接口,然后登录普通账号,账号密码在光猫后面有写,网址:http://192.168.1.1:8080/login.html
登录成功以后按键盘的F12打开开发者工具,然后输入`http://192.168.1.1:8080/usbbackup.cmd?action=backupeble&sessionKey=${sessionKey}`
点击链接打开,不要管我的前后sessionKey不一样
如果 备份配置 按钮点击不了,把鼠标放在 备份配置 上右键检查
然后双击 disabled 点删除键就行(回车上面第二个键),打错字删除那个键,不是delete键
这时候可以点击 备份配置 了,点了以后直接会跳转到一个空白页面,url是这样的:http://192.168.1.1:8080/usbbackup.cmd?action=backup&subarea=usb1_1&set1_sessionKey=set1_sessionKey_214
这时候不要管,直接把U盘拔下来插上电脑,然后u盘里多了一个叫 e8_Confi ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/posts/7490/" title="Django会话学习"><img class="post-bg" src="https://img.xpctf.cn/img/20201011203041.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Django会话学习"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/7490/" title="Django会话学习">Django会话学习</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2020-10-19T05:33:56.000Z" title="发表于 2020-10-19 13:33:56">2020-10-19</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/Python/">Python</a><i class="fas fa-angle-right article-meta-link"></i><a class="article-meta__categories" href="/categories/Python/Django/">Django</a></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-comments"></i><a href="/posts/7490/#post-comment"><span class="valine-comment-count" data-xid="/posts/7490/"><i class="fa-solid fa-spinner fa-spin"></i></span></a><span class="article-meta-label"> 条评论</span></span></div><div class="content">HTTP被设计为”⽆态”,也就是俗称“脸盲”。 这⼀次请求和下⼀次请求 之间没有任何状态保持,我们⽆法根据请求的任何⽅⾯(IP地址,⽤户代理等)来识别来⾃同⼀⼈的连续请求。实现状态保持的⽅式:在客户端或服务器端存储与会话有关的数据(客户端与服务器端的⼀次通信,就是⼀次会话),所以引入以下技术:
cookie
session
不同的请求者之间不会共享这些数据,cookie和session与请求者⼀⼀对应。
cookiecookie是什么cookies 是浏览器为 Web 服务器存的⼀小信息。 每次浏览器从某个服务器请求页面时,都会自动带上以前收到的cookie。cookie保存在客户端,安全性较差,注意不要保存敏感信息。典型应用:网站登录
设置CookieDjango使用HttpResponse的set_cookie方法来设置对象,使用redirect重定向指定一个地址,用法:
123response = redirect(reverse('admin:index'))response.set_cookie(cookie名称, value='cookie ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/posts/aade/" title="Python实现验证码发送"><img class="post-bg" src="https://img.xpctf.cn/img/20201019131933.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Python实现验证码发送"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/aade/" title="Python实现验证码发送">Python实现验证码发送</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2020-10-19T03:34:47.000Z" title="发表于 2020-10-19 11:34:47">2020-10-19</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/Python/">Python</a></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-comments"></i><a href="/posts/aade/#post-comment"><span class="valine-comment-count" data-xid="/posts/aade/"><i class="fa-solid fa-spinner fa-spin"></i></span></a><span class="article-meta-label"> 条评论</span></span></div><div class="content">
APP、⽹站注册账号,向⼿机下发验证码; 登录账户、异地登录时的安全提醒; 找回密码时的安全验证; ⽀付认证、身份校验、⼿机绑定等。本例采⽤阿里云短信验证
开通阿里云短信服务登录控制台阿里云:https://www.aliyun.com/
登录阿里云后点击右上角的控制台,点击阿里云logo旁边的菜单按钮,选择””产品与服务”,在搜索框输入”短信”,在”云通信”列表中点击”短信服务”进入短信服务控制台
开通短信服务首次进入短信服务阿里云会提示你开通短信服务,短信服务按量收费,你不用就不会收费。
申请签名个人用户只能申请一个签名,审核时间过长(2小时左右),我没法做演示。
进入控制台后选择”国内消息”,之后选择签名管理,点击添加签名按照要求填写内容即可,签名名称要是有个准确的应用名称,不能出现测试之类的词汇。
审核通过的签名
申请模板模板是你短信内容的格式,格式为:【签名名称】模板内容
进入控制台后选择”模板管理”,之后点击”添加模板”,按照填写要求填写模板即可,”${code}”是有个验证码变量,”code”是变量名,调用的使用要对应你得模板变量名。
创建AccessKey ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/posts/d0b4/" title="Django模型学习"><img class="post-bg" src="https://img.xpctf.cn/img/20201011203041.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Django模型学习"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/d0b4/" title="Django模型学习">Django模型学习</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2020-10-15T11:43:03.000Z" title="发表于 2020-10-15 19:43:03">2020-10-15</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/Python/">Python</a><i class="fas fa-angle-right article-meta-link"></i><a class="article-meta__categories" href="/categories/Python/Django/">Django</a></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-comments"></i><a href="/posts/d0b4/#post-comment"><span class="valine-comment-count" data-xid="/posts/d0b4/"><i class="fa-solid fa-spinner fa-spin"></i></span></a><span class="article-meta-label"> 条评论</span></span></div><div class="content">模型使用流程
配置数据库
定义模型类
激活模型
使用模型
数据库配置Django默认使⽤的是sqlite,但在⽣产环境中⼀般会⽤mysql、postgrsql、oracle 等关系型数据库。
在开发环境中,安装mysql的数据库驱动mysqlclient,mysqlclient是连接mysql的驱动,不能提供数据库服务,需要单独安装mysql。
1pip install mysqlclient
在项⽬的 settings.py ⽂件中找到 DATABASES 配置项,将其信息修改为:
12345678910DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', #mysql数据库引擎 'NAME': 'test', #数据库名 'HOST':'localhost', #数据库服务器地址 'USER': 'test ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/posts/2f99/" title="Django晋级学习"><img class="post-bg" src="https://img.xpctf.cn/img/20201011203041.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Django晋级学习"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/2f99/" title="Django晋级学习">Django晋级学习</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2020-10-13T05:11:54.000Z" title="发表于 2020-10-13 13:11:54">2020-10-13</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/Python/">Python</a><i class="fas fa-angle-right article-meta-link"></i><a class="article-meta__categories" href="/categories/Python/Django/">Django</a></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-comments"></i><a href="/posts/2f99/#post-comment"><span class="valine-comment-count" data-xid="/posts/2f99/"><i class="fa-solid fa-spinner fa-spin"></i></span></a><span class="article-meta-label"> 条评论</span></span></div><div class="content">Django 带参数的路由path对象Django使用path对象来定义路由列表,path有四个参数:
模式串:匹配用户请求路径的字符串
视图函数:匹配上用户请求路径后调用的视图函数
kwaergs:可选参数,需要额外传递的参数,是一个字典
名称(name):给路由命名,在代码中可以使用name进行方向解析(由name获取用户请求路径)
当path中模式串不能满足你的路由规则,还可以使用re_path对象,re_path对象中模式串是正则表达式,其他三个参数和path对象一致。
path注意
Django从上往下进行匹配,一旦匹配成功就返回
一个视图函数可以有多个模式匹配
模式前面不需要加’/‘
如果匹配失败,则引起异常,Django会调用错误处理视图函数(关闭DEBUG模式)
path匹配规则
str 字符串参数可以匹配除/和空字符的其他字符串
int 匹配0和整整数,视图函数的参数将得到一个整型值
slug 匹配由数字、字母、和_组成的字符串参数
path 匹配任何非空字符串,包括/
str写法:path('user/',inc ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/posts/24c5/" title="Django基础学习"><img class="post-bg" src="https://img.xpctf.cn/img/20201011203041.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Django基础学习"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/24c5/" title="Django基础学习">Django基础学习</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2020-10-11T12:26:14.000Z" title="发表于 2020-10-11 20:26:14">2020-10-11</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/Python/">Python</a><i class="fas fa-angle-right article-meta-link"></i><a class="article-meta__categories" href="/categories/Python/Django/">Django</a></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-comments"></i><a href="/posts/24c5/#post-comment"><span class="valine-comment-count" data-xid="/posts/24c5/"><i class="fa-solid fa-spinner fa-spin"></i></span></a><span class="article-meta-label"> 条评论</span></span></div><div class="content">Django 简介基本介绍Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。
使用 Django,只要很少的代码,Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的 Web 服务 Django 本身基于 MVC 模型,即 Model(模型)+ View(视图)+ Controller(控制器)设计模式,MVC 模式使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。
低耦合
开发快捷
部署方便
可重用性高
维护成本低
…
Python 加 Django 是快速开发、设计、部署网站的最佳组合。
特点
强大的数据库功能
自带强大的后台功能
优雅的网址
MVC 与 MTV模型MVC 模型MVC 模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
MVC 以一种插件式的、松耦合的方式连接在一起。
模型(M)- 编写程序应有的功能,负责业务对象与数据库的映射(ORM) ...</div></div></div><nav id="pagination"><div class="pagination"><span class="page-number current">1</span><a class="page-number" href="/page/2/#content-inner">2</a><span class="space">…</span><a class="page-number" href="/page/6/#content-inner">6</a><a class="extend next" rel="next" href="/page/2/#content-inner"><i class="fas fa-chevron-right fa-fw"></i></a></div></nav></div><div class="aside-content" id="aside-content"><div class="card-widget card-info"><div class="is-center"><div class="avatar-img"><img src="/img/avatar.png" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"/></div><div class="author-info__name">XiaoPu</div><div class="author-info__description">做自己能做的,做好自己能做好的!</div></div><div class="card-info-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">51</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">38</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">11</div></a></div><a id="card-info-btn" target="_blank" rel="noopener" href="https://github.com/k23223"><i class="fab fa-github"></i><span>关注Github</span></a><div class="card-info-social-icons is-center"><a class="social-icon" href="https://wpa.qq.com/msgrd?v=3&uin=23223856&site=qq&menu=yes" target="_blank" title="QQ"><i class="fab fa-qq"></i></a><a class="social-icon" href="https://wpa.qq.com/msgrd?v=3&uin=23223856&site=qq&menu=yes" target="_blank" title="WeChat"><i class="fab fa-weixin"></i></a><a class="social-icon" href="mailto:[email protected]" target="_blank" title="Email"><i class="fa fa-envelope"></i></a><a class="social-icon" href="/atom.xml" target="_blank" title="RSS"><i class="fa fa-rss"></i></a></div></div><div class="card-widget card-announcement"><div class="item-headline"><i class="fas fa-bullhorn fa-shake"></i><span>公告</span></div><div class="announcement_content">每个人,每件事;都值得我们去学习。</div></div><div class="sticky_layout"><div class="card-widget card-recent-post"><div class="item-headline"><i class="fas fa-history"></i><span>最新文章</span></div><div class="aside-list"><div class="aside-list-item"><a class="thumbnail" href="/posts/ca3c/" title="【原创】掌上高考专业分数线js逆向"><img src="https://img.xpctf.cn/img/202204092311468.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="【原创】掌上高考专业分数线js逆向"/></a><div class="content"><a class="title" href="/posts/ca3c/" title="【原创】掌上高考专业分数线js逆向">【原创】掌上高考专业分数线js逆向</a><time datetime="2022-04-09T03:17:59.000Z" title="发表于 2022-04-09 11:17:59">2022-04-09</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/posts/9650/" title="【原创】某查查协议头参数272a7bfd6c84f9233ae1逆向加密代码"><img src="https://img.xpctf.cn/img/202110291810672.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="【原创】某查查协议头参数272a7bfd6c84f9233ae1逆向加密代码"/></a><div class="content"><a class="title" href="/posts/9650/" title="【原创】某查查协议头参数272a7bfd6c84f9233ae1逆向加密代码">【原创】某查查协议头参数272a7bfd6c84f9233ae1逆向加密代码</a><time datetime="2021-10-29T10:09:01.000Z" title="发表于 2021-10-29 18:09:01">2021-10-29</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/posts/17ca/" title="【原创】某易云音乐params和encSecKey参数逆向"><img src="https://img.xpctf.cn/img/202110260343574.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="【原创】某易云音乐params和encSecKey参数逆向"/></a><div class="content"><a class="title" href="/posts/17ca/" title="【原创】某易云音乐params和encSecKey参数逆向">【原创】某易云音乐params和encSecKey参数逆向</a><time datetime="2021-10-25T18:32:24.000Z" title="发表于 2021-10-26 02:32:24">2021-10-26</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/posts/c34f/" title="Node.Js运行AES RSA加密缺少window的解决方法"><img src="https://img.xpctf.cn/img/202109151737709.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Node.Js运行AES RSA加密缺少window的解决方法"/></a><div class="content"><a class="title" href="/posts/c34f/" title="Node.Js运行AES RSA加密缺少window的解决方法">Node.Js运行AES RSA加密缺少window的解决方法</a><time datetime="2021-09-15T09:29:15.000Z" title="发表于 2021-09-15 17:29:15">2021-09-15</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/posts/c480/" title="电信光猫TEWA-708G超级管理密码破解"><img src="https://img.xpctf.cn/img/202109021456764.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="电信光猫TEWA-708G超级管理密码破解"/></a><div class="content"><a class="title" href="/posts/c480/" title="电信光猫TEWA-708G超级管理密码破解">电信光猫TEWA-708G超级管理密码破解</a><time datetime="2021-09-02T06:52:30.000Z" title="发表于 2021-09-02 14:52:30">2021-09-02</time></div></div></div></div><div class="card-widget card-categories"><div class="item-headline">
<i class="fas fa-folder-open"></i>
<span>分类</span>
<a class="card-more-btn" href="/categories/" title="查看更多">
<i class="fas fa-angle-right"></i></a>
</div>
<ul class="card-category-list" id="aside-cat-list">
<li class="card-category-list-item "><a class="card-category-list-link" href="/categories/CTF/"><span class="card-category-list-name">CTF</span><span class="card-category-list-count">2</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/Linux/"><span class="card-category-list-name">Linux</span><span class="card-category-list-count">2</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/PHP/"><span class="card-category-list-name">PHP</span><span class="card-category-list-count">4</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/Python/"><span class="card-category-list-name">Python</span><span class="card-category-list-count">10</span></a><ul class="card-category-list child"><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/Python/Django/"><span class="card-category-list-name">Django</span><span class="card-category-list-count">4</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/Python/%E7%88%AC%E8%99%AB/"><span class="card-category-list-name">爬虫</span><span class="card-category-list-count">4</span></a></li></ul></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/Web/"><span class="card-category-list-name">Web</span><span class="card-category-list-count">13</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/vulnhub/"><span class="card-category-list-name">vulnhub</span><span class="card-category-list-count">12</span></a></li>
</ul></div><div class="card-widget card-tags"><div class="item-headline"><i class="fas fa-tags"></i><span>标签</span></div><div class="card-tag-cloud"><a href="/tags/Writeup/" style="font-size: 1.45em; color: rgb(87, 17, 96)">Writeup</a><a href="/tags/css/" style="font-size: 1.15em; color: rgb(3, 3, 0)">css</a><a href="/tags/CTF/" style="font-size: 1.22em; color: rgb(196, 176, 2)">CTF</a><a href="/tags/Misc/" style="font-size: 1.15em; color: rgb(4, 99, 113)">Misc</a><a href="/tags/Chrome%E6%8F%92%E4%BB%B6/" style="font-size: 1.15em; color: rgb(7, 186, 69)">Chrome插件</a><a href="/tags/Django/" style="font-size: 1.38em; color: rgb(122, 191, 92)">Django</a><a href="/tags/funbox/" style="font-size: 1.22em; color: rgb(29, 112, 106)">funbox</a><a href="/tags/Funboc/" style="font-size: 1.15em; color: rgb(92, 15, 198)">Funboc</a><a href="/tags/Linux/" style="font-size: 1.15em; color: rgb(67, 21, 153)">Linux</a><a href="/tags/%E7%B3%BB%E7%BB%9F/" style="font-size: 1.15em; color: rgb(76, 133, 42)">系统</a><a href="/tags/SQL/" style="font-size: 1.22em; color: rgb(162, 30, 41)">SQL</a><a href="/tags/SQL%E6%B3%A8%E5%85%A5/" style="font-size: 1.3em; color: rgb(80, 10, 131)">SQL注入</a><a href="/tags/MySQL%E6%89%A9%E5%B1%95/" style="font-size: 1.15em; color: rgb(56, 45, 181)">MySQL扩展</a><a href="/tags/%E7%AC%94%E8%AE%B0/" style="font-size: 1.3em; color: rgb(62, 141, 28)">笔记</a><a href="/tags/Web/" style="font-size: 1.3em; color: rgb(134, 17, 116)">Web</a><a href="/tags/%E5%B9%B2%E8%B4%A7/" style="font-size: 1.22em; color: rgb(104, 47, 108)">干货</a><a href="/tags/%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/" style="font-size: 1.15em; color: rgb(139, 186, 4)">项目实战</a><a href="/tags/Photographer/" style="font-size: 1.15em; color: rgb(142, 28, 35)">Photographer</a><a href="/tags/%E9%AA%8C%E8%AF%81%E7%A0%81/" style="font-size: 1.15em; color: rgb(95, 200, 38)">验证码</a><a href="/tags/js%E9%80%86%E5%90%91/" style="font-size: 1.38em; color: rgb(112, 18, 186)">js逆向</a><a href="/tags/So-Simple/" style="font-size: 1.15em; color: rgb(196, 86, 9)">So Simple</a><a href="/tags/Source/" style="font-size: 1.15em; color: rgb(185, 26, 42)">Source</a><a href="/tags/%E5%8D%8F%E8%AE%AE%E5%88%86%E5%B1%82/" style="font-size: 1.15em; color: rgb(66, 129, 56)">协议分层</a><a href="/tags/Webdav/" style="font-size: 1.15em; color: rgb(115, 24, 60)">Webdav</a><a href="/tags/2017-7269/" style="font-size: 1.15em; color: rgb(107, 101, 103)">2017-7269</a><a href="/tags/XSS/" style="font-size: 1.22em; color: rgb(35, 8, 93)">XSS</a><a href="/tags/%E6%BC%8F%E6%B4%9E%E5%AD%A6%E4%B9%A0/" style="font-size: 1.38em; color: rgb(50, 192, 70)">漏洞学习</a><a href="/tags/%E5%89%8D%E7%AB%AF/" style="font-size: 1.15em; color: rgb(98, 61, 146)">前端</a><a href="/tags/SQL%E5%AE%9E%E6%88%98/" style="font-size: 1.22em; color: rgb(124, 184, 97)">SQL实战</a><a href="/tags/%E8%BF%9B%E5%88%B6%E8%BD%AC%E6%8D%A2/" style="font-size: 1.15em; color: rgb(105, 31, 181)">进制转换</a><a href="/tags/sunset/" style="font-size: 1.15em; color: rgb(148, 174, 140)">sunset</a><a href="/tags/windows/" style="font-size: 1.15em; color: rgb(75, 104, 130)">windows</a><a href="/tags/%E5%BA%8F%E5%88%97%E5%8F%B7/" style="font-size: 1.15em; color: rgb(9, 112, 159)">序列号</a><a href="/tags/LAMP/" style="font-size: 1.15em; color: rgb(7, 64, 30)">LAMP</a><a href="/tags/%E8%B6%85%E7%BA%A7%E7%AE%A1%E7%90%86%E5%AF%86%E7%A0%81/" style="font-size: 1.15em; color: rgb(165, 116, 176)">超级管理密码</a><a href="/tags/%E7%94%B5%E4%BF%A1%E5%85%89%E7%8C%AB/" style="font-size: 1.15em; color: rgb(41, 90, 11)">电信光猫</a><a href="/tags/%E5%BE%AE%E4%BF%A1/" style="font-size: 1.15em; color: rgb(26, 106, 67)">微信</a><a href="/tags/%E6%9C%80%E6%96%B0/" style="font-size: 1.15em; color: rgb(169, 6, 155)">最新</a></div></div><div class="card-widget card-archives"><div class="item-headline"><i class="fas fa-archive"></i><span>归档</span><a class="card-more-btn" href="/archives/" title="查看更多">
<i class="fas fa-angle-right"></i></a></div><ul class="card-archive-list"><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2022/04/"><span class="card-archive-list-date">四月 2022</span><span class="card-archive-list-count">1</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2021/10/"><span class="card-archive-list-date">十月 2021</span><span class="card-archive-list-count">2</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2021/09/"><span class="card-archive-list-date">九月 2021</span><span class="card-archive-list-count">2</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2020/10/"><span class="card-archive-list-date">十月 2020</span><span class="card-archive-list-count">5</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2020/09/"><span class="card-archive-list-date">九月 2020</span><span class="card-archive-list-count">12</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2020/08/"><span class="card-archive-list-date">八月 2020</span><span class="card-archive-list-count">11</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2020/07/"><span class="card-archive-list-date">七月 2020</span><span class="card-archive-list-count">8</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2020/06/"><span class="card-archive-list-date">六月 2020</span><span class="card-archive-list-count">7</span></a></li></ul></div><div class="card-widget card-webinfo"><div class="item-headline"><i class="fas fa-chart-line"></i><span>网站资讯</span></div><div class="webinfo"><div class="webinfo-item"><div class="item-name">文章数目 :</div><div class="item-count">51</div></div><div class="webinfo-item"><div class="item-name">已运行时间 :</div><div class="item-count" id="runtimeshow" data-publishDate="2020-05-27T14:00:00.000Z"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">本站总字数 :</div><div class="item-count">104k</div></div><div class="webinfo-item"><div class="item-name">本站访客数 :</div><div class="item-count" id="busuanzi_value_site_uv"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">本站总访问量 :</div><div class="item-count" id="busuanzi_value_site_pv"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">最后更新时间 :</div><div class="item-count" id="last-push-date" data-lastPushDate="2023-09-16T16:14:15.302Z"><i class="fa-solid fa-spinner fa-spin"></i></div></div></div></div></div></div></main><footer id="footer"><div id="footer-wrap"><div class="copyright">©2020 - 2023 By XiaoPu</div><div class="framework-info"><span>框架 </span><a target="_blank" rel="noopener" href="https://hexo.io">Hexo</a><span class="footer-separator">|</span><span>主题 </span><a target="_blank" rel="noopener" href="https://github.com/jerryc127/hexo-theme-butterfly">Butterfly</a></div><div class="footer_custom_text"><a href="/sitemap.xml"><span>Google地图</span></a><span class="footer-separator">|</span><a href="/baidusitemap.xml"><span>Baidu地图</span></a></div></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="darkmode" type="button" title="浅色和深色模式转换"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="单栏和双栏切换"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside_config" type="button" title="设置"><i class="fas fa-cog fa-spin"></i></button><button id="translateLink" type="button" title="简繁转换">繁</button><button id="go-up" type="button" title="回到顶部"><span class="scroll-percent"></span><i class="fas fa-arrow-up"></i></button></div></div><div><script src="/js/utils.js"></script><script src="/js/main.js"></script><script src="/js/tw_cn.js"></script><script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox/fancybox.umd.min.js"></script><div class="js-pjax"><script>(() => {
function loadValine () {
function initValine () {
let initData = {
el: '#vcomment',
appId: 'adT2HesNUqwHDh4xp5GslrsX-gzGzoHsz',
appKey: 'Mq44asxphpP9OIUwp6gCCOA7',
serverURLs: ''
}
const valine = new Valine(initData)
}
if (typeof Valine === 'function') initValine()
else getScript('https://cdn.jsdelivr.net/npm/valine/dist/Valine.min.js').then(initValine)
}
window.pjax ? loadValine() : window.addEventListener('load', loadValine)
})()</script><script>window.typedJSFn = {
init: (str) => {
window.typed = new Typed('#subtitle', Object.assign({
strings: str,
startDelay: 300,
typeSpeed: 150,
loop: true,
backSpeed: 50,
}, {"loop":false}))
},
run: (subtitleType) => {
if (true) {
if (typeof Typed === 'function') {
subtitleType()
} else {
getScript('https://cdn.jsdelivr.net/npm/typed.js/dist/typed.umd.min.js').then(subtitleType)
}
} else {
subtitleType()
}
}
}
</script><script>function subtitleType () {
if (true) {
typedJSFn.init(["今日事今日毕,勿将今事待明日"])
} else {
document.getElementById("subtitle").textContent = "今日事今日毕,勿将今事待明日"
}
}
typedJSFn.run(subtitleType)</script></div><script async data-pjax src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script><div id="local-search"><div class="search-dialog"><nav class="search-nav"><span class="search-dialog-title">搜索</span><span id="loading-status"></span><button class="search-close-button"><i class="fas fa-times"></i></button></nav><div class="is-center" id="loading-database"><i class="fas fa-spinner fa-pulse"></i><span> 数据库加载中</span></div><div class="search-wrap"><div id="local-search-input"><div class="local-search-box"><input class="local-search-box--input" placeholder="搜索文章" type="text"/></div></div><hr/><div class="no-result" id="local-search-results"></div><div id="local-search-stats-wrap"></div></div></div><div id="search-mask"></div><script src="/js/search/local-search.js"></script></div></div></body></html>