{ 資訊文件 }

  • 淺談TOTP(Time-based One-time Password)

    | /

    TOTP 是利用 Application and services 上時間是一致,拿二邊共同的 key ,並且作一樣的 Hash 後,結果會產生一樣的 token,即可拿來作驗證,常被使用來作二次驗證(two-step verification)。 因為這部份的演算法是 RFC6238,所以可使用任何的 apps 來協助驗證,例如:Google Authenticator, Duo 之類的。

    怎麼實作的

    PHP 有人作好了: otphp 跟據 wikipedia 裡的 Implementation 章節中,有一段描述如何產生 token:

    1. Calculate C as the number of times TI has elapsed after T0.
    2. Compute the HMAC hash H with C as the message and K as the key (the HMAC algorithm is defined in the previous section, but also most cryptographical libraries support it). K should be passed as it is, C should be passed as a raw 64-bit unsigned integer.
    3. Take the least 4 significant bits of H and use it as an offset, O.
    4. Take 4 bytes from H starting at O bytes MSB, discard the most significant bit and store the rest as an (unsigned) 32-bit integer, I.
    5. The token is the lowest N digits of I in base 10. If the result has fewer digits than N, pad it with zeroes from the left.

    如果覺得太復雜,我挖了一下 otphp,應該在 otphp/src/OTP.php 裡面的 protected function generateOTP($input) 中有實作。

    使用

    安裝 composer require spomky-labs/otphp sample code: [php title=”Sample code”] <?php require __DIR__ . ‘/vendor/autoload.php’; use OTPHP\TOTP; $totp = new TOTP( “whatup.tw@gmail.com“ // The label (string) ); $google_chart = $totp->getQrCodeUri(); $otpCode = $totp->now(); echo “
    “; echo “Current OTP: “ . $totp->now() . “
    \n”; echo “Current Secret: “ . $totp->getSecret() . “
    \n”; echo “Verify OTP: “ . $totp->verify($otpCode) . “
    \n”; ?> [/php] 到 browser 執行後會產生下面畫面: totp example result 接下來你就拿出你的 Google Authenticator 來掃這個條碼,就可以新增一組新驗證碼。 Google Authenticator 預設是 30s ,所以 30s 後,這個 OTP 產生出來的 token 應該會無法使用。如果你的 application 可以看到 secret 的話,應該會看到 app & service 的 secret 應該要一樣。 剩下的可以參考 document 說的很清楚。

    限制

    • 其實無法防止 phishing 網頁用假的頁面來騙你資料,在你輸入 token 後,壞人在 30s 之內也可以同時登入。
    • secret key 如果被人拿走,別人也同時擁有通過二次驗證的能力。
    • app & services 之間的時間一定不能差太多,所以手機不能調整時間(有人喜歡看時鐘快五分鐘)。
  • 二個 postgresql 的 Tips

    /

    最近公司會用到 postgresql 來作為 Database ,不過因為之前都使用 Mysql 的 DB 設定和使用方法,所以有一些的不習慣,底下有二個我目前用到小技巧。 之前在 mysql 下,會使用 desc table 這個指令,來列出目前該 table 的 schema 有哪些。不過經由 postgresql 的 1.4. Accessing a Database 章節裡的使用者留言下說明,要用以下的方法來取代: [code lang=”sql”]<br />

    SELECT column_name,data_type FROM information_schema.columns WHERE table_name = ‘table_name’<br />

    [/code] 如果是 show table 這個指令,就得由以下的指令來取代: [code lang=”sql”]<br />

    SELECT table_name FROM information_schema.tables WHERE table_schema = ‘public’<br />

    [/code] 另外由於我目前寫 php 時,都是經由 pdo 來存取 Database ,所以一般來說,我們都會使用 PDO::lastInsertId 來取得最後一筆插入的 ID ,不過因為 postgresql 並不支援該方法,所以會一直產生 false 的值。查了一下 php.net 的 PDO::lastinsertid 裡面的說明,他是改 select 一個 Sequences 的值,所以我依照我的需求改寫一下,就可以查出 last insert id 了。 [code lang=”php”]<br />

    prepare($query);<br />

    $temp_q_id-&amp;gt;execute();</p>

    <p> if($temp_q_id)<br />

    {<br />

    $temp_result = $temp_q_id-&amp;gt;fetch(PDO::FETCH_ASSOC);<br />

    return ( $temp_result ) ? $temp_result[‘last_value’] : false;<br />

    }<br />

    }<br />

    ?&amp;gt;<br />

    [/code] 當然在 php.net 上有更優雅的寫法,就是即時的分析 sql 字串,來找出 table ,但因為我的 pk 的鍵值都不一樣,所以才要自行作改寫了。

  • 原來 mysql 已經可以使用 foreign key

    /

    最近正在研究 qcodo 這個 php 的 framework 。很久以前 mysql 沒辦法設定 foreign key 的,不過看到 qcodo 裡的 Demo 影片,直接使用 mysql admin 的工具設定 foreign key 。設定後,用 qcodo 即可自動產生 php 的程式碼,這真是太方便了!!

    其實如果 Table 是新建的話還滿容易的,就照著設定即可。但如果不是的話,要注意會不會有二個 table 之間的 ID 沒辦法對應的問題。最常發生的情況是之前在 A table 砍掉一筆紀錄,但在 B table 還有對應到原先的 A table 的 ID ,所以只要把對應錯誤的記錄砍掉即可。

    剛試了一下, phpmyadmin 也是可以直接設定的 foreign key ,首先將所需的 table 儲存引擎改成 InnoDB 後,去各個 table 下選擇「關聯檢視」後,即可設定外來鍵所對應到的欄位。其中該欄位必需為 PRIMARY Key 或是建立 Index 才能被選擇。

    底下有一些注意事項:

  • 讓 IE 和 Firefox 看到不同 css 屬性

    /

    目前使用的方法是把屬性前加上底線,加上後就只有 IE 讀的到 _屬性,而且和原先的屬性是一樣的意思,但是 firefox 卻是完全無法解讀,所以會略過該項設定。這樣可以讓網頁更符合標準化,並且讓 firefox & IE 都可以正常顯示。

    example: [code lang=”css”] #toc { margin: -5px 0 15px 0; / firefox 將會使用這一行設定 / _margin:0px; / IE 將會使用這一行設定 / } [/code]

    要不然也可以使用第三個方法,分別撰寫二個不同的 css 檔,他將會使用 java script 動態載入。

  • 網站分析服務網站

    /

    其實自已會架 awstat 應該就不需要這個服務了,可是我很懶的架這種東西。再加上,其實不是很重要,我只是好奇想知道,到底是什麼人,會用什麼瀏覽器來看我的網頁。事實上使用這種別人提供的東西,剛好符合我的需求,又不用浪費自已的頻寬和機器,適合我這種懶人使用。 我目前使用了二種提供此服務的網頁,一個是 sitemeter ,另一個則是 performancing。

    • sitemeter 可以點我右上角的上站人數就可以知道了,不過畫面極為醜陋,功能上還可以接受。

    • performancing 畫面比較好看一點,不過功能上還是大同小異。

    不過看了裡面的分析結果,發現在台灣人使用 IE + windows 或是 firefox 為多數,而外國人則是什麼都有,像 MACOS + safari或 mozilla 之類的。在之前沒有公怖在某個 mailist 時,都只有 frefox 和 IE ,現在則是多了一些比較不主流的瀏覽器。 在 OS 方面,windows 還是主流,佔了 71% , linux 次之為 14% 而 MacOs 則是 7%。其實哪個使用 linux 的,說實在話都是我自已啦,而且目前還沒看到什麼人來看我的網頁。在來訪的國家方面,我就不說了,自已看吧,什麼怪國家都有。 這些都是參考,要怎麼增加 blog 瀏覽人數,還是努力的充實內容比較實在。

  • [資訊] Ajax 顛覆傳統的 Web 介面

    /

    Ajax 是什麼?

    AJAX (Asynchronous JavaScript and XML, 非同步 JavaScript 及 XML 技術)

    我們可以看到 gmail ,google maps 如果依照以前的寫法,應該要不停的 refresh 畫面,可是他們只會在右上角出現載入中。完全讓人感覺不到是在瀏覽器中在執行程式。

    當然不是新技術,但是卻是新的應用。

    Java script + XML + 後端的servlet 的程式,創造如一般桌面上的軟体,也許有一天,我們的作業系統什麼都不用了,只要一個瀏覽器就夠了。

    說不定以後的像天堂之類半2D的遊戲,直接就可以使用IE/firefox 直接玩了。而 flash 只會被用來顯示動畫之類的了。

    ref:

  • [software] 用 irc client 連 msn 、 icq 、和 yahoo

    /

    其實這個 service 是一個 proxy ,透過這個軟體,你可以使用 irc client 去連結 yahoo,msn,icq 之類的即時通訊軟體。

    有人會問說?這有什麼用?

    其實對一些公司的防火牆,會封鎖住公司內部的 msn 之類的即時通訊軟體,你就可以使用這套軟體,更換 port 後,就變成文字界面的 msn client 了。

    當然,在 linux & windows 下都可以安裝這套軟體。這就是 open source 的好處。

    以下的文章轉載自 超邪惡軟體 BitlBee - An IRC to other chat networks gateway

    發信人: lloyd huang , 看板: Linux
    標 題: 超邪惡軟體 BitlBee - An IRC to other chat networks gateway
    發信站: KaLUG (Tue Dec 21 12:42:18 2004)
    轉信站: SayYa!ctu-reader!ctu-peer!news.nctu!news.netfront.net!not-for-mail
    Origin: 61-64-98-154-adsl-chu.static.so-net.net.tw

    續 “ xchat 的好伙伴 dircproxy – IRC Proxy 的好工具 “ 現在又再度挖到了
    另一個超邪惡工具 BitlBee - An IRC to other chat networks gateway

    你正在為公司關閉 MSN ICQ AIM 對外連線而苦惱嗎? 或者你實在無法喜歡 Linux
    Unix 上 MSN ICQ AIM 的工具,又或者你超級愛用 IRC client 而希望利用你慣用
    的 IRC client 來連結 MSN ICQ AIM 呢?

    這時候你就需要這個超邪惡軟體 BitlBee 來幫助你達成你所要的功能。
    ------------------------------------------------------------------------
    bitlbee - An IRC to other chat networks gateway

    This program can be used as an IRC server which forwards everything you
    say to people on other chat networks: Jabber, ICQ, AIM, MSN and Yahoo.
    ------------------------------------------------------------------------
    簡譯如下:
    bitlbee 是個 IRC server, 可以透過它轉送訊息給其他使用 Jabber, ICQ, AIM, MSN
    以及 Yahoo message 的使用者,直接使用你慣用的 IRC Client 工具,無須更動你在
    IRC 上的使用習慣,而訊息也只會個別的傳送給單一使用者。你只需要
    -------------------------
    usernam 你所要聊天的訊息
    -------------------------
    這樣就可以直接傳送給對方,而無需要理會對方是使用什麼樣的 network chat 工具。
    當然你也可以直接用 /msg username message 開一個一對一的 chat room , 這樣連
    打 username 都可以省了。

    緣起:
    早先在 IRC 上 moto 正在為了他們公司將要關閉 MSN ICQ 的對外連線苦惱。而在尋求
    其他類似 dircproxy – IRC proxy 提供給 MSN ICQ 使用的 proxy。

    幾個禮拜過去了,不小心逛大街,晃到了 http://gslin.org/?p=214
    看到了這個邪惡到爆的軟體 BitlBee http://www.bitlbee.org/
    並且學到了一句很有意思的黑話 “審查砲彈 (screenshot)” ,讓我們審查 BitlBee
    的砲彈吧。 http://www.bitlbee.org/main.php/screenshots.html

    我目前的作法:
    IRC Client 使用 XChat, IRC Proxy 使用 dircproxy , 加上 BitlBee 跟其他非 IRC
    的使用者交談,我目前只測試過 AIM (AOL), MSN, ICQ。

    安裝:
    我是 debian Fan, 所以目前安裝在 debian serage 上,使用的版本為 BitlBee 0.91。
    BitlBee 可採用 inetd or standalone,debian 預設使用 inetd。

    #> apt-get install bitlbee
    選擇你要使用的 port number ,利用更動 port number 可以躲避公司的防火牆 NAT,我是

    額外在加上 IRC Proxy 躲避 NAT 並且利用它來紀錄連線交談 log。

    xchat 連接你的 irc port number (Note : xchat 編碼請使用 utf8)

    一進入 bitlbee ,它會開啟一個 channel 取名為 #bitlbee ,並且有兩個 user 一個是
    你 另一個是 channel root ,並告訴你打 help 看一下線上說明文件,help quickstart

    ,help quickstart2,help quickstart3 ….

    使用方法簡述如下:
    ---------------------------------------
    一開始請註冊並輸入密碼如下
    register 密碼

    下次連線啟用帳號時則
    identify 密碼

    MSN AIM ICQ … 帳號管理使用,你想跟 MSN 的人交談廢話當然要申請 MSN 帳號, AIM I
    CQ
    都一樣。bitlbee 只是幫助你利用 IRC 的方式轉訊息而已。

    MSN 啟用帳號
    account add msn MSN帳號 MSN密碼

    ICQ 啟用帳號
    account add oscar ICQ帳號 ICQ密碼 login.icq.com

    AOL 啟用帳號
    account add oscar AOL帳號 AOL密碼 login.oscar.aol.com

    連線 (其實你離開後在登入利用 identify 密碼,就會自動連接你個別的帳號了。)
    account on

    聊天
    xxx-username 你要打的訊息..

    Note : 你聊天的訊息只針對單一使用者,所以要講話之前要針對特定 username
    不過請善用 鍵,a xx 這樣會省掉你不少打字時間,或是直接
    開個一對一 chat room. 也可以。

    其他的部份請自己去看 help
    ------------------------------------------------------------------------

    實際使用起來中文會有亂碼不會動。沒關係 open source 不會動自己改。
    下載 source , 解開, 找一個檔案 protocols/nogaim.c 改一行就會動了。

    在 1001 行
    if( g_strncasecmp( set_getstr( irc, “charset” ), “none”, 4 ) != 0 &&
    do_iconv( set_getstr( irc, “charset” ), “UTF-8”……..
    msg = buf ;
    改成
    msg = msg ;

    沒錯,它有幫我們試圖轉換 charset,但原因不名,可能取不到或是不知道 charset

    在 1001 行
    if( g_strncasecmp( set_getstr( irc, “charset” ), “none”, 4 ) != 0 &&
    do_iconv( set_getstr( irc, “charset” ), “UTF-8”……..
    msg = buf ;
    改成
    msg = msg ;

    沒錯,它有幫我們試圖轉換 charset,但原因不名,可能取不到或是不知道 charset
    所以轉錯了。不管反正這種在不了解架構下改的 dirty hack patch 人家也不可能會收
    ,反正我能動就好。

    make ; cp bitlbee /usr/sbin/bitlbee

    好啦沒了,祝你使用愉快!!

        ◢◣
    □□□ ██ □□□□
    □  ◢█□ 造形.空間.秩序.
    □  ███◣ 主從.對比.韻律
    ---

    在這邊補充一點,其實可以不用修改原始碼,你可以在 #bitlbee channel 下打 set charset=big5 就會改成 big5 編碼了。

    當然, set 這個參數還有很多好玩的東西,你們可以自已試試看。

  • [文件] 簡單的 irc protocol

    /

    為了某些原因,我要實作 irc client,不過因為懶的查 rfc ,所以只好用 ethereal 直接用監看的,把一些簡單的,常用的 protocol 查出來,其他的,就只好慢慢的查 rfc 手冊了。

    以下文件中 # 是代表註解,@ 代表參考 RFC 的哪一章節。

    一、登入
    # 1. 取名字

    NICK whatup

    # 沒有任何回應值
    @4.1.2 Nick message

    # 2.送出使用者的

    USER whatup1 whatup2 127.0.0.1 :whatup

    # 送完後,會回應系統資訊之類的文章
    @ 4.1.3 User message

    # 3.加入某個頻道

    JOIN #bitlbee

    @ 4.2.1 Join message

    # 4.MODE - 改變頻道的狀況

    MODE #bitlbee

    # 該頻道的狀況
    @ 4.2.3 Mode message

    # 5.列出頻道中的人

    WHO #bitlbee

    # 會列出該頻道所有的使用者
    @ 4.5.1 Who query

    # 6. b - set a ban mask to keep users out;

    MODE #bitlbee b

    二、收傳訊

    # 傳訊 - PRIVMSG 頻道 :誰 :訊息

    PRIVMSG #bitlbee :whatup_:訊息

    # 收訊 - 名字!mail PRIVMSG 頻道 :誰:訊息

    whatup_!whatup@mail2000.com.tw PRIVMSG #bitlbee :whatup:訊息

    @4.4.1 Private messages

    參考文件:
    [*] rfc 1459 : http://www.isi.edu/in-notes/rfc1459.txt