解决WordPress恶意搜索攻击(网址/?s=****)

最近网站被恶意搜索攻击,收到腾讯云的内容违规通知,内容如下:

这种恶意搜索攻击,其实非常简单,就是通过既定的网址结构不断对网站发起不良关键词搜索访问,比如 WordPress 的搜索网址结构为 域名/?s=搜索词,而且可能还会顺便将访问的地址推送到各大搜索引擎,加快这些恶意网址的收录。这样,你的网站就会沦为这些不法之徒传播不良信息的渠道,这对网站排名是非常不利的,甚至可能会直接被搜索引擎拉入黑名单。

解决方案如下:

1、禁止搜索引擎收录搜索结果页

搜索结果页一般我们都不推荐被收录,所以建议大家还是禁止收录。现在几乎所有搜索引擎都遵循 robots.txt 的规则,也就是我们可以通过 robots.txt 定义规则,阻止搜索引擎收录搜索结果页面。我们可以在网站根目录,创建一个 robots.txt 文件,填入下面的内容:

这样就禁止搜索引擎收录 WordPress 搜索结果页面。

2、在搜索结果为零时,跳转到首页

网上的做法都是直接禁用 WordPress 自带的搜索功能,只是其实这个自带的搜索功能还是蛮好用的,而且目前也没有对服务器造成很大的压力。我这边的想法是保留搜索功能,只是当搜索结果不存在的时候,自动跳转到首页。

目前测试到可行的办法是直接在主题的 functions.php 中增加如下代码:

曾经试过在主题的 content-none.php 中通过 wp_redirect 进行跳转,虽然可见内容不存在了,但是页面源代码中会出现搜索词标签,因此不可行。

测试代码:

也曾经测试过自定义 searchform.php ,也是存在上述问题。

自定义 404.php 是无效的。搜索关键词过滤又实在是太多了,还不如搜索不到结果就返回首页更简单。

参考链接


解决 fetch-pack: unexpected disconnect while reading sideband packet fatal: early EOF fatal: fetch-pack

在克隆仓库或者拉取代码的时候出现类似如下错误:

解决方法:

主要是由于 仓库 内容比较大,或者仓库中有比较大的文件,由于 http 协议 或者 传输数据大小限制导致的,可以通过设置如下参数解决:

参考链接


解决fetch-pack: unexpected disconnect while reading sideband packet fatal: early EOF fatal: fetch-pack

ubuntu 24.04编译webkitgtk

前置条件
  • ubuntu 24.04.2 LTS
解决方案

参考链接

Flutter多平台打包发布

flutter_distributor是一个强大的工具,支持跨平台发布和高级打包选项。

安装

确保 flutter_distributor 已安装:

配置文件

为高级打包配置所需的文件:

  • macOS:

    • 如果打包 DMG 安装包:macos/packaging/dmg/make_config.yaml

    • 如果打包 PKG 安装包:macos/packaging/pkg/make_config.yaml

    • distribute_options.yaml

  • Windows:

    • 如果打包 exe 安装包:windows/packaging/exe/inno_setup.sas

      windows/packaging/exe/make_config.yaml

    • 如果打包 msix windows/packaging/msix/make_config.yaml

  • Linux:

    • linux/packaging/appimage

      有两个文件 linux/packaging/appimage/AppRun

      linux/packaging/appimage/make_config.yaml

    • linux/packaging/deb 文件 linux/packaging/deb/make_config.yaml

    • linux/packaging/rpm 文件 linux/packaging/rpm/make_config.yaml

命令示例

  1. 打包 macOS (DMG 和 PKG)

  2. 打包 Windows (EXE 和 MSIX)

  3. 打包 Linux (DEB、RPM 和 AppImage)

参考链接


Flutter 3.29.1-使用U盾完成数据的加解密(国密算法SKF接口)

参考 Python3-使用U盾完成数据的加解密(国密算法SKF接口),那么相同的功能如何使用 Flutter FFI 实现呢?

  • Flutter 3.29.1
  • ffi 2.1.4
  • pointycastle 3.6.0
  • pkcs7 1.0.5
  • convert 3.1.2

代码参考如下:

 

使用方式:

参考链接


Gtk应用内嵌网页与原生代码交互方法

前置条件

  • Ubuntu 24.04.2 LTS

内容详情

在使用Gtk开发应用程序的过程中,如果需要内嵌网页,那么使用libwebkit2gtk是个非常自然和正确的选择。

那么这里就可能原生程序代码可能需要跟网页交互的问题。

Gtk程序跟网页的交互,主要有两个方面:

需求1,使用 webkit2gtk 的内置 webkit_web_view_run_javascript 函数即可解决

需求2,使用 webkit2gtk 的内置的 web extendsion 扩展支持功能解决 或 window.webkit.messageHandlers..postMessage(value)

不多说看代码吧!

Gtk嵌入网页Demo程序

webviewgtk.c

Web Extension Demo

内嵌的网页示例 webview.html

示例运行

安装依赖:

