2019年1月30日 星期三

htmlspecialchars vs strip_tags

CKEditor 是個好用的第三方元件,不過使用後就會有若干的缺點被放大出來,無論是安全上的問題或是資料儲放量爆炸等等...都是煩人的~不過其優點可以讓無止盡的客戶端需(要)求得以滿足(或應付)也是不得不的選擇。

在使用上有很多時候是被要求不要出現HTML TAG的,這時候這兩個 htmlspecialchars() 及 strip_tags()函式就被提出來囉!! 都是在做 HTML 輸出消毒但這兩者還是有所不同,參考說明節錄如下:

strip_tags() 是用來防君子,所有正規合法的 html 或 php 標籤,都將被濾除。
htmlspecialchars() 則是用來防小人,所有想借機偷渡的語法,也會被抓出來,例如onmouseover='...'。

所以如果是可控的資料來源(後台)那麼strip_tags會有效率些(快點),不可控的資料來源(前端)就嚴謹些準沒錯!!

2019年1月21日 星期一

2019年1月10日 星期四

刷新作業系統的DNS紀錄...備忘

清除本機DNS Cache的方法
一、Windows
打開你的Windows,開起搜尋框,打下cmd(或從附屬應用程式中找到命令提示字元)。當命令提示字元的黑底白字畫面跑出>的時候輸入ipconfig /flushdns,然後按下enter鍵。

二、Mac OS X
打開你的Mac OS,點擊畫面右上角的放大鏡圖示的Spotlight,輸入terminal(或終端機)。當終端機的白底黑字跑出$的時候,如果你是10.5以上版本請輸入:sudo dscacheutil -flushcache,不到10.5版本請輸入:lookupd -flushcache,如出現詢問密碼,請輸入您的系統密碼(同安裝程式時所輸入的密碼),輸入密碼時畫面並不會出現任何文字或*,請照打,打完按下Enter鍵。

三、Linux(Ubuntu) 
開起你的terminal輸入/etc/rc.d/init.d/nscd restart,或者sudo /etc/init.d/nscd restart。
如果執行上述指令卻出現command not found,代表您的系統尚未安裝nscd,請先執行sudo aptitude install nscd,安裝nscd,安裝完成後請重新執行第一點之指令 /etc/rc.d/init.d/rstatd,或者sudo /etc/init.d/nscd restart。

完成後DNS Cache應該已經清空囉。

2019年1月9日 星期三

微信支付 By API 異常排除

近期在套用微信支付API碰到"數位簽章校驗不通過"的回覆困擾許久,程式碼檢查再檢查與文件對應都看不出所以然來,在檢視機台終端交易密鑰的更新Log發現相同程式碼下不同的終端編號會有不同的結果,若干編號就是回校驗不通過。

經查API文件僅敘述簽名檔做好SHA256運算後再以base64編碼置入sign中,此一現象在此網誌所述雷同,於是在base64編碼後在加上urlencode()後傳出,問題就排除了。

$hashValue= hash('sha256', $string, TRUE);
$sign=urlencode(base64_encode($hashValue));

小記:系統整合尤其是透過API交換資料的情況下,這類問題往往很難從單一方面去排除,尤其在另一方(內地? 代理的銀行端? 有聽沒有懂的客戶? )已讀不回或不讀不回下僅能以trial and error方式來排除,恩恩...期間所遭遇個管理層級與客戶層級的質問心酸,只能共勉之...


2019年1月4日 星期五

處理 curl call error(77) error(60) 備忘!


這陣子發生呼叫API無回應但API也沒有LOG(所以是沒有呼叫到API),後來在WEB端的Log檔看到crul回傳 err 77的記錄。

這個狀況因為只出現在特定機器上,所以看來非佈署問題與程式碼bug,新客戶網站後來新增SSL,但只用service nginx reload讓他生效並未執行service php-fpm restart,檢視SERVER運行時間已經百餘日也沒重啟過,所已將php-fpm重啟後就不會再發生相同的錯誤回報。

補充: 頁面使用JQuery(非同步)機制雖然能減少與伺服器端的資料交換量,可若啟用CSRF機制時若timeout時間設定太短而頁面太久沒有reload,會造成瀏覽者有頁面沒反應的情況,這部分在設計時需要檢查回傳值若為token過期狀態,則須強制頁面reload更新token已利正確運行。

使用curl增加設定:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0)

使用file_get_contents增加設定:
$arrContextOptions=array(
"ssl"=>array(
    "verify_peer"=>false,
    "verify_peer_name"=>false,
  ),
);
file_get_contents($target,false,stream_context_create($arrContextOptions));