2017/10/20

讓 MySQL 在查詢時區分英文大小寫

今天又遇到相同的問題,解法有很多種,可以從 SQL 下手,也可以在 table schema 就先做好設定。


SQL 強制區分大小寫


假設原本的 SQL 為:
SELECT * FROM users WHERE name = 'john' ;

這樣會撈出「John」、「john」等結果。那麼可以要求 MySQL 使用 binary 的辨識方法去做搜尋:
SELECT * FROM users WHERE binary name = 'johhn';

這樣一來,查詢時 name 欄位就會區分大小寫來做查詢。



修改 table schema


如果在設計 table 時,就確定查詢一定要區分大小寫時,可以在 create table 就先將欄位設定好:
CREATE TABLE users (
    name varchar(100) binary
)

這樣之後下 query 時,只要遇到 name 欄位,就自動會區分大小寫。



修改 collation type


一般常用的 collation 是「utf8_general_ci」,該 collation 最後面的「ci」其實是「Case Insensitive」的意思,也就是不區分大小寫。

如果要讓該 table 的所有欄位都區分大小寫,可以將 collation 的 postfix 改為「cs」或是「bin」,例如:
CREATE TABLE user (
    name varchar(100)
) COLLATE utf8_general_bin ;



以上三個區分大小寫的方法 scope 差異頗大的,可以挑比較適合當下情況的方法來使用。

2017/10/18

各家廠商針對 wifi Krack 的動作

KRACK 問題不是僅針對特定 WPA 戰點的問題,而是通訊協定上面的問題,基本上各家廠商都需要為了這個漏洞進行修補。

BleepingComputer 網站上的作者,已經至各大 wifi 供應商搜尋官方回應以及解決 KRACK 的動作,可以看到 Cisco、D-Link、DrayTek、MikroTik、Netgear、TP-Link、Zyxel 幾乎都有動作了:https://www.bleepingcomputer.com/news/security/list-of-firmware-and-driver-updates-for-krack-wpa2-vulnerability/

補充:Github 這邊有更詳細的整理


至於 ASUS 呢?官方討論區一堆人在問,但是官方完全沒有回應。這可能會是以後我買 wifi AP 的一個評分項目 .....

2017/10/17

WPA2 金鑰交換協議問題導致的安全漏洞

T 客邦看到「破功確認!KRACK破解 WPA2 原理已公開,你家的無線路由器還安全嗎?」,是在於 wifi 路由器和 client 做金鑰交換時,原本擔心擔心環境中的訊號傳遞不好,所以在金鑰交換協議上制定在雙方都沒有確認金鑰交換成功時,可以再次跑一次金鑰交換的流程。

比較尷尬的是,這份金鑰交換的協議並沒有制定怎麼樣才算交換成功,而中止流程。所以駭客只要發出金鑰交換的訊號,client 以為要再次跑流程時就會中招。

看起來目前的解決方法,就是先降低 wifi 訊號強度,讓只有 wifi client 所在環境才收的到訊號,讓偽造的金鑰交換訊號沒辦法進入 wifi 使用環境範圍內。再來就是等 wifi 的通訊協定更新了。

gslin 這邊提到,走 wifi 最安全的方法還是用 VPN。總之,電磁波是任何人都可以收到的,有無線網路至少、至少都要使用有 HTTPS 的加密通訊。

2017/10/11

建立供行動裝置使用的網頁瀏覽界面

最近用手機追新聞有感,分享一下心得。

由於行動裝置的使用量漸漸超越了桌上型電腦,而行動裝置為了攜帶方便體積本身就小,連帶的螢幕也較桌上型電腦小很多,因此不少網路服務也跟著建立行動裝置專用的網頁,像是自由時報就有針對行動裝置客製化網頁:




有留意的話可以發現行動版網頁的網址和供一般電腦瀏覽的網址是不一樣的,如了全幅廣告不說,網頁寬度、排版方式都看電腦版不同。

這時如果覺得文章不錯,透過行動裝置分享道社交平台上,別人如果是使用電腦開啟時,則會出現這樣的畫面:


別人就會變成使用超大螢幕來看超小版面的新聞,而且還有全幅蓋版廣告喔 XD

如果有 sense 一點的人,可能會想試著把網址「http://m.ltn.com.tw」改成「http://www.ltn.com.tw」嘗試開啟一般網頁版來閱讀,可惜自由時報沒有這個設計,改完網址只會顯示 404 找不到網頁 (但蘋果日報將網址改為 www 開頭以後是可以正常瀏覽的,這個設計頗為貼心)。

那什麼樣的設計才能同時滿足行動裝置以及一般電腦呢?可以參考 Wikipedia

Wikipedia 使用 Responsive Web Design (RWD) 來讓瀏覽器自動判斷裝置、螢幕大小,並自動更換成適合閱讀的版面。即使網址相同,在不同裝置上可以呈現不同的畫面,讓使用者方便閱讀。

只是一自己的經驗,要設計一個讓不同行動裝置都可以正常瀏覽、顯示符合需求的 CSS,費工又費時,就看業者到底想要給使用者什麼樣的體驗了。

2017/10/09

PHP curl 的一些特性

curl 在 PHP 中是以 extension 形式存在,所以只能透過 resource reference 去操作 curl 行為,沒辦法透過 debug 工具摸清楚 curl 在背景到底做了哪些事情。

手癢用 memory_get_usage() 看了一下 curl 在 init、exec 以及 close 這幾個狀態的記憶體使用量,來猜測 curl 到底怎麼運作。

echo memory_get_usage() . "\n"   // 236136;

$ch = curl_init();
var_dump($ch);                   // resource(4) of type (curl)
echo memory_get_usage() . "\n";  // 237472

在 init_curl() 以後,會先在記憶體中 allocate 並放一些資料,所以吃掉大概 1 KB 左右的記憶體,再將 curl 的 reference 傳出來給 $ch。