首页
动态
归档
Github
留言
工具箱
更多
邻居
壁纸
音乐
Search
1
欢迎访问我的日志空间
8,235 阅读
2
C语言读写程序文件-学习三十二
735 阅读
3
WEB音乐播放器源码
706 阅读
4
Typecho - Joe主题魔改版(持续更新)
646 阅读
5
Typecho-1.1/17.10.30-定制版源码
634 阅读
学习笔记
源码库
BUG
第九艺术
登录
Search
标签搜索
学习笔记
C语言
typecho
Java
扫雷
源码
PHP
插件
网站源码
音乐播放器
模板
git
github
bug
XG.孤梦
累计撰写
50
篇文章
累计收到
44
条评论
首页
栏目
学习笔记
源码库
BUG
第九艺术
页面
动态
归档
Github
留言
工具箱
邻居
壁纸
音乐
搜索到
50
篇与
的结果
2022-08-14
Tyepcho找回密码增加请求限制教程
前言之前有人请教我怎么限制typecho邮件通知里的找回密码请求,我看了看这好像是个挺严重的问题,如果没有限制请求频率,可能一些不怀好意的人会一直恶意请求,导致发送邮箱账号被封号,或者标记为垃圾邮箱,所以我研究了一会儿,想了比较多的方案,比如:前端js拦截(设置多少秒解除提交按键的禁用属性)但是因为typecho插件的性质组件初始化的顺序不同,可能js提前加载无法绑定到按钮,而且每次进入都禁用一些时间,非常影响体验,所以pass掉了。设置cookie临时存储提交的时间,找通过js拦截请求的发起,很明显这个实现比第一个体验上好了一点,但是这个办法有漏洞清除掉cookie就又可以请求,而且实现起来有点难度,因此也pass了。最后我想到了一个好办法,比上面两个实现起来容易且能稳定运行,通过查询数据库验证请求,我最后选择了这种方法,方法已经更新到了插件和我的定制版后台里,下载最新版本安装后,取消插件里XGComment/Action.php大概307-309行的代码注释即可开启功能,加注释防止有人安装到官方的Typecho,请求数据库查不到表单报错。教程1.打开数据库找了typecho_users表,点击结构添加一列名称rtime类型int长度 10允许为空 默认填充 0用来存储提交时写入数据库的时间戳。2.打开插件的 Plugin.php 文件在 找回密码过期时间 的下一行插入以下代码 // 找回密码请求间隔时间 $public_rtime = new Typecho_Widget_Helper_Form_Element_Text('public_rtime', NULL, '180', _t('请求间隔时间'), _t('防止恶意请求,开启需要定制版typecho且删除Action.php中相关的代码注释,此处定义找回密码请求间隔时间,单位为秒')); $form->addInput($public_rtime);3.打开插件的 Action.php 文件找到 doForget() 方法,这是验证并创建重置密码链接发送邮件的方法。只要在验证处添加一个时间戳验证,设置好时间间隔,这样每次点击提交找回密码请求后,方法就会查询数据库比较时间将 doForget() 方法的以下片段替换成下面的片段 // 查询用户数据 $user = $this->db->fetchRow($this->select()->where('mail = ?', $this->request->mail)); $now = time(); $retime = $user['rtime']; // 没有用户 if ( !$user ) { // 输出错误 $this->widget('Widget_Notice')->set(_t('邮箱地址错误, 请核对后重新输入'), 'error'); // 返回上一页 $this->response->goBack(); } if ( $now<=$retime ) { // 输出错误 $this->widget('Widget_Notice')->set(_t($this->request->mail.'您已申请过重置密码请求,请稍后重试!'), 'error'); // 返回上一页 $this->response->goBack(); } $addtime = $this->_plugin->public_rtime ? $this->_plugin->public_rtime : 180; $setime = $now + $addtime; $this->update(array('rtime' => $setime), $this->db->sql()->where('mail = ?', $this->request->mail));
2022年08月14日
194 阅读
0 评论
3 点赞
2022-08-12
CORS 跨域问题解决办法
我们在编写自己的网站时请求一些接口或者网页资源时,可能会遇到请求无响应的现象,这时按F12查看控制台会发现报出了下面这句错误,这其实就是跨域资源共享(CORS)协议阻止了请求。Access to XNLAttpRequest at 'https://xxx.xxxx.xxx' from origin 'https://xxx.xxx.xxx' has xxx.xx been blocked by coRs policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.跨域问题出现的原因:出于安全考虑,浏览器限制访问站点的资源。解决办法自己的网站或接口Nginx配置文件添加请求头修改Nginx后网站所有页面都允许跨域请求共享在Nginx配置文件末尾插入下面配置,保存并重载配置即可 # 允许跨域 location / { add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization'; if ($request_method = 'OPTIONS') { return 204; } } [line]不想深入研究的,看到这里就可以啦 :%(doge)[/line]解析Access-Control-Allow-Origin 服务器默认是不被允许跨域的。加上 Access-Control-Allow-Origin * 后,服务器就会接受所有的请求源其中就包括了跨域的请求。Access-Control-Allow-Headers 为了防止出现: Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response. 错误。这个错误表示当前请求Content-Type的值不被支持。是发起"application/json"的类型请求导致的Access-Control-Allow-Methods 为了防止出现:Content-Type is not allowed by Access-Control-Allow-Headers in preflight response 错误。OPTIONS 添加返回204 为了处理在发送 POST 请求时请求时 Nginx 依然拒绝访问的错误,发送"预检请求"时,需要用到 OPTIONS 方法服务器需要允许该方法。PHP接口添加请求头在api.php页面的头部插入以下代码就可以,接口跨域共享,网站其他页面不会共享,如果想限制只允许自己调用接口,可以把 * 改成自己的域名要带上http或者https。<?php header('Content-Type:text/html;charset=utf-8'); header("Access-Control-Allow-Origin: *"); ?>他人网站Nignx代理请求假设请求的链接是这样的 http://xxxx.xxxx.xxx/abc/api?1234 。在Nginx里插入这样一条配置location /abc/ { proxy_pass http://xxxx.xxxx.xxx; }把文件里请求的链接改成 /abc/api?1234,这时服务请求的实际上是服务器本地的地址即 127.0.0.1:xxxx(端口)/abc/api?1234,然后就能访问了,原理是跨域问题是浏览器报错阻止了请求,骗过浏览器就能正常访问到。
2022年08月12日
482 阅读
0 评论
0 点赞
2022-08-10
Typecho-Joe主题实现图片评论功能
实现效果实际使用效果见本站,主题将在1.1.7版本中嵌入此功能,但是在开启前需要配置一些东西。使用我的主题模板搭建好图床直接把js里的图床API改成自己的就可以了效果图默认状态已选择文件点击插入 上传图片默认插入Markdown语法链接,目的方便实现评论点击图片大图预览效果开启判断文件类型在js中加入后缀判断文件类型,选择非图片类型时,会提示视频教程隐藏内容,请前往内页查看详情准备修改后台设置1.首先进入Typecho后台,找到评论设置开启评论Markdown语法。2.只开启Markdown语法是不够的,因为评论区默认禁用HTML标签,所以要添加允许的HTML标签。 在评论设置的最下方找到允许使用的HTML标签和属性,插入以下代码。<img src="" data-original="" width=""> <a href="" data-fancybox="">如果还想在评论区播放视频,自行查看网站的video标签和属性值一同加入进去。注意因为解除了a标签后可以写入JS脚本语句,造成安全隐患,强烈建议开启主题设置里的禁止使用JS脚本评论。3.图床API接口,推荐自己搭建。 可以使用我源码库中的外链网盘源码搭建,我的博客使用的也是这个源码的API,为了减轻服务器负担我加了域名验证,我的接口只允许了本站,要是实在不会动手可以打赏,请我喝一杯奶茶,我开放你的域名授权,不过还是建议自己搭建,因为方便自己管理上传上来的文件。使用本主题1.1.7之后版本只需要在主题文件夹的根目录下的js文件夹里找到img.js,打开找到图床API把链接换成自己的接口链接就可以正常使用了。[line]准备阶段完成[/line]实现修改functions.php在合适位置插入以下代码,其他的joe主题自行修改 setAttribute(); 中加入的属性。 $JCommentImg = new Typecho_Widget_Helper_Form_Element_Select( 'JCommentImg', array('off' => '关闭(默认)', 'on' => '开启'), 'off', '是否开启评论图片功能', '介绍:开启后,评论区域可以选择图片进行评论' ); $JCommentImg->setAttribute('class', 'j-setting-content j-setting-other'); $form->addInput($JCommentImg->multiMode());修改评论区文件 comment.php找到评论区文件,我的主题是在主题文件根目录下的 pblic/comment.php插入以下代码到图片位置,或者合适位置。隐藏内容,请前往内页查看详情找到输出评论的div标签,添加 id=markdown 的属性,不同的主题markdown解析的id可能不同,可以进入文章按f12,找到文章的父标签查看。添加css文件 btn.css美化上传和插入按钮,可根据喜好自己修改或者加入样式,创建好文件后复制下方代码粘贴保存即可,并在head.php或者header.php中引入文件。.file { position: relative; display: inline-block; background: #D0EEFF; border: 1px solid #99D3F5; border-radius: 4px; padding: 4px 5px; overflow: hidden; height: 32px; color: #1E88C7; text-decoration: none; text-indent: 0; line-height: 18px; } .file input { position: absolute; font-size: 100px; right: 0; top: 0; opacity: 0; } .file:hover { background: #AADFFD; border-color: #78C3F3; color: #004974; text-decoration: none; } .xgimg{ display: flex; align-items: center; justify-content: flex-end; } .xgimg button { background: var(--classD); padding: 0 15px; height: 32px; border: none; font-size: 13px; transition: all 0.35s; color: var(--main); } .xgimg button:active { color: #fff; background: var(--theme); } .showFileName{ width:40%; font-size: 12px; text-align: right; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; } @media screen and (max-width: 768px){ .showFileName{ width:0px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; } }创建js文件 img.js创建文件,复制下方代码粘贴,然后把图床API接口改成自己的,如果使用其他的图床接口,请根据接口的开发文档,使用formData.append(); 方法添加需要的参数即可,修改好后,在footer.php中引入文件,并且在它的上方 axios.min.js 因为上传使用的是axios方式请求。<script type="text/javascript" src="https://unpkg.com/axios@0.27.2/dist/axios.min.js"></script>隐藏内容,请前往内页查看详情最后,再后台开启评论图片功能,清除缓存刷新页面,图片上传按钮就出现了,附一张评论图片成功的评论截图[line]教程结束[/line]
2022年08月10日
294 阅读
5 评论
6 点赞
2022-08-10
外链网盘源码
外链网盘一款PHP网盘与外链分享程序。支持所有格式文件的上传,可以生成文件外链、图片外链、音乐视频外链,生成外链同时自动生成相应的UBB代码和HTML代码支持文本、图片、音乐、视频在线预览,这不仅仅是一个网盘,更是一个图床亦或是音乐在线试听网站。支持本地、腾讯云、又拍云、华为云OBS存储,支持自定义本地存储路径。支持图片违规检测,对接阿里云内容安全服务,支持开启视频文件人工审核。服务器环境需求 Mysql 5.6 + PHP 7.0以上首页后台设置API文档Github地址:https://github.com/XG2020/XGPan{cloud title="外链网盘源码" type="lz" url="https://www.lanzoum.com/iN2gi09bympc" password="xggm"/}
2022年08月10日
316 阅读
0 评论
0 点赞
2022-08-08
Typecho-XGLoginQQ扫码登录插件
插件特点本插件建议配合定制版typecho使用效果最佳插件登录注册界面与绑定账号界面可以配合定制版typecho后台美化插件使用美化界面插件只支持QQ登录(原因其他登录方式不稳定,微信网页登录会提示风险拦截不稳定,腾讯问卷接口失效)插件实现原理通过扫码授权登录QQ空间获取唯一的标识码写入文件与账号绑定到一起,请放心使用。效果图登录注册界面插件后台设置美化插件设置github地址:https://github.com/XG2020/XGLogin
2022年08月08日
290 阅读
0 评论
1 点赞
1
2
...
10