有趣驗證碼的分析

前言

之前在大學的時候,無意間發現學校的網站後台登入畫面,有驗證碼,當初沒有多想,就是跟一般的驗證碼相同,後來點開驗證碼的圖片連結之後,發現意外的有趣XD…

分析步驟

首先,我們先要拿到相關的連結,就以下面圖中的連結來說好了。

我們會看到登入那邊有一個小驗證碼,對驗證碼圖片開一個新分頁的連結,接著會到下圖所示。

接著,可以看到是一個叫做『authimg.php』的PHP程式在負責產生驗證碼,後面接的參數Code就是負責產生驗證碼裡面的數字。

乍看之下,並沒有什麼特別的,看起來就是一個很正常的亂數驗證碼,不過事實並非這樣。

刪減亂數字串

我試著從字串最後面開始刪減亂數字串之後,我們可以發現到,驗證碼裡面數字並不會跟著變動!不過背景跟數字擺放角度會變,當刪減到剩下長度為8以下的字串時候,可以發現到數字會減少,到長度剛好為8時,每兩個字元的字串正好是對應到一個數字,所以驗證碼可以得出前8個字元分別對應到4個驗證碼裡的數字。

得到確切驗證碼方法

知道是前8個字元對應4個驗證碼的數字之後,可以知道每2個字元對應到1個驗證碼中的數字,以上面連結中為例。驗證碼中數字為『9496』


QK34YS34241124MOQKICA0MOMOEG34

取前8個字元,則變成


QK34YS34

那剩下『QK』的時候,可能會以為數字是:9,但是顯示出來卻是:4

而字串『34』得出來卻是:9

後面的『YS』與『34』也是如此。

所以我們可以得到驗證碼設計的演算法步驟:

  1. 取Code參數值字串中前8個字元
  2. 前4個字串與後4個字串先分成兩組
  3. 二組字串內部分別兩兩一組之後互相對調兩者再合併
  4. 得到我們要的驗證碼

以『QK34YS34』為例。照步驟則拆成兩組,分別為:『QK34』與『YS34』,接著再相互對調,變成:『34QK』與『34YS』最後的字串為:


34QK34YS

建立數字對應表格

有了得到確切驗證碼的字串之後,從上面得到:『34QK34YS』對應到的是『9496』。不過,這樣還是沒有得到全部的字串對應數字的驗證碼,需要找出0~9所有的對應表。所以我們多重新整理幾次連結之後,擷取出有包含0~9所有字串可能。

接著建立對應表格如下

字串字串對應的數字
A00
241
IC2
EG3
QK4
MO5
YS6
UW7
B08
349

驗證方法

為了要驗證方法是否正確,我假設了一個驗證碼答案的數字為『1234』

則對應字串為:『24ICEGQK』,再反推先前推導出的驗證方法得到『IC24QKEG』

再把上面講到的方法反推,所得到的字串放到連結,去請求驗證碼圖片並得到的結果如下

所以,此取得驗證碼方法完成。

後記

驗證碼還是不要這麼容易被識別出比較好,不然就會造成這樣的結果。

我計畫做出可以偵測在網頁裡面,有沒有這個驗證碼連結。分成JavaScript與PHP版本。做好在更新文章內容吧XD

AWS Workshop(2017/11/17)

前言

