使用公安部研發的“中小網站安全防護終端”免費為網站提供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記錄。

支付寶小程式獲取使用者唯一 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環境中使用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

注意事項

安裝更新包需要先確定下其他程式是否需要讀取資料庫,這個更新包貌似會改變一些東西。我之前就是因為安裝了更新包導致客戶現有的程式全都不能執行了=_=

出現其他問題請在評論區留言。