jeffean 的部落格

使用金鑰登入 SSH

昨天跟學弟妹提到這個,就順便整理一些資料給大家。
SSH 通常用的兩種加密方式是 RSA, DSA:

  • RSA:算法的名字以發明者的名字命名 Ron Rivest, AdiShamir 和 Leonard Adleman。但 RSA 的安全性一直未能得到理論上的證明。RSA 的安全性依賴於大數分解。公鑰和私鑰都是兩個大質數的函數。據猜測,從一個密鑰和密文推斷出明文的難度等同於分解兩個質數的積。
  • DSA:全名 Digital Signature Algorithm,是基於整數有限域離散對數難題的,其安全性與 RSA 相比差不多。DSA 的一個重要特點是兩個質數公開,這樣,當使用別人的 p 和 q 時,即使不知道私鑰,你也能確認它們是否是隨機產生的,還是作了手腳,RSA 算法卻作不到。

這麼學術的東西我也不懂,看看就好,用起來對我而言又沒差 XD
如果不用輸入密碼來登入的話,就是依賴金鑰來認證,步驟如下: (使用 Linux + OpenSSH)

Amazon Web Service EC2 簡單心得分享

來簡單的分享一下我用 Amazon Web Service EC2 的心得
我自己是選擇使用 Firefox 的 Add-on ,其實 Amazon Management Console 現在功能也非常完整,操作起來應該差不多

先安裝 Elasticfox 的 Firefox Add-on http://developer.amazonwebservices.com/connect/entry.jspa?externalID=609
安裝好後可以在 Tools 的選單裡面找到 Elasticfox 的選項

第一次開啟要填入自己的帳號和 Access Key, Secret Access Key
如果第一次開啟沒填,之後可以點選 Credentials 然後填入
Access Key 和 Secret Access Key 要先自己去登入 Amazon Web Services 之後去 Your Account -> Security Credentials 查詢

常見 Browser-Based Authentication 心得

搭啷 現在寫好像太遲了 不過還是等到專題發表完在PO這個主題好了
網路上每天都有各式各樣的新服務冒出來 自己開發新服務也很容易了
但是使用者可不想要一堆帳號密碼 記到自己都忘記了
所以如果可以結合大家常用的帳號系統
不但讓使用者更有意願去使用你的服務 也讓使用者比較相信你的服務
因為一般人不會喜歡一直申請新帳號 也怕申請莫名網站的新帳號的安全問題

這次專題我選擇了 Google, Yahoo, Microsoft 三家的帳號來做整合
其實最近好像 OpenID 正夯,以上三家的帳號也可以當作 OpenID 來用了
但是我還是沒有選擇 OpenID ,因為對於非本科系的使用者而言,這東西可能很陌生
所以還是選擇簡單的方式來做!

我覺得這種 Browser-Based Authentication 最大的缺點就是
成功確認身份登入之後,並沒有辦法得到一些基本的使用者資訊
所以只能拿得到的 token ,再利用各家的 API 找一些可以得到資訊的服務內容
這樣才能辨別使用者的身份,但是其實我們需要的資訊可能不是這麼多
或許我們只要使用者的 ID 而已,但卻要使用者同意我們使用他們的通訊錄、郵件?
使用者看到多少會對服務感到疑惑,或是就不敢使用了,連同學都有疑問了,那其他的人呢?

這邊簡述一下三家使用上的原理和心得。
Google AuthSub & Microsoft Windows Live ID 都是使用 REST 的方式
都是在 header 中加入認證的資訊和動作
而 Yahoo! BBAuth 是使用 SOAP 的方式,回傳的 Cookie 中友物件資訊
Google 的 AuthSub 可以指定回傳 JSON 的格式,使用上方便很多
Microsoft 的部份我就沒看到可以回傳 JSON
我想可能是微軟的東西都比較走企業化,所以提供 XML 來處理吧
Yahoo 的部份因為是使用 SOAP ,物件的操作上面很直覺,也很方便