把webviewgtk.c,web_exten.c,webview.html 放在同一目录下。

编译程序:

运行程序:

参考链接


应用内嵌WebKitGTK报错“Unacceptable TLS certificate”

ubuntu 24.04 系统开发内嵌 webkit2gtk-4.1 的应用,打开部分 HTTPS 网页报错“Unacceptable TLS certificate”, 如下图:

但是相同的页面使用 FireFox/Safari/Chrome/IE/Edge 等主流浏览器打开都是正常显示的。

调试代码,发现是 WebKitWebViewon_load_failed_with_tls_errors 回调函数返回了错误 G_TLS_CERTIFICATE_GENERIC_ERROR64),如下图:

于是安装 Gnome 官方的浏览器 Epiphany 进行测试,该浏览器底层也是调用 WebKit2GTK,在 ubuntu 24.04 系统,可以执行如下命令进行安装:

打开相同的页面,同样报错,显示服务器不可信。

由于 WebKit2GTK 底层的 TLS 通信调用库调用的是 GnuTLS 。于是尝试通过命令行对 TLS 证书认证过程进行验证,执行如下命令:

可以看到,网站的根证书无法通过 GnuTLS 的验证,原因在于网站的证书链中的根证书使用的 RSA-SHA1 签名,该类型签名存在 “弱哈希算法签名的SSL证书(CVE-2004-2761)漏洞” 进而被 GnuTLS 拒绝。

针对此问题的更详细的描述参考 GnuTLS 文档 8.2 Disabling algorithms and protocols

针对此问题的解决方法:

  • 联系网站,更新证书,重新以 RSA-SHA256 签发证书。由于是公司内部网址,因此联系网络更新即可;

  • 应用内嵌网站证书,通过 webkit_web_context_allow_tls_certificate_for_host 要求 webkit 通过提供的证书进行网站验证。此种情况适用于 APP 内嵌自己网站页面的情况,同样适用于自签名证书的情况;

  • 如果纯粹测试,可以在加载页面之前调用

    要求 webkit 无视证书错误。此方法生产环境不可取,非常不安全,仅可用于内部测试

  • 此方案目前测试已经不可用调用 gnutls_sign_set_secure_for_certs API 许可部分不安全的证书签名算法

    相对来说,联系不上网站的情况下,又需要在保证安全的前提下,尽量兼容网站,推荐此种方式;

  • 自行接管证书验证过程,实现比较复杂,极其容易产生安全漏洞,不建议;

参考链接


VSCode GDB调试控制台报错"-var-create: unable to create variable object"

背景

在使用 Visual Studio Code (1.97.2) 进行 GDB 调试时,想使用 x 命令看一下某地址处的数值。出现如下报错:

解决方案

其实,在刚刚开始调试程序时,就以黄色字体给出了解决方案。

也就是说:

  • 如果是想查看某个变量的值,直接在输入框里输入变量名就好了;

  • 如果要执行GDB命令,则需要加-exec前缀,如下图:

参考链接


SM2格式数字信封加解密详解

0、参考链接

1、SM2数字信封格式:

2、代码中SM2数字信封加密解密步骤

解密(将SM2数字信封格式转换为加密私钥)

3、SM2数字信封格式详解

参考链接


解决在macOS上使用Flutter项目访问网络报错 "SocketException: Connection failed (OS Error: Operation not permitted, errno = 1)"

在Flutter应用中添加网络支持是一个非常常见的需求。

这主要是按照以下步骤进行。

  • pub.dev中安装一个网络包,如httpdio
  • 在您的 Flutter 应用程序中添加所有必要的网络代码
  • 如果需要,添加任何所需的API密钥

但是,如果你在macOS上运行该应用程序,你会被这个可怕的错误所欢迎。

SocketException错误已经来拜访你了

这就是它,以更可读的格式。

所以,让我们弄清楚为什么会发生这种情况,以及如何修复它。👇

注意:如果你要给一个旧的Flutter应用添加macOS支持,你可能需要运行flutter create --platforms macos . ,把macOS添加为构建目标。我在macOS上运行我的大部分应用程序,所以在构建响应式UI时,我可以轻松地调整窗口的大小。

macOS上的客户端联网权限

macOS应用程序默认为沙盒,如果你没有添加所需的权限,就会发生SocketException 的错误。

要解决这个问题,请打开名为macos/Runner/DebugProfile.entitlements 的文件并添加以下内容。

然后,打开macos/Runner/Release.entitlements ,做同样的事情。

那么iOS呢?

在iOS上,只要你连接到一个安全的https 终端,该应用就可以正常运行(不需要额外的配置)。

但请记住,在某些情况下,你可能需要定制应用程序的传输安全设置,如这里所解释的。

安卓的情况如何?

在安卓系统中,曾经需要AndroidManifest.xml 文件中添加INTERNET权限。

但根据这个答案,现在已经不需要了,因为大多数应用程序都需要互联网访问。

参考链接


如何解决 "SocketException:连接失败(操作不允许)",在macOS上使用Flutter