在參加MOPCON的時候,因為在Unconf中有舉辦這場演講,所以在因緣際會下,也接到了這場免費的工作坊邀請。(相關連結

這場工作坊Workshop最主要是基礎入門AWS的雲端運算平台,對於我這個沒有使用過AWS來說,是在最適合不過的課程,再加上是免費的,所以二話不說也就報名了。

課程筆記

上課的課程筆記我把它記在Gist上,若有需要可以參考。

最主要的操作課程如下:

  • 建立EC2 and MySQL Database
  • Launch Your Amazon Simple Storage Service(S3)

前置作業

在開始後面的兩個Lab操作之前,務必先要註冊一個AWS的帳號,註冊帳號方式,不在此教學文章裡面,不過網路上很多。還有重要的一點就是,需要有一張信用卡,因為信用卡需要用來預先知道你是否有能力可以付款服務,因此需要信用卡資訊,在註冊成功後,還需要讓AWS象徵性的扣一美元。本次兩個WorkShop是有附教學文件檔的,但礙於是訓練的課程,所以就不會在此公開,需要的人可以寄信向我索取。

那下面的是我濃縮文件上的教學,以及自己改過的版本,讓整體的教學更簡單易懂。因為在課程中,台上帶頭做的講師除帶的較緊湊之外,加上文件並沒有寫的很清楚。在這樣的情況下,我當時與朋友都沒有跟上,我是自己事後看文章的教學成功的。

客戶端需要的環境

這裡指的是你自己的電腦環境,作業系統我建議是Unix-based的。像是Linux發行版本中的Ubuntu, Fedora等都可,不拘,不要Windows就好。雖然在教學文件中是以Windows為主,但是在SSH連線時我覺得異常的難用,因為需要下載Putty與使用PuttyGen來進行連上機器的動作,這兩個東西在我學會Linux相關的作業系統之後,就很少在用了。

建立EC2 and MySQL Database

從本章節開始,會紀錄該如何從無到有建立一台Amazon EC2和MySQL資料庫

因為AWS上所有的服務都是切開的,所以要建立一台機器需要花很多的設定包含內部的子網路,允許Port number的安全規則等都需要一一的設定,因此整個教學步驟會很多。廢話不多說,從下面開始吧!

步驟一

登入AWS並進到開始的畫面。在登入成功之後,會跳轉到下面的頁面。

在左上角的選單中,可以發現到有一個US West…等的字樣,當按下去之後,就可以選擇希望建立要使用的主機地點,地點是可以隨意選擇的。

步驟二

建立一個自己的VPC,首先先從首頁頁面中進入。

接著會看到有一個預設的VPC,我們在這裡自己建立一個,不使用預設的VPC。

接著按下『Create VPC』按鈕會跳出畫面,如下圖所示。

接著在表單裡面依照對應填入

Name tag: My Lab VPC
IPv4 CIDR block: 10.0.0.0/16

如下圖中所示。填入之後按下『Yes, Create』就把VPC建立起來了。

步驟三

在同一個頁面中,點選『Internet Gateways』(如下圖所示)並按下『Yes, Create』按鈕

接著選擇新建立好的『』並點選『Attach to VPC』按鈕把VPC建立(Attach)起來,如下圖所示。建立之後,就會看到剛剛建立的Internet Gateway已經是Attached的狀態了。

接著同一個頁面左邊,選擇『Subnets』並依照下圖建立一個名為: 『Public Subnet 1』的子網路。VPC記得選擇我們剛剛所建立的『My Lab VPC」Availability Zone選擇『us-west-1b』,IPv4 CIDR block選擇『10.0.1.0/24』。接著按下圖中的『Yes, Create』。

接著重複上面的步驟,在建立一個名為『Public Subnet 2』的子網路。Name tag改成『Public Subnet 2』,VPC選擇『My Lab VPC』,Availability Zone選擇『us-west-1c』,IPv4 CIDR block選擇『10.0.2.0/24』,如下圖所示。

接著選擇『Public Subnet 1』,下方Tab切換到『Route Table』並點選連結『』,如下圖。連結的文字不一樣沒有關係,因為每個產生出都是隨機的。

進到Route Table的連結頁面之後,按照下圖所示步驟,把Table設定好,接著按下圖中的『Save』按鈕。Target在點下去之後會有提示填入的值,選擇剛剛所建立的『My Lab IGW』。

『Public Subnet 2』也是像上面的步驟重複一遍。這個時候我們可能不需要在重複做一遍,因為AWS會幫我們把『Public Subnet 2』設計好。不過保險起見,還是重複步驟去確認是否有設定完成。

步驟四

這步驟中,建立我們要的『Instance』。回到AWS console並點選『EC2』。

點選『Launch Instance』按鈕。

從圖中可以看到,有很多映像檔可以選擇。在我參加的Lab中,是選擇第一個『Amazon Linux』作為要啟動的Instance,那這一次在本次教學中,我選擇下方的『Ubuntu 16.04』作為這次要啟動的映像檔,當然這邊我們也可以自行選擇所需要的映像檔。

接著會來到方案的部份,選擇預設的『t2.micro』就好。接著選擇:Next: Configure Instance Details。

接下來在設定部份,需要注意下圖圈起來得部份。選擇剛剛所建立的Subnet Network和VPC。

  • Network: My Lab VPC
  • Subnet: Public Subnet 1
  • Auto-assign Public IP: click Enable

沒問題就按下『Next: Add Storage』,這裡就用預設的設定就好,不需要更動。按下下一步『Next: Add Tags』按鈕。

在設定Add Tags頁面中,按下『Add Tags』接著就按照下圖所示,把需要的Key跟Value填入。並按下『Next: Configure Security Group』。

在『Configure Security Group』設定頁面中,主要是要設定允許可以通過的Port Number並設定清單。按照下圖中的2~3步驟去產生三個協定可以允許通過的Port Number。裡面的步驟1需要注意的是,需要自己填入我們自己取的Security Group名稱和敘述。在最後按下『Review and Launch』按鈕。

在Review步驟中,基本上就是看前面的設定的東西有沒有錯誤,沒問題後按下『Launch』。

這時候需要選擇或是建立自己的Key Pair,選擇新增一個Key Pair(Create New Key Pair),如下圖所示。在按下『Download Key Pair』之後,才可以按下『Launch Instance』。這個Key Pair 的目的是要用來使用SSH連線到主機所使用。

接著顯示出下圖這個畫面,代表Instance就開始啟動中了。

同一頁面中拉下來有『View Instances』的按鈕,點下去就可以回到Instance的清單。

等到Instance的狀態變成如下圖所示,即代表Instance已經建置完成可以開使用了。

接著打開我們的Terminal,依照圖中圈選起來的位置可以找到連線的IP address

接著輸入下面的command把剛剛下載的Key Pair file 權限改成400


chmod 400 peter2ubuntu.pem

接著輸入下面command開始連線


ssh -i "your-key-pair-file.pem" user-name@your-ip-address

連線過去的user name會隨著使用的Image映像檔不一樣。若要確定是哪一種可以點選下圖中的『Connect』按鈕,接著會出現連線的相關資訊。

接著就連線成功了!

Create a VPC security group for the RDS DB Instance—-建立RDS關聯式資料庫Instance

如果有用VPS(Virtual Private Server)相關的服務就會知道,這個EC2機器建立起來只會有memory和CPU,並沒有storage的儲存空間,所以要有儲存空間的話,需要再去使用RDS(Relational Database Instance)建立Relational Database關聯式資料庫。

在建立Database Instance之前,需要先設定一些與建立EC2類似的設定,Subnets子網路和Security Group的規則等。

步驟一

回到AWS console management並點選VPC進入到VPC的頁面(如下圖所示)接著左邊有一個可以捲動的選單,往下拉找到『Security Groups』連結並選擇下去。

接著如下圖裡的步驟標示所示,建立一個給Database的Security Group

記得要選擇VPC為之前所建立的,不要使用預設的VPC。填完之後就按下『Yes, Create』按鈕。

建立之後,會看到清單多了『DBSecurityGroup』可以選擇。依照下圖的數字步驟,來設定Inbound Rules。

按下『Edit』按鈕之後,如下圖所示,可以知道要填入的值,唯一要注意的是,source是要選擇『LabSecurityGroup』的Group ID。

在上圖的同一個頁面中,左邊的捲動菜單選擇『Subnets』子網路的設定。

選擇『Public Subnet 1』注意下面的Availability Zone: 『us-west-1b』。

選擇『Public Subnet 2』注意下面的Availability Zone: 『us-west-1c』,每個人的都不盡相同。

注意自己當初選擇的Zone,在之後建立新的『Private Subnet』給DB Instance時會需要用到。

看過之後,我們可以來建立新的『Private Subnet』了。首先依照下圖方式,建立一個新的Subnet名為『Private Subnet 3』,注意框起來的部份。

接著再去用上面同樣的方法去建立『Private Subnet 4』。

Availability Zone的選擇在這個區域下只有兩個可以選,所以我們選擇的時候,就直接分別選擇:『us-west-1b』與『us-west-1c』(如上兩張圖所示)

接著要建立『DB Subnet Group』,先回到AWS Management Console,並點選RDS。進到RDS的畫面之後,再點選左邊選單的『 Subnet Groups』。

接著按照下圖所示,把剛剛建立的『Private Subnet3』和『Private Subnet4』串成一個Subnet Group。

 

之後重複兩次上圖中的動作,就會變成下圖的樣子。

按下『Create』之後,會回到原來Sunet Group的清單,這時候會沒有顯示剛剛建立的清單,這時候只要按下右上角的圖案,就會顯示剛剛我們所建立的Subnet Group了。

步驟二

上面把Subnet 與Subnet Group設定好之後,回到AWS console management並選擇:RDS(圖中有標示)

進入之後如下圖點選『Get Started Now』。

接著會進到可以選擇要使用的資料庫的畫面,在當天Work Shop的時候,有些人的畫面是新版的,那我還是使用舊版的,下圖也是舊版的,我沒有看過新版介面長怎樣,等真的我也被改版的時候再來更新吧XD。接著點選『MySQL』。

接著點選『Select』按鈕。

MySQL DB server 選擇『Production』

接著下一步之後,可以看到下圖中的DB Instance,預設是比較大的DB Instance Class,我們在這裡調整成最小的DB Instance Class以及其他的設定如下圖一樣一併的調整。

往下拉選單之後,下面有需要填寫相關DB的部份,像是:DB Instance 名稱,使用者名稱,密碼等。如下圖,填完成之後,接著下一步(Next Step)。

接著下圖所示,需要選擇對應的VPC以及Security Group還有設定Database Name。其他的設定預設就好,唯一需要注意的是『Publicly Accessible』的這個選項,預設是『No』,當選擇No的時候,EC2以外的裝置或是機器是無法連近來這台DB server的,當選擇『YES』時,才可以在EC2機器外部連線到這台DB server。

接著設定好之後,捲軸往下拉即可看到『Launch DB Instance』

當按下去之後,就會出現下圖的訊息,代表DB Instance已經完成建立,目前正在建置中,要看最新的DB Instance 的狀態,可以按下下圖中的按鈕。

當圖中的狀態(Status)已經是『Available』的時候,代表DB Instance已經建置完成了。

在下圖中有兩個需要注意的地方,一個是DB的狀態,還有End Point,End Point指的是連線DB的主機位址,這個在EC2內部裡面是需要的。這樣才可以知道DB要連線到哪一台主機。

步驟三

完成建置DB Instance之後,我們就要來使用先前建置好的EC2機器來進行連線到我們建置好的DB Instance把這兩個連接起來。

從這裡開始會跟Lab上面的會有出入,因為如果是以這篇的EC2主機的話,用的是Ubuntu的主機,所以這篇下面也是以Ubuntu的主機作為基礎。

而Lab上面的則是以:yum等指令為主。

首先先用SSH連線到主機。


ssh -i "your-key-pair-file.pem" user-name@ip-address

更新mirror連結與位址


sudo apt-get update

安裝 Nginx以及PHP


sudo apt-get install nginx

在瀏覽器輸入IP Address得到下面的頁面。

安裝MySQL server


sudo apt-get install mysql-server

會要求設定root password

連線到剛剛我們設定好的MySQL DB Instance


mysql -h db.choi5coyenv6.us-west-2.rds.amazonaws.com -u your-user-name -p

登入成功之後,如下圖所示。

執行查找Database name


select database();

接著會如下圖所示。

安裝:php-cli, php-fpm, php-mysql等套件。


sudo apt-get install php-cli php-fpm php-mysql

安裝(可選/參考)php-curl, php-mcrypt等套件。


sudo apt-get install php-curl php-mcrypt

編輯php.ini檔案並找到下面的設定值改成0


sudo vim /etc/php/7.0/fpm/php.ini

# In php.ini 檔案中找到下面的值改成0

cgi.fix_pathinfo=0

重新啟動php-fpm的服務


sudo systemctl restart php7.0-fpm

# 等價下列的command,兩者皆可,上面印出的訊息較多。

sudo service restart php7.0-fpm

設定Nginx config file設定檔


sudo vim /etc/nginx/sites-available/default

#  把檔案改成下列的形式

# 要改的地方為:index.php, server_domain_or_IP

# location ~ \.php$ 以及 location ~ /\.ht的部份

 

server {
listen 80 default_server;
listen [::]:80 default_server;

root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;

server_name server_domain_or_IP;

location / {
try_files $uri $uri/ =404;
}

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}

location ~ /\.ht {
deny all;
}
}