因為三種都是要再使用 API 再獲得進階的使用者資訊,所以是一樣的麻煩
如果三種裡面只選一種來結合自己的服務的話,我會推薦 Google 的 AuthSub
處理起來我覺得是比較方便,實做的程式碼也比較短,說明文件也很清楚
而且 Google 的背後還有很多的服務都有提供 API ,登入之後可以使用,資源很多!
如果考慮到一般使用者帳戶的普及度,如果是提供給台灣的服務可以考慮微軟的 因為大家都有 MSN 帳號吧!
微軟的部份也有提供多種語言的 SDK 可以使用,甚至連登入登出的連結都是直接呼叫就可以了!
不過這樣想要某種程度的緊密結合自己的服務,可能就要至少看得懂 SDK 的原始碼
因為微軟的說明文件比較少提到原理,幾乎都是教你怎麼呼叫 SDK 得到你要的結果而已
所以我在看 SDK 的原始碼就花了一些時間了

我的心得大概就是這樣而已,老師還有提到 Facebook 的部份,我自己沒碰過
不過台灣以外的地方 Facebook 也是很夯,所以想做的人可以玩玩看嘍!

Firefox - NoScript

相信大家上了課都知道,Java Script 雖然方便,但也是隱藏了很大的危險性。
像是 XSS 這種攻擊,隨時可能在身邊發生,讓我們防不勝防。
這時候就可以使用一些第三方的外掛程式來禁止 Java Script 的使用,或是乾脆關掉瀏覽器的 Java Script。
偏偏這個年頭 Java Script 又十分的重要,AJAX 也是建立在其之上,如果關掉了,很多服務幾乎都是半殘了。

我自己比較喜歡用的瀏覽器 Firefox 中,有一款叫做 NoScript 的 Add-on ,還蠻好用的。
我也是看到蠻多人在推薦才去試看看的,之前使用的 Add-on 對於 Java Script 只有開啟和關閉兩種功能而已。
但是 NoScript 有豐富的設定可以使用!像是可以設定白名單,讓某些常用的、確定安全的服務使用 Java Sciprt。
甚至還可以設定 Untrust 的清單,如果之後有遇到同樣的 Script 時,就會自動排除掉。
其實對於一般使用者而言最重要的是,他不用多設定什麼,一開始就把大部分的 Java Script 都禁用了,
但是使用者卻可以很輕易的透過一個鍵就暫時允許正在使用的網域中使用 Java Script ,這樣才不會造成使用上的困擾。

我覺得很多安全性相關的軟體,要注重的不只是本身功能有多強而已!
因為再強的功能,如果不能符合人性,不能迎合使用者的方法造成使用者不便的話
大多數的人可能選擇一時的方便而自己捨棄了軟體的安全性!

所以很推薦大家使用 Firefox + NoScript 。
用了他之後上網的時候就會放心多了吧!
不過要注意的就是使用的初期可能會忘記自己用了這個 Add-on
會以為很多服務怎麼怪怪的,都沒有反應之類的,這時候按下暫時允許的鈕,就會回覆了
而大家常用比較有名的服務就可以加到白名單當中,下次再用的話就沒有這種困擾了。
如果赤裸裸的用瀏覽器在各種論壇中闖來闖去,真的是險象還生
只能說人心險惡,就是有很多人為了不同的目的想辦法鑽著漏洞
為了自保,該有的基本防範還是要有嘍!

