SQL替换与更新语句

update `content` set PageUrl=replace(PageUrl,'https://toutiao.com/group/','https://www.toutiao.com/article/');

把数据库表content中的所有PageUrl字段里的 https://toutiao.com/group/ 字符串替换成 https://www.toutiao.com/article/

如果要更新表中某个字段的内容,用新的内容覆盖旧的内容,使用以下语句:

UPDATE wp_posts SET post_title='aabb' WHERE ID='16';

用这个方法更新wordpress内容,例如排行榜页面,非常好用!

扩展阅读:https://www.runoob.com/sql/sql-update.html

图片反盗链(外链图片出现403的解决方法)

解放方法:

在网页html代码head中添加如下代码:

<meta name="referrer" content="no-referrer" />

原理:

  • http请求体的header中有一个referrer字段,用来表示发起http请求的源地址信息,这个referrer信息是可以省略但是不可修改的,就是说你只能设置是否带上这个referrer信息,不能定制referrer里面的值。
  • 服务器端在拿到这个referrer值后就可以进行相关的处理,比如图片资源,可以通过referrer值判断请求是否来自本站,若不是则返回403或者重定向返回其他信息,从而实现图片的防盗链。上面出现403就是因为,请求的是别人服务器上的资源,但把自己的referrer信息带过去了,被对方服务器拦截返回了403。
  • 在前端可以通过meta来设置referrer policy(来源策略),具体可以设置哪些值以及对应的结果参考这里。所以针对上面的403情况的解决方法,就是把referrer设置成no-referrer,这样发送请求不会带上referrer信息,对方服务器也就无法拦截了。

参考:

继续阅读

套CDN后防止Censys泄露源站真实IP

网站即使是套了cloudflare等cdn,通过访问https://ip地址,会暴露域名。

有些无良爬虫可通过HTTPS访问扫描全网IP,暴露证书、同时暴露你的域名。即使你套了CDN也逃不掉。像censys.io和shodan就是提供这种服务的。

示范一下扫描IP命令:

curl -v -k https://35.186.1.1

curl -v -k https://35.186.1.1
* Rebuilt URL to: https://35.186.1.1/
*   Trying 35.186.1.1...
* TCP_NODELAY set
* Connected to 35.186.1.1 (35.186.1.1) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
*  subject: CN=normal_domain.tld
*  start date: Nov 15 05:41:39 2019 GMT
*  expire date: Nov 14 05:41:39 2020 GMT
*  issuer: CN=normal_domain.tld
*  SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
> GET / HTTP/1.1
> Host: 35.186.1.1
> User-Agent: curl/7.58.0
> Accept: */*
> 
* Empty reply from server
* Connection #0 to host 35.186.1.1 left intact
curl: (52) Empty reply from server

可以看见,证书和域名都暴露了。

解放方法

1、如果使用的宝塔面板

新添加一个站点,以当前服务器ip为域名,自签IP证书(本文末尾会提供空白的自签证书,任何域名都可使用),打开 【站点设置->配置文件】,在如图位置加上return 444;

最后将该站点,设置为“默认站点”即可。

2、Nginx配置

Nginx 版本高于等于 1.19.4,才可以使用 ssl_reject_handshake 特性来防止 SNI 信息泄露。如果 Nginx 版本太低,可以看看姥爷的这篇文章自编译 Nginx

下面就来讲讲 ssl_reject_handshake 怎么用。只要新添加个443端口默认块就可以了。

#新添加的443端口块,如果使用了错误的 Hostname,SSL 握手会被拒绝
server {
    listen 443 ssl default_server;
    #如果有IPv6地址需加入下面这行,否则不用下面这行
    listen [::]:443 ssl default_server;
    ssl_reject_handshake on;
}

#常规的443端口,包含正确的域名和证书。对于携带正确 Hostname 的请求,服务器会继续做后续处理
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name example.com;
    ssl_certificate example.com.crt;
    ssl_certificate_key example.com.key;
}

重启nginx即可。

3、CDN IP加白名单

给CDN IP添加到白名单,只有CDN IP才可以访问源站。如果套的是cloudflare,cloudflare IP为:https://www.cloudflare.com/ips/

4、屏蔽 censys.io和shodan 的IP段和UA

这种方法只能防君子不防小人,而且还有很多未知的类似服务的IP和UA。

以censys.io为例,将它的IP段加到nginx deny配置中,如果用的是aapanel或者宝塔,可以在/www/server/panel/vhost/nginx下新建一个blockips.conf配置文件:

deny 162.142.125.0/24;
deny 167.94.138.0/24;
deny 167.94.145.0/24;
deny 167.94.146.0/24;
deny 167.248.133.0/24;
deny 192.35.168.0/23;
deny 199.45.154.0/24;
deny 199.45.155.0/24;
deny 206.168.34.0/24;

如果服务器带IPv6,还需添加IPv6段:

deny 2620:96:e000:b0cc:e::/64;
deny 2602:80d:1000:b0cc:e::/80;
deny 2602:80d:1003::/112;
deny 2602:80d:1004::/112;

censys.io的IP段有时会更新,所以留意下官方的说明:https://support.censys.io/hc/en-us/articles/360043177092-Opt-Out-of-Data-Collection

为了以绝后患,可以将其UA和ASN (censys.io的ASN为398324,shodan的ASN为10439) 加入到cloudflare防火墙。

最后附上空白自签证书。

继续阅读

wordpress更新提示“另一更新正在进行”

更新升级wordpress的时候出现“另一更新正在进行”错误提示,这种情况,一般出现在更新升级中断后,再次点击升级时。解放方法也很简单:

方法一、通过MySQL数据库管理工具(比如 phpMyAdmin),在 wp_options表中找到 core_updater.lock记录并将这一列数据删除。

方法二、通过终端登录数据库,假设表前缀是wp_,数据库是wordpress,

mysql -u root -p

use wordpress;

select * from wp_options where option_name='core_updater.lock';

修改wordpress图片默认保存路径为二级域名

WordPress默认是将多媒体文件存放在/wp-content/uploads/目录下。

1)wordpress3.5版本后在设置>>多媒体中找不到媒体路径的选项

不过我们可以通过下面的代码重新找回设置选项,将代码添加到主题目录的functions.php文件中。

//找回上传设置
if(get_option('upload_path')=='wp-content/uploads' || get_option('upload_path')==null) {
 update_option('upload_path',WP_CONTENT_DIR.'/uploads');
}
//找回上传设置结束

2)在后台>>设置>>多媒体中能看到如图增加的功能选项

修改保存路径为二级域名目录。