測試Nginx 的語法是否正確,語法正確後,接著重新啟動Nginx服務


sudo nginx -t

sudo service nginx restart

接下來建造一個PHP 測試檔案,如下指令。


sudo vim /var/www/html/info.php

info.php內容


<?php

phpinfo();

接著就會看到類似下面的圖phpinfo的圖了。

測驗完成之後,記得把測試檔案刪除。


sudo rm /var/www/html/info.php

參考資料
相關文章
  • Create an alarm in CloudWatch and SNS service (Lab 1 continuation)
  • Launch Your Amazon Simple Storage Service(S3)(Lab 2)

如何將 WordPress 升級與安裝外掛時繞過 FTP

前言

這是一個常見的WordPress問題

很多人常會遇到,這裡稍微紀錄一下發生的原因還有解決的方式。

  1. 權限問題:放置WordPress的目錄權限有誤
  2. wp-config.php尚未設定正確

解決方式

  1. 權限問題,將wp-contentwp-includes目錄改為擁有者與群組為:www-data:www-data
sudo chown -R www-data:www-data /var/www/wordpress/wp-content/
sudo chown -R www-data:www-data /var/www/wordpress/wp-includes/
  1. wp-config.php檔案裡加入下列設定
define('FS_METHOD', 'direct');

總結