Python 筆記

  1. 安裝
    應該大家都很聰明都會安裝了。
  2. 基本操作
    • 交談式介面IDLE (Python GUI)
      以交談式的方式執行,你給一個指令他就回覆你結果,就像交談一樣,所以叫做交談式的介面,。
    • 使用Python直譯器
      先開啟Python的IDLE (Python GUI),然後按"File" -> "New Window"。
      這就是一個Python的編輯器,可以打好程式碼之後按"Run"->"Run Module",結果會呈現在交談式介面裡。
      或是使用"python"這個執行檔後面接上程式碼的檔名來直接執行。(Windows版本的是python.exe,當然想直接使用要先把路徑加到PATH這個環境變數)
  3. 說明文件
    • 內建文件
      • 使用help函數取得內建的文件說明。
        Python的程式碼內有制定說明文件的格式,標準的函式庫幾乎都會按照這樣的格式去寫,所以Python的module幾乎都可以透過此函式得到說明。
        ex: help(socket)
      • 使用內建的Module Docs程式。
        安裝好Python之後有內建這支小程式,打開就會用了很簡單,他會幫你連到網頁上去查你要的文件。
    • 官方網站文件
      http://docs.python.org/index.html 這邊有豐富的文件,包括語法格式等等都有,請善加利用。
  4. 註解
    • 單行註解
      # 為單行註解符號,符號之後的東西都會被視為註解。
    • 多行註解
      """ 為多行註解符號,但是他本身是字串的格式,所以開頭結尾必須單獨存在一行,如果接在程式碼之後會被視為程式碼。
      ex:
      """這是個註解範例
      這個區域之內的東西都是註解
      啦啦啦啦啦
      註解好好玩!
      """
  5. 變數
    要設定變數就使用 變數名稱 = 值 這樣的語法來設定就搞定了,不用先宣告。第一次指定就是給他初始值,但是沒先指定就直些使用會出現錯誤唷!
    變數命名不能以數字開頭,只能以大小寫的英文字母或底線開頭。就像大部分的程式語言一樣,大小寫是有區別的。
  6. 基本輸入與輸出
    • 基本輸出
      Python的輸出是"語法",而不是使用函數。
      語法為: print 第一個物件,
      第二個物件, 第三個物件..., 第n個物件

      print 會把後面的東西自動轉換為字串,前提當然是要他可以轉換。
    • 基本輸入
      輸入的部分就像其他大部分的程式語言一樣是函數呼叫,而不是"語法"
      函數為:
      raw_input([輸入提示])
      輸入提示是選擇性使用,不用就沒提示。函數使用後會回傳使用者輸入的資料。(直到使用者按下enter)
  7. 字串
    • 基本特性
      Python的字串可以由 " 和 ' 或 """ 或是 '''
      包起來,效果是一樣的,不同符號包起來的字串中可以有別的符號。""" 和 ''' 用於多行字串," 和 '
      只能用於單行的字串。


      字串是不可以變更(immutable)的物件,重新賦值是給一個新的字串並不是修改原字串本身。

      跳脫字元的使用一樣是用 \ ,大致上和 Java 一樣。\0 也是代表 ASCII 中的
      NULL,但並不像 C
      語言中代表中斷字元,就是說字串不是依照這個來作結束記號的,所以可以拿來儲存Binary的資料。


      要使用unicode的字串只需要前面加上 u 或是 U 就可以了。ex:
      u"這就是unicode"

      unicode的字串可以和非unicode的字串連結,結果會是unicode的字串。
    • 字串運算

      + :將左右字串連接在一起。

      *
      :一邊必須為數字,意思為另一邊的字串重複n次。


      in
      :如果左字串出現在右字串中則為真。


      not in
      :如果左字串沒有出現在右字串中為真。


      len(x) :此函數回傳字串長度。

    • 將物件轉換為字串
      Python並沒有規定哪些物件可以轉換成字串,哪些不行,一切依照該物件自己決定,就像Java的Class自訂toString()的意思一樣。
      str(x) :此函式將物件轉換為一般字串。
      unicode(x) :此函式也是將物件轉換為一般字串,但是是unicode的。
      repr(x) :此函式將物件轉換為跳脫字元表示的字串,就是像程式碼中的那樣,方便除錯。
  8. 數值
    • 整數沒有位數限制,會自動調整。

    • 只要有小數點就是浮點數,也可以用科學計號表示。
      ex: 1e+017

    • 負數的表示形式為
      1 + 2j 。

    • 運算元的使用大致上和Java一樣。除以零會發生錯誤。

    • Python
      特有的運算元
      ** 和其他語言的 ^ 一樣為次方的意思,而且可用於浮點數。
      // 為捨去小數點的除法,同樣為除法所以除以零也會發生錯誤。

    • 運算過程中如果運算元兩邊的數值型態不一樣,會自動轉換為較複雜的型態。

    • 型別轉換函式
      int(x) 將x轉為整數
      float(x) 將x轉為浮點數
      complex(x) 將x轉為複數


  9. 布林值
    真值為 True, 假值為 False

    邏輯運算子的用法大部分和 Java 一樣,例外為:

    • or
      代表或,就是 Java 中的 ||
    • and
      代表且,就是 Java 中的 &&
    • not
      代表否定,就是 Java 中的 !


  10. 串列(List)
    • List
      為有序的資料結構,且可以動態新增或是刪除,是可改變的序列(
      & lt;/span>Mutable
      Sequence)
      ,可以想像成 Java 中的 Vector。
    • 						表示方法:用[]括起來,物件以逗號分開,存取方式和字串相似。
      		
    • 						例:[物件1, 物件2, 物件3, .....]
      		
      		
  11. 字典(Dictionary)
    • Dictionary
      為映射(Mapping)物件,是可改變的物件(Mutable),映射就是鍵(Key)與值(Value)的對應關係,可以想像成
      Java 中的 Hash Map。
    • 只有"不可改變"物件可以當鍵值。
    • 表示方法:用{}括起來,以"鍵: 值"為一組對應,中間用逗號分開。
    • 例:{鍵: 值, 鍵: 值, ....}
    • 新增修改資料:d[鍵] = 值。
    • 取得資料:d[鍵] 。
  12. 元組(Tuple)
    • Tuple
      和 List 很像,但是是個不可改變的序列(Immutable
      Sequence),可用於 Dictionary 的鍵值,因為滿足不可改變的條件。

    • 表示方法:和
      List 幾乎一樣,但是使用()括起來。如果只有一個元素時要寫成(元素1,),加上一個逗號才不會被看成運算式中的括弧。

    • 例:(物件1,
      物件2, 物件3, .....)

