使用公安部研发的“中小网站安全防护终端”免费为网站提供WAF

注意

该软件已经停更,建议用云锁、安全狗这些防护软件

前言

“中小网站安全防护终端”是公安部第三研究所研发的一款服务器本地WAF防护类软件,其向各类站点免费开放下载,旨在提升全国的网络安全水平。

因为我的博客访客每天只有150左右,没有什么攻击价值=_=。没人攻击就没法测试这套防护软件的具体防护效果,不过反正是免费的东西,加上总是比没有好~

部署方法

注册并登录中小网站安全防护网站

登录后点击左侧的“本地防护”。这里还有个“云防护”,不用管他,实测在这篇文章发布的时候已经用不了了,据说是用的阿里的云防护基础版。

之后先下载适合你的操作系统的防护软件(本文演示使用Linux版),然后点击“服务器管理”。

新增一台服务器,填入对应的信息。需要说明的是: 备案号这里填的是公安备案号,不是ICP备案号。服务器IP栏填外网IP,物理地址是你的网卡的MAC地址。个别云厂商无法查看外网网卡MAC地址的,填内网网卡的MAC也行。填完后保存即可。

将下载到的防护软件上传到服务器上,解压并安装。命令如下:

tar -zxvf 软件压缩包的文件名
cd WebProtect-WPT
chmod 777 ./install.sh && ./install.sh

之后耐心等待安装完成即可。

安装后访问https://ip:7000,来打开WEB面板,默认账号密码为admin/admin(登录后建议更改)。

登录后会要求你输入序列号,否则是看不到功能模块的。序列号可以在中小网站安全防护网站上查看。点开服务器列表,在箭头所指的位置上能看见“本地防护安装码”,复制那个码填过去即可。如果提示码还未生成的话就要等一段时间了,我当时等了有半小时。

安装并授权后的界面

结语

遇到问题欢迎在评论区留言哦~

Guzzle遇到4xx和5xx的状态码时返回异常的解决办法

前言

写了个API商城的项目,就是向外收费提供API接口。其中实名认证相关的接口是调用的阿里云的,他们有个很操蛋的设定——如果认证失败会返回555状态码。要知道5xx可是服务器出错才会返回的,这种返回值说实话对api调用方不是很友好。我的习惯是,只要接口调用成功就应该返回2xx的状态码,然后在返回值里面加入code字段来标注错误码。

阿里的这种返回方式触发了Guzzle的异常,很头疼。

解决办法

后来耐心翻阅了一下官方手册,发现可以在new对象的时候加入http_errors=false的选项来禁止Guzzle生成异常。

具体示例代码如下:

$client = new Client(['http_errors' => false]);
$response = $client->request('GET', 'https://xxx.com/xxx', ['headers' => $post_head, 'form_params' => $post_data]);

结语

实际应用中遇到任何问题可以在评论区留言。我会协助你解决的!

利用位运算求数字的补数

题目

给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。

注意

1.给定的整数保证在32位带符号整数的范围内。
2.假定二进制数不包含前导零位。

解题思路

求出一个与输入数字在二进制位的数量上相同,且每位都为1的数字,之后利用该数字和输入的数字做异或操作,即可得出补数。

例如

2的二进制为10,和他二进制位数相同,且全为1的十进制数为3,即二进制11。2与3做异或操作,得到二进制01,这也就是2的补数1。

代码

#include <stdio.h>

int main(void)
{
    int in = 0;
    int tmp = 1;

    scanf("%u", &in);

    // 不断将tmp左移并在末尾填充1,当tmp的位数与in相同时tmp大于in,循环终止。
    while (tmp < in) {
        tmp <<= 1;
        tmp += 1;
    }

    printf("%u\n", tmp ^ in);
}

呼~夜跑19公里

不知道是哪根筋抽了,就是想趁着年轻挑战一下半马,于是乎,甩开手迈开腿,说干就干!

不过,事实证明我还是太天真了。平时只跑七八公里的渣渣突然想挑战一次半马,那个难度真的是非同小可。路上通过回家的路口的时候每次都要进行激烈的思想斗争——我要不要放弃这次征途?

好在我选择了不放弃,当离开了最后一个通向温馨港湾的路口之后,我的后路就被切断了,前方只有一眼望不到边的征途。

前13公里的时候,坚持跑了下来,没有停的那种。但是到了后面的部分,每迈一步都好像害了一场大病一样,连续跑上几百米便要停下来歇歇。我觉得路上经过的司机们可能会以为我是个四处流浪的孤儿=_=…

最后我还是没有挑战成功,当离成功就剩两公里的时候,我已经间歇性累计走了有三公里了。我不得不承认这是一次失败的挑战,当接近晕倒的边缘的时候我呼叫了支援<_<,于是,今晚这次失败的挑战就定格在了19.14公里的刻度上。但是不要紧,未来十天内,我一定会成功战胜半马的!

最后附上跑步数据和路上拍个景色吧(点击可以查看原图,未经压缩)

熊掌号更换绑定域名教程

前言

前些日子给博客换了个域名,把网站折腾完了想起来还有个百度熊掌号来着。

不得不说百度给熊掌号设计的交互界面看的我着实很懵比啊,找了半天都不知道如何更换主域名。网上搜了一下,清一色告诉我无法更换主域,只能更换子域……

不死心的我昨天又去熊掌号官网逛了一圈,终于有重大发现了……

更换主域的方法

步骤一

先去百度搜索资源平台添加一个新的站点。

步骤二

登录熊掌号ID,进入搜索资源平台。 在左侧栏底部选择 :设置->内容源设置 。如图:

点击内容同步设置,如图:

在弹出的新页面中取消你的旧域名的域名同步。

步骤三:

返回刚刚的界面,点击”绑定设置“。 如图:

在弹出的新页面中取消当前域名的所有子域的绑定,期间熊掌号会提示你如果取消将会影响对站点的收录。不用管,直接取消。

当你取消了当前绑定的站点的时候你就打开了新世界的大门,因为此时你就可以按照页面提示绑定新的主域了!

结语

因为文章是在我换绑成功后凭借记忆所写,可能有所纰漏。如果你在按照文章步骤走了一遍之后发现走不通,那么请在评论区留言,我将会一对一的帮你看的。

为绑定到同一站点的不同域名配置不同的robots.txt

前言

这个需求其实很广泛,就比如说:网站需要做动静分离,静态资源走CDN加速。

这就要求静态资源要有一个单独的域名,但多绑定一个域名意味着权重将会被分散,而更可怕的是搜索引擎有可能会误认为静态域名访问到的网站才是正版,而将你的主域名打入冷宫。如何避免这种情况发生呢?我们可以为不同的域名设置不同的robots.txt,在用于访问静态资源的域名的robots.txt上设置规则禁止搜索引擎爬取页面。

实现原理

要实现这个目的我们可以借用WEB服务器的URL重写功能。定义规则,实现当访问的域名是主域名时返回robots.txt,而当访问的域名是静态资源域名时则返回staic_robots.txt

配置过程

这里给出Nginx服务器下的配置方法。

步骤一:

在网站根目录创建文件:static_robots.txt。写入如下内容来拒绝所有搜索引擎对本域名的爬取。

User-agent: *
Disallow: /

步骤二:

在站点的Nginx配置文件中加入下面的配置,意思是当访问的域名是static.ibadboy.net的时候,保留当前URL并返回static_robots.txt的内容。

if ($host = static.ibadboy.net) {
    rewrite  /robots.txt /static_robots.txt last;
}

效果

这里我分别用主域名和静态资源域名来访问robots.txt。

通过主域名访问robots.txt
通过静态资源域名访问robots.txt

结语

通过这种方法,可以有效的防止搜索引擎爬取辅助域名而导致网站的主域名被分散权重,进而保护我们的网站在搜索引擎中的排名不受影响。如果你还有什么问题可以在文章下方评论,我会第一时间回复。

无缝从Typecho迁移到WordPress,支持WordPress 5

前言

用了一年的Typecho,总结起来就是各种的不尽人意——长期不更新的系统配合着短缺且不更新的插件……凡此种种,令人头疼。

总之,没有一定技术能力的筒子还是不建议用Typecho,安下心来静静的用WordPress就挺好,可以享受社区带来的大量插件和美观的主题,自己只需要更新文章而不必过问技术问题。至于网上关于WordPress臃肿不能承载大访问量的言论看看就好,毕竟对于个人博客来讲,谈高负载实在是没有意义=_=…

介绍ByeTyp

当然,如果你不小心已经入了Typecho的坑也没关系,因为接下来我就要隆重介绍我的第一个开源项目——ByeTyp

ByeTyp是基于TypExport二次开发并提供长期维护的一款Typecho无缝转WordPress的插件。因插件原作者已经超过五年未继续维护项目,且项目本身存在很多BUG,同时授权方式又是MIT,所以我就将代码拷贝下来经过修复后发布了全新的ByeTyp项目。

不多啰嗦了,直接介绍下具体迁移流程,当然,好用的话记得给个Star,如果遇到问题可以在文章下面评论,我会第一时间回复并解决的。

ByeTyp迁移的原理是:将Typecho中的数据导出为WordPress可识别的WXR文件。

安装方法

访问ByeTyp项目主页:https://github.com/ibadboy-net/ByeTyp 下载最新版的插件。下载后将插件上传并安装到Typecho上。注意上传的时候要为插件的文件夹命名为ByeTyp,否则插件将无法正常运行。

使用方法

启用插件后,按照以下顺序操作,导出当前Typecho的数据。

控制台->数据导出->导出XML文件

当你拿到了后缀为.xml文件的时候你就离成功近了一大步了。接下来你需要将xml文件导入到WordPress中。按照这个顺序操作:

工具->导入->WordPress->运行导入器(未安装的话就先安装)->选择文件->上传并导入->选择导入的文章所属的用户,之后提示是否导入媒体,随便点就行

之后你就会看到你在Typecho上的文章、分类目录、标签、评论等数据都出现在了WordPress上,但是别急着高兴,因为我们还没能将附件也导入过来。

迁移附件

将Typecho站点中的/usr/uploads目录迁移到WordPress的/wp-content目录下。之后在数据库中替换图片资源路径,执行以下SQL语句:

UPDATE wp_posts SET post_content = REPLACE( post_content, '/usr/uploads/', '/wp-content/uploads/');

结语

至此,迁移工作已经圆满结束,如果遇到任何问题请在本文章下方评论!

laravel查询记录时连关联表的记录一同查询

前言
刚接触laravel开发框架,一直纠结一个问题:为什么有时候查询记录时会顺带输出关联表的内容,有时候却不输出?
后来翻官方文档的时候才知道关联表默认是懒加载,只有在关联表数据被调用的时候才会加载出来。为了实现在不调用关联表数据的情况下默认查询输出关联表数据可以将加载方式改为预加载

预加载的方法
在调用查询的时候加上with(‘关联表的函数名’)即可,如:

return User::with('comment')->where('id', $id)->first();

这样,在输出user记录的时候就会默认附带上和这个用户有关的comment记录。

破解navicat时提示error on Decrypt request code的解决方法

出现这个提示是因为新版的navicat的加密算法已经变更,而你还在使用旧版的注册机。

最新版注册机GitHub地址:
https://github.com/Deltafox79/Navicat_Keygen/releases

PHP7提示:could not find driver(SQL:……)

出现这个提示是因为PHP没有启用数据库扩展,这里演示启用MySql数据库扩展,其他数据库的扩展请自行百度
在php.ini文件末尾加入以下内容保存即可。

extension=php_pdo_mysql.dll
extension=php_mysqli.dll

支付宝小程序获取用户唯一 ID的方法

以下示例由JAVA编写,请求成功后将返回user_id字段。

AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");
AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
request.setGrantType("authorization_code");
request.setCode("4b203fe6c11548bcabd8da5bb087a83b");
request.setRefreshToken("201208134b203fe6c11548bcabd8da5bb087a83b");
AlipaySystemOauthTokenResponse response = alipayClient.execute(request);
if(response.isSuccess()){
    System.out.println("调用成功");
} else {
    System.out.println("调用失败");
}

homestead环境部署后连接MySql数据库的方法

IP和数据库名就是在Homestead.yaml中设置的。
端口号:3306
用户名:homestead
密码:secret

homestead环境中使用Laravel Mix报错的解决方法

报错信息汇总(解决方案在文章下面)

报错信息1:
此报错在执行yarn install命令时弹出

error An unexpected error occurred: "EPROTO: protocol error, symlink '../../../parser/bin/babel-parser.js' -> '/home/vagrant/Code/cloudsystem/node_modules/@babel/core/node_modules/.bin/parser'".
info If you think this is a bug, please open a bug report with the information provided in "/home/vagrant/Code/cloudsystem/yarn-error.log".
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.

报错信息2:
此报错在执行npm run watch-poll命令时弹出

sh: 1: cross-env: not found
npm ERR! file shnpm ERR! code ELIFECYCLE
npm ERR! errno ENOENTnpm ERR! syscall spawn
npm ERR! @ development: `cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js "--watch" "--watch-poll"`
npm ERR! spawn ENOENT
npm ERR!npm ERR! Failed at the @ development script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:npm ERR!     /home/vagrant/.npm/_logs/2019-06-10T01_49_28_082Z-debug.log
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! @ watch: `npm run development -- --watch "--watch-poll"`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the @ watch script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR!     /home/vagrant/.npm/_logs/2019-06-10T01_49_28_139Z-debug.log
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! @ watch-poll: `npm run watch -- --watch-poll`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the @ watch-poll script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR!     /home/vagrant/.npm/_logs/2019-06-10T01_49_28_187Z-debug.log

解决方案

问题1的解决方案:
为命令添加–no-bin-links参数

yarn install --no-bin-links

问题2的解决方案:
步骤一:
修改项目根目录下的package.json,将`scripts中的内容修改为以下(删掉原内容粘贴新内容即可):

"dev": "npm run development",
"development": "NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch": "NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch-poll": "npm run watch -- --watch-poll",
"hot": "NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
"prod": "npm run production",
"production": "NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"

如图:
修改后的package.json文件

步骤二:
执行命令

npm run watch --watch-poll

此时Laravel Mix即可成功运行。

国内申请谷歌账号的方法——永久有效

谷歌搜索:免费欧洲手机号
可以看到很多用于免费接收手机验证码的网站,用那些国外的手机号接收验证码完成注册即可。

gorm无法连接SQL server 2008(mssql)的解决方法

现象

连接数据库的时候gorm抛出错误提示:wsarecv: An existing connection was forcibly closed by the remote host.

解决办法

如果是sql server 2008则安装sp4更新包
下载地址:SQLServer2008SP4-KB2979596-x64-CHS

如果是sql server 2008 R2则安装R2 sp3更新包
下载地址:SQLServer2008R2SP3-KB2979597-x64-CHS

注意事项

安装更新包需要先确定下其他程序是否需要读取数据库,这个更新包貌似会改变一些东西。我之前就是因为安装了更新包导致客户现有的程序全都不能运行了=_=

出现其他问题请在评论区留言。