此為常見的WordPress問題,很多人剛開始入門的時都會遇到,經過這一次,筆者也有遇過數次,有時後也會忘記解決的方式,因此特別將此解決的方法寫成一篇文章並做成筆記供日後可以參考。

安裝ThinkFan風扇控制軟體

在Ubuntu 16.04上安裝ThinkFan風扇控制軟體

此篇文章主要是紀錄我在X201 上的Ubuntu 16.04 安裝ThinkFan

概要

  1. ThinkFan介紹
  2. 安裝方法
  3. 結論

ThinkFan介紹

ThinkFan 是一款ThinkPad上用來控制風扇的一種方法。
在Ubuntu 上有提供工具可以安裝與設定

安裝方法

前置條件

  1. 假設使用的是:Ubuntu 16.04
  2. 使用ThinkPad X201
  3. 對Ubuntu 有一定的了解

安裝步驟

  1. 執行更新鏡像來源
sudo apt-get update
  1. 安裝ThinkFan
sudo apt-get install thinkfan
  1. 設定ThinkFan(開啟ThinkFan的控制權)
sudo echo "options thinkpad_acpi experimental=1 fan_control=1" | sudo tee /etc/modprobe.d/thinkpad_acpi.conf
  1. 修改ThinkFan設定檔,把設定檔的最下面兩行註解拿掉
# 先用vim 開啟檔案
sudo vim /etc/thinkfan.conf
# 把設定檔的最下面兩行註解拿掉
tp_fan /proc/acpi/ibm/fan
tp_thermal /proc/acpi/ibm/thermal (0, 10, 15, 2, 10, 5, 0, 3, 0, 3)
# 先用vim 開啟檔案
sudo vim /etc/default/thinkfan
#把 START=no 改成 START=yes
  1. 筆電重新啟動並啟動ThinkFan服務
sudo service thinkfan restart
  1. 設定Fan的轉速
# 最大風速
echo level 7 | sudo tee /proc/acpi/ibm/fan
# 風速自動
echo level auto | sudo tee /proc/acpi/ibm/fan

參考文章

  1. 安裝ThinkFan風扇控制軟體
  2. How_to_control_fan_speed
  3. THINKPAD X220 UBUNTU CONFIGURATION GUIDES

How to improve my PHP library?

Introduction

In this article, I reflect on my open source project and try to find the way to improve it.

Table Of Contents

  1. The Code Style
  2. The Dependencies
  3. The PHP version
  4. Conclusion

The Code Style

  1. The code standard is under the PSR-2 and use the StyleCI to fix them automatically.
  2. the code space which is before -> and after -> is terrible.

The Dependencies

  1. The project contains the two branches.The one is Guzzle 5 and another one is Guzzle 6.I think it’ fine.
  2. The Guzzle 5/6 should not skipp the certification checking.Maybe let users fix this or add the cacert.pam in project.

The PHP version

  1. The PHP 5 and PHP 7 is fine, but I think add the recommendation to use the PHP 7.

Conclusion

In this article, I reflect on my project and try to make the project better.

If you have any suggestions, please feel free to send the comments to let me know.

Thanks.

The currency API lists

Introduction

In this article, we present the lists about the currency lists.
This lists are important for me because they will be our next PHP projects.

Table Of Contents

  1. What’s Currency?
  2. Currency Lists
  3. Conclusion

What’s Currency?

According to the wiki, it says that exchanging the money.There are many countries and they usually use the different currency in their conuntry.For instance, the USA uses USD and the Taiwan uses the TWD.

Currency lists

In this section, we just present the currency lists here. It provide us to refer and prepare for our next PHP projetcs.The currency lsist are as follows:

  1. CurrenCyconverterApi
  2. JsonRates
  3. dlvrit
  4. Fixer.io
  5. the references

Conclusion

In this article, we present the currency lists for us and show everyone who want to know the currency services.

If we complete the project, the article will be updated.

Make the PHP code clean and well

Introduction

In this artice, it’s just a list to present the rferences about making the PHP code better.

Table of contents

  1. article lists
  2. Conclusion

Article Lists

  1. clean-code-php
  2. PHP:The Right Way
  3. Decorator Design Pattern in PHP With Complete Source Code

Conclusion

In this article, we listed the useful reference links to let people know how to develop the PHP applications better.And the article lists will be updated from time to time.

The pay to write the tutorial lists

Introduction

In this article, it’s just the lists to present how to get the pay to write the tutorials.

Table of Contents

  1. Lists
  2. Conclusion

Lists

  1. DigitalOcean
  2. SitePoint
  3. instantshift
  4. spyrestudios
  5. Envato+
  6. SmashingMagazine
  7. Envato
  8. EnvaoMarket
  9. Appcelerator
  10. ProgrammableWeb
  11. ServerGrove(It’s not sure to pay to write articles.)
  12. TecMint(It’s no pay to write the articles.)

Conclusion

In the previous section, we present the available website which provide the Paid to write tutorials.

I try to use sumit the unique and original tutorials for these websites.

In the next article, we will present the tutorials how to submit the tutorials for these websites.

Install the Shield security plugin to protect your WordPress(1)

Introduction

Nowadays, someone choose the WordPress to build their own blog or their small business.However, people usually forget the security for their WordPress.In this tutorial, we present the Shield Security plugin and you will learn how to use them to protect your WordPress.

Table of Contents

  1. What’s WordPress plugin?
  2. The Shield security plugin
  3. Conclusion

What’s WordPress plugin?

We can imagine that the plugin is the extend library of WordPress.They work together with WordPress and make the WordPress functionality powerful.

Prerequisiste

Before starting the next article, we have to let you check out the following things:

  1. You already have the WordPress website.
  2. You should have the basic concepts about WordPress website.
  3. You should know how to find and install the WordPress plugins.

The Shield security plugin

In this article, you will learn how to install and set the Shield security plugins.

Step1 -Install the plugin

Firstly, we have to login the WordPress admin panel then checkout the link: https://yourdomain.com/wp-admin/plugin-install.php.

Step2 -Set the plugin

Secondly, find the plugin name: Shield security plugin then we can see this searching result of screenshot:

Then you can see the first result is the targeted plugin.we install and activate plugin.After activating the plugin, we will see the link named Shield Security is existed in left panel.We click this link then enter the Dashboard tab.After clicking the admin page, you will see the admin interface like the following screenshot.

We click the Dashboard icon and will see the three tabs: Global options, General options and Google.In Global options, we have to make sure the Global Plugin On/Off Switch is checked.In General options,the Display Plugin Specific Notices have to be checked.In Google tab, we consider whether the reCAPTCHA is enabled during logging the WordPress admin page.

In Security Admin option,it restricts the access to this plugin to preventing unauthorized change to your security settings.The plugin recommend this feature should be enabled.

You have to consider the following screenshot to understand how to set the Security Admin.

We enable the Security Admin plugin and fill the Security Admin Access Key filed.Remember that admin key because the plugin will request the access key before modifing the WordPress options.

This setting is setted the timeout which the admin access key is expired.The default value is 30 minutes is fine so you don’t have to change this value.

In Access Restriction zone tab, it let you choose the options which is restrictd.The WordPress options should be restricted. The Admin users or Plugins is up to you to be restricted.After checking the options, you have to click the Save All Seetings so that the feature you check will be worked.

In Firewall feature, you can consider the following recommendations.

We enable this plugin.

If possible, check all the features in Firewall Blocking tab. It will be blocked the illegal behavior by the Firewall plugin.

Select the “Die With Message” option is fine and it’s up to you to check the Send Email Report option.

You should not check any featue in the Whitelist tab because there’re not any feature can bypass the firewall.

After checking the required features, you have to click the Save All Settings button to make sure your features you check is worked successfully.

Once you notice that you get the “Die With Message” after modifing the Admin options, you should temporarily disable the Firewall plugin until the admin user will be modified successfully.

Conclusion

The first part is ended here and we will introduce the Login Protection, User Management and Comments SPAM in next part.

Using the Guzzle5 to access the web service in PHP

[Abstract]

Nowadays, we usually use the curl to access the web service in PHP. However, the curl does not have the useful features during accessing the web services. For example, set the timeout to restart requesting services, use the flexible parameters to build the url queries and so on.

In this article, you will learn how to use the Guzzle to make the HTTP request and access the web services in PHP. You will also learn some samples to access the mailing service and Image service.

[Introduction]

The Guzzle(https://github.com/guzzle/guzzle). It’s the PHP HTTP client and it’s on top of the PHP curl.It implements some missing features in PHP curl. You can see more details about the following link lists:

  1. The GitHub project: https://github.com/guzzle/guzzle
  2. The official documentation: http://docs.guzzlephp.org/en/stable/
  3. The Guzzle 5.3 documentation: http://docs.guzzlephp.org/en/5.3

[Prerequisite]

  • PHP Requirements: PHP 5.4+
  • To use the PHP stream handler, allow_url_fopen must be enabled in your system’s php.ini. allow_url_fopen.
  • To use the cURL handler, you must have a recent version of cURL >= 7.16.2 compiled with OpenSSL and zlib. cURL.

[Installation]

In this article, we introduce how to install the Guzzle5.3 via Composer(http://getcomposer.org/) and the steps are as follows:

  1. Download the composer.phar from the follwoing command:
    curl -sS https://getcomposer.org/installer | php
    

    Or you can download the latest composer.phar manually and check out the download section in this link: https://getcomposer.org/download.

  2. We create a project named guzzle-demo and create a composer.json in project root folder. Add the required Guzzle version in composer.json.The contents are as follows:
    {
       "require": {
           "guzzlehttp/guzzle":"5.*.*"
       }
    }
    

[Access the 3rd party web services]

In this article, we present some samples to access the MailGun and Imgur API via the Guzzle 5.

[MailGun]

MailGun is a mailing service which help us to be convenient to send the e-mail. And it also helps us to be flexible for sending e-mails.web present the curl and Guzzle5 sample code of sending e-mail are as follows:

CURL:


function send_simple_message() {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($ch, CURLOPT_USERPWD, 'api:key-your-key');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
    curl_setopt($ch, CURLOPT_URL, 'https://api.mailgun.net/v3/your-domain.mailgun.org/messages');
    curl_setopt($ch, CURLOPT_POSTFIELDS, array('from' => 'peter <peter279k@gmail.com>',
           'to' => 'peter <peter279k@gmail.com>',
           'subject' => 'Hello', 'text' => 'Hello World'));
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

Guzzle5:

require "vendor/autoload.php";

$client = new GuzzleHttp\Client([
    'defaults' => [
    'auth' => ['api', 'key-your-api-key'],
    ]
]);

$res = $client->post('https://api.mailgun.net/v3/your-domain.mailgun.org/messages', [
    'body'=>[
        'from' => 'peter <peter279k@gmail.com>',
        'to' => 'peter <peter279k@gmail.com>',
        'subject' => 'Hello',
        'text' => 'Hello World'
    ]
]);
var_dump($res->json());

We can notice that the CURL is more completed than the Guzzle5 because the most of options are setted by Guzzle5. We will foucus on the parameters for the requesting queries.

[Imgur]

The Imgur is the famous Image service. It provides the Good space to store the own images. The sample code which is about the uploading image via CURL and Guzzle5 are as follows:

CURL:


$client_id = "your-imgur-client-id";
$image = file_get_contents("/path/to/image.png");

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.imgur.com/3/image.json');
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Client-ID ' . $client_id));
curl_setopt($ch, CURLOPT_POSTFIELDS, array('image' => base64_encode($image)));

$reply = curl_exec($ch);
curl_close($ch);

$reply = json_decode($reply, true);

var_dump($reply);

Guzzle5:


$imageFile = file_get_contents("../imgur_result.png");

$client = new GuzzleHttp\Client([
    'defaults' => [
        'headers' => ['Authorization' => 'Client-ID 3aa5c24753e1656'],
    ]
]);

$res = $client->post('https://api.imgur.com/3/image.json', [
    'body'=>[
        'image' => base64_encode($imageFile)
    ]
]);

var_dump($res->json());

[Summary]

In this tutorial, we present the steps to let you learn how to use the Guzzle5 to access the web services.If you get the certification error during the HTTP request, you should fix the certification bundle error by yourself.

We also present the sample code to make you compare the difference of using CURL and Guzzle5.We hope the readers can replace the Guzzle with CURL for the next web application project.And using the Guzzle to access the web service easily.

[References]

  1. MailGun user manual: https://documentation.mailgun.com/en/latest/user_manual.html
  2. Imgur API documentation: https://apidocs.imgur.com