个人网站Log4j2漏洞风险排查
前言Log4j2漏洞事件已经过去了几个月,影响面可以说是非常的广。本质上还是权限和代码注入问题,这里就不作赘述,和SQL注入在原理和形式上都异曲同工。
我个人没太明白还是,如此流行的开源库,竟然开发者和使用者这么久都没发现这个巨大漏洞(可能早有人发现但并未公布),而且作为一个日志记录工具,权限未免太高。
修复从互联网上可以查到最新的修复建议:
升级到最新版本:
目前官方已推出最新Apache log4j 2.15.0版本,可从地址中下载升级:https://logging.apache.org/log4j/2.x/download.html
缓解措施:
(1)添加jvm启动参数 -Dlog4j2.formatMsgNoLookups=true
(2)在应用程序的classpath下添加log4j2.component.properties配置文件文件,文件内容:log4j2.formatMsgNoLookups=True
(3)移除log4j-core包中JndiLookup 类文件,并重启服务
具体命令:zip -q -d log4j-core-*. ...
解决Android Studio升级到Arctic Fox后编译失败的问题
问题从Android Studio 4.1.3升级到最新的Arctic Fox之后,整个组件化工程会编译不过。编译错误显示:
e: [kapt] ‘com.sun.tools.javac.util.Context’ class can’t be found (‘tools.jar’ is absent in the plugin classpath). Kapt won’t work.
很多同学知难而退,被迫回滚到4.1.3,那怎么行呢?
分析首先说,这个错误不是组件化插件的问题,不是Kotlin的问题,也不是工程本身的代码问题,而是JDK没配置好导致的。
但是有人会问了,为什么旧版Studio用得好好的,升级到新版就有JDK的问题了?因为新版Studio默认内置了JDK 11,Gradle会使用11来运行,放弃了JDK 8(细心的同学已经发现,启动界面的Runtime version已经变成了11,不再是8了)。
如果不做任何设置,默认用JDK 11来编译工程,就会失败,当然错误提示不会是上面那个,是另一个,这里不赘述,我们还是以JDK 8来编译。
解决1、我们先打开Studio ...
Apache和PHP环境打开php页面File Not Found问题
问题之前搞了个腾讯云的轻量应用服务器(预装环境LAMP)来玩,结果最近发现网站目录下面的php文件访问不了,在浏览器打开就出现“File Not Found”的提示。
搜罗了很多答案,没有一个明确能解决问题的,不过还是得到了一些启示。下面属于我的个例,不一定能解决所有此类问题。
解决腾讯云的这种服务器预装的软件都在此目录下面,包括相关配置:
123[root@VM-0-15-centos ~]# cd /usr/local/lighthouse/softwares[root@VM-0-15-centos softwares]# lsapache mariadb oniguruma php
1、我们先配置一下apache,让你的网站首页可以以index.php的形式存在:
12# 直接编辑配置文件vim apache/conf/httpd.conf
然后找到这段内容:
123<IfModule dir_module> DirectoryIndex index.html index.php</IfModule>
原本只有index.html,在后面 ...
IDE Eval Reset忘了重置进不去怎么办
问题我相信很多白嫖怪都知道目前JB全家桶“极为先进”的使用方法——其实就是无限重置30天(IDE Eval Reset)。具体使用方法就不赘述了。
这里会出现一个问题,尤其是针对电脑上安装了多款JB家的IDE用户来说(比如我就是,IDEA、PyCharm和CLion都在使bai用piao),如果超过30天未打开其中某个IDE进行试用重置,那么你就会发现打不开了,要求你补充License,而且菜单栏也没有地方让你再去打开Eval Reset插件了。怎么办!?
或许你唯一能想到的办法就是完全卸载,清空一切相关配置文件和卸载残留,重新安装,重新试用。但是这样损失惨重啊,尤其是很多设置和项目又要重新导入。
解决这个办法也是我偶然发现的,你在其他地方肯定搜不到。不过当你第一次遇到这个问题时,有个前提:需要至少有一款IDE是可以打开使用的,也就是刚刚使用过Eval Reset并且还在30天内的。
举例,比如我现在PyCharm打不开了,但是IDEA平时经常用到,所以能打开,接下来:
1、这里以macOS版本为例(其他系统也是类似的,就是路径不太一样,看后文),复制IDEA内部eval文件夹下面的k ...
Android Shortcut启动导致其他Activity销毁问题
问题我们都知道,从API 25开始,Android加入了类似3D Touch一样的功能,即长按桌面图标可以弹出快捷方式菜单(最多4个)。早期国产系统的桌面Launcher并没有积极适这一功能,所以各大应用也懒得做,后来才逐渐完善。目前包括微信、支付宝等都可以长按弹出快捷方式,支付宝更是支持动态配置。
开发文档直接看官方的就行:https://developer.android.com/guide/topics/ui/shortcuts ,静态快捷方式适配很简单,加xml文件就完事,此处不赘述。
但在实际体验开发过程中发现,通过快捷方式打开应用的对应页面后,其他Activity会被销毁。这并不是我们想要的效果。
简单分析这个现象很像是在启动Activity时设置了 CLEAR_TASK 的标识,导致任务栈被清空。但是,从下列的使用示例来看,静态快捷方式又无法设置Intent的flag,相关逻辑由系统SDK内部实现。
1234567891011121314151617181920<shortcuts xmlns:android="http://schemas.androi ...
聊一聊MIUI最近更新的原子内存
前言比起最近雷布斯的个人演讲,其实我更好奇MIUI 12.5增强版(超级Bug-list修复版)推出的那四个性能优化项目:
焦点计算 - 处理器智能调度机制
原子内存 - 精细化内存管理机制
液态存储 - 文件存储管理机制
智能均衡 - 对旗舰硬件性能的智能调配
作为技术爱好者,这个“原子内存”还真是提起了我的兴趣,因为其他三项还算比较好理解。毕竟内存管理这件事,是操作系统领域几乎永恒的课题。
官方解释我们先来了解下MIUI官方网站是如何介绍原子内存的。官网的海报动效还是阐释得比较清晰明了(辛苦设计师小姐姐,不知道又加了多少班)。
最开始是几个独立的应用各自占有一定的内存,看看这绿,这不就是微信绿。看看这蓝,支付宝?看看这橙,这啥,淘宝吧估计是,肯定不是小米自己。设计姐姐在疯狂暗示。
然后,第二步是拆分应用内存,结束不重要的任务,刚才还是整块的内存占用现在在逻辑上被划分为了大小不等(即不同功能占用内存大小不同)的几块。这一步其实就是核心了,如何来划分呢?按什么维度划分呢?有没有可能划分失误反而影响用户体验呢?我们后面来聊。
第三步,根据场景,进一步精细压缩。这一步也很关 ...
最简单改变状态栏文字及背景颜色的方法
问题我们知道,Android的状态栏(StatusBar)是可以由开发者自行更改背景颜色的,至于文字颜色,不能直接由自己修改色值,而是黑白两种颜色,对应的是Light和Dark两种全局主题模式。
为了良好的用户体验,我们在状态栏背景为深色时,需要给予白色字体,反之亦然。比如这样:
然而,有些时候我们在Light Mode下并不需要黑色字体,就需要自己手动修改了。
方法以前我们修改状态栏相关的内容,都是去找各种反射代码,或者各种封装好的StatusBarUtil之类的,不仅代码不优雅,还容易出现千奇百怪的兼容性问题,不利于维护。
如今,谷歌官方已经给出了解决方案,一切尽在AndroidX。直接看代码:
12345678910111213141516171819import androidx.core.view.ViewCompat;import androidx.core.view.WindowInsetsControllerCompat;public class MainActivity extends BaseActivity { @Override prot ...
安装Anaconda后终端base前缀问题
问题最近想训练个小模型来用用,于是乎我在macOS安装 Anaconda | Individual Edition ,选择的是图形界面安装(64-Bit Graphical Installer),整个过程很顺利,一路下一步就行了。
然鹅,安装完之后,我发现我的终端命令行前缀出现了一个base,像这样:
1(base) -> ~
这就很无语。
原因猜测原因应该是Anaconda安装后在shell的配置文件中注入了脚本,因为我用的是zsh,所以打开 .zshrc 文件可见:
1234567891011121314# >>> conda initialize >>># !! Contents within this block are managed by 'conda init' !!__conda_setup="$('/Users/xxx/opt/anaconda3/bin/conda' 'shell.zsh' 'hook' 2> /dev/null ...
快速实现Sublime Text的Kotlin高亮
问题Sublime Text是一款非常实用的编辑器软件,偶尔不想开大型IDE的时候,用它来看看代码还是不错的。
不过发现在用它来查看Kotlin代码时,默认是一片白,没有语言对应的高亮,点击右下角选择语言时也没有Kotlin这个选项(下图是解决问题之后的)。
解决没有高亮看着多不舒服啊,如何快速搞定呢?已经有开源项目帮我们解决了。
新方法(2023更新)
找到Preferences中的Package Control(如果没有这个选项,说明没有安装这个组件,在Tools中找到最后一个Install Package Control即可,稍等几分钟就会弹窗提示成功)。
打开Package Control后在弹窗中找到Install Package这项,双击或者回车均可,等待几秒就会弹出新的窗口,直接搜索Kotlin关键词,选中第一个,安装即可。
旧方法(package下载链接已失效)GitHub - vkostyukov/kotlin-sublime-package: Sublime Text 2 Package for Kotlin Programming Language ...
我的2021 Google IO大会之旅
此文为初稿备份,终稿已发布于少数派:https://sspai.com/post/66830
2021年的 Google I/O大会 已经圆满闭幕,我们从下面几条官方的FAQ可以看出今年大会与往届有所不同:
2021年Google I/O大会主要面向哪些人群?
全球范围内对Google技术感兴趣的开发者都应关注此次大会,以便了解最新的产品发布、Google专家的行业洞见,并进行实践性学习。
Google I/O 2021大会的举办时间和地点?
2021年开发者大会将于5月18日至20日以虚拟形式举办。
Google I/O 2021大会的费用是多少?
本届Google I/O大会对所有人免费,包括会上那些需要预约的内容,我们希望人人都能参与其中并从中获益。
我觉得最有意思的就是这个线上虚拟大会,这基本上就是一个完整的在线RPG游戏。我相信这也是全世界大多数开发者人生中第一次“亲临”IO大会现场。
接下来我就带大家一起逛逛这次有趣的大会吧。
初入乐园刚进入加载页面的时候,我们就能看见背景是整个大会的像素风地图全貌,可以看见内 ...
忘了买电脑音响?手机来替代!
背景前段时间把吃灰的台式电脑搬出来用,我竟然忘了它没配音响,可我现在就想玩游戏听音乐,也不想买音响,怎么办?除此之外,我相信很多公司的办公台式电脑也是没有带音响的,老板告诉你:上个班还要听啥响?好好搬砖就行了。但有时候加班到四下无人的时候,确实会产生一种想要外放音乐的欲望。
此情此景,我摸了摸我的双扬声器小米10,不仅感叹道:你就是个天生的便携音响呀!于是,我开始寻找让手机和电脑通信并传输音频数据的方法。
从流媒体的理论上讲,无非就是电脑将音频数据传输到手机上播放,电脑端作为Server,手机端作为Client,这样一个简单的C/S架构。大致我能想到3种传输方式:
通过局域网传输数据(例如同时连接某一WiFi)
通过USB等有线的方式传输数据
通过蓝牙配对连接来传输数据
下面我们就来探索一下现有的可行方案。
实践AudioRelay基本信息
有官网:https://audiorelay.net/ ,提供Windows和Android应用程序下载。
Android端在Play Store上也能搜到,简介就是 Stream your PC audio on Wifi or U ...
QQ闪照保存小妙招
QQ闪照在IM工具中,QQ较之于微信一直是比较前卫的,毕竟年轻用户居多。比如QQ闪照就是一个有趣的功能,而且已经推出很久了(记得大概是V6.5左右):不管单聊还是群聊都可用,在发送图片时勾选闪照即可,发送成功后所有人都只能看5秒,时间结束后图片被“销毁”,UI层面被打上厚厚的马赛克。
这个功能一经推出,不少老司机可谓是既爱又恨,我们暂且不说其功能意义和影响。但是相信大家都思考过,怎么把闪照保存下来?
接下来我们就以Android端QQ为例探索一下闪照的持久化存储方式。
截图想多了哈哈,Android端QQ是直接禁止在闪照页面截图的,所以这条路走不痛。
12// 禁止截屏一行代码搞定getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
突破5秒限制这个方法非ROOT用户就不用想了,原理上可以通过类似Xposed的框架来修改这个时间限制,以达到一直查看图片的目的,当然这种做法也比较危险,不排除被腾讯封号。
找图片文件图片消息本质上还是一张 ...
macOS备份迁移系统偏好设置
场景不知道诸位在使用macOS时是否遇到过这样的场景:有两台电脑,想把旧电脑中的系统偏好设置原封不动地迁移(导入)到新电脑中,只关心这些设置,不想迁移其他东西。
解决方案1:官方迁移助理其实官方提供了一个方案,叫“迁移助理”。具体操作步骤可见文档:将内容迁移到一台新的 Mac 上,不仅可以迁移系统设置,还包括整个用户帐户下的文件、应用程序等。
如图,我们可以在此步骤中只选择“系统与网络”,就能实现系统设置的迁移。
方案2:macprefs第一个方案其实是比较安全保险的做法,但是需要注意的是:
在这个示例中,John Appleseed 是一个 macOS 用户帐户。如果这个帐户与新 Mac 上已有的帐户同名,则系统会提示您重命名这个旧帐户或替换新 Mac 上的帐户。如果进行重命名,则这个旧帐户会作为单独的用户出现在新 Mac 上,并且拥有单独的个人文件夹和登录名。如果进行替换,则这个旧帐户会删除并随后替换新 Mac 上的帐户,包括相应个人文件夹中的所有内容。
也就是说你可以选择覆盖或者创建另一个帐户来迁移你的数据。其实很多时候,我们只是想把系统偏好设置做一个导出导入仅此而已,并不 ...
Binder机制学习指北
挖坑待填,未完待续……
参考
写给 Android 应用工程师的 Binder 原理剖析
彻底理解Android Binder通信架构
Android跨进程通信:图文详解 Binder机制 原理
Android Bander设计与实现 - 设计篇
Binder十万个为什么
一次Binder通信最大可以传输多大的数据?
源码茶舍:App进程创建中的poll机制
挖坑待填,未完待续……
系列汇总转眼间几年过去了,“源码茶舍”也算是我写的第一个系列文章,最初取这个名字的意思便是“像喝茶一样品味AOSP源码”,喝茶讲究什么?当然是悠闲。因此,此系列的文章一般都不长,且大多数都是我平时偶尔遇见的问题或者趣点,总之是比较随意的,研究深度是在我能力范围内尽可能深入。
希望以后还能一如既往地更新这个系列,疏漏错误之处还请大家指点。至此汇总一下往期所有:
源码茶舍之没有epoll就没有Handler
源码茶舍之如何由Uri找寻ContentProvider
源码茶舍之FLAG_EXCLUDE_STOPPED_PACKAGES与广播唤醒
源码茶舍之PackageManager获取注册Service数量问题
源码茶舍之android:externalService是什么属性?实现原理?
源码茶舍之由一次简单的ANR分析深入了解Context