待續...

Lab2: Mashup Tools 使用心得

魔人啾啾隊
蔡忠潔 494512085 jeffean
沈馥安 494512475 miniann423
賀毓軒 494512293 bossho

我們用了三種工具 Google Mashup Editor, Microsoft Popfly, Yahoo! Pipes

註冊程序
--------------------------------------------------------------------------------------------
Microsoft Popfly
註冊就可以用了

Yahoo! Pipes
註冊就可以用了

Google Mashup Editor
填了申請資料還要等到他通知才能用,我們等了很久都收不到,過了一週之後一次收到七封申請成功的信...

IBM Lotus Mashup
也是要填申請,而且他說不能用免費信箱,但是發現Yahoo信箱可以用,我也不懂。
不過也是等不到申請成功的信,到現在也還沒成功。據傳說,如果申請成功馬上就會收到信了。

操作介面
--------------------------------------------------------------------------------------------
Microsoft Popfly
拖拉方式,不用撰寫程式碼,但是轉來轉去效果很華麗我覺得有點多餘,甚至有些不方便。

Yahoo! Pipes
也是拖拉方式,不用撰寫程式碼,不過每個元件的設定在同一個畫面就可以完成,不用像Popfly一樣轉來轉去都暈了。

Google Mashup Editor
要自己撰寫程式碼,但是網頁上的編輯器有語法高亮(傳說中的嗨賴),用起來還蠻爽的。(其實才用了一下下)

IBM Lotus Mashup
據謠言指出他很慢。但是他慢到連現在我都沒收到註冊成功的信,所以我也沒試過。

心得
--------------------------------------------------------------------------------------------
其實我沒摸很熟,所以不要分類寫比較好 XD。基本上對於RSS feed和基本的來源資料處理都有,Yahoo! Pipe可以抓整個網頁來分析,還有都有Map和Flickr等等的支援。雖然說Mashup Editor需要寫程式碼,但是輸出也比較多元,其他的輸出就要配合那些原件的限制比較不好用。這種工具好像比較適合不太會寫程式的人用,有些東西自己寫其實還蠻快的,但是不熟這些原件的話就不太好用,不過話說回來會寫程式的人要是可以適當的配合已經有的元件的話,會更有效率!

頁面