2011年11月16日

如何將各種不同短網址服務(URL Shortening Services)產生的短網址還原

最近遇到一個需求,要用程式將大量的短網址還原為原始的完整網址,以便進一步對這些網址作分析,在 .NET 中可以很容易的完成這個功能。

首先要先擬出個大概的流程,也就是利用程式送出 HTTP GET request,然後針對收到的 HTTP response 去解析完整的網址為何。

有了大概的概念之後,大概 Google 一下就會找到這篇 MSDN 參考資料:How to: Send Data Using the WebRequest Class. 從裡面可以知道,WebRequest 和 WebResponse 會是最重要的兩個 class。

重點程式如下:

一:以短網址作為參數,建立一個新的 WebRequest 物件,並設定要使用 HTTP GET:
WebRequest request = WebRequest.Create("http://goo.gl/UjDtF");
request.Method = "GET";

二:若你的環境需要透過 proxy 才可以連外,則加入以下這行:
request.Proxy = WebProxy.GetDefaultProxy();

三:發出 request,並解析收到的 response,原始的網址就是 response 的 ResponseUri.AbsoluteUri:
WebResponse response = request.GetResponse();
string originalURL = response.ResponseUri.AbsoluteUri;

就這麼簡單,完整的範例程式碼請參考RestoreShortURL.zip

2011年8月2日

MIS 必備技能:製作光碟映像檔(.iso files)

前陣子被問到如何在沒有光碟機的 NB 上播放 DVD 光碟(或者是如何安裝軟體),這才發現連唸資訊相關科系的學生也有很多人不懂如何製作光碟映像檔。

除了在沒有光碟機時必須要使用到映像檔以外,使用映像檔也可以避免光碟片因經常使用而損壞,所以現在我拿到如 WebCam 的 driver 之類的光碟片,就會把光碟片做成映像檔,之後都用映像檔安裝/移除軟體,光碟就封存備用了(或者直接拿去回收)。

未來光碟機的使用可能會越來越少,因為影音檔案/軟體安裝檔都可以從網路上取得,online video streaming 也已經到達 HD 高畫質的地步,光碟機這種速度慢又很吵的設備就越來越無用武之地了(大概只會剩下高階的藍光光碟機)。

從 Apple 的產品策略可看出 Apple 認為未來光碟機將會消失,例如:
至於未來市場發展是否會如 Apple 的定位,大家就拭目以待囉。

其實只要直接 Google「製作映像檔」就可以找到一堆軟體介紹以及圖文並茂的使用說明,例如:
我就不狗尾續貂啦。

我自己是習慣用 ImgBurn + VirtualCloneDrive (因為當初 Win7 在 beta 的時候包括酒精之類的一大堆軟體都無法掛載映像檔,用久就習慣這個組合了),用了很久都沒啥問題,如果有需要的人可以試試看。

2011年7月19日

設定 sudo 時要記得禁止一般權限使用者執行 sudo sudo

在設定一般權限使用者可用 sudo 執行何種指令時,有以下兩種作法 (參考鳥哥的文章):

  • 白名單:明確列出使用者可以執行哪些指令,如:
    Cmnd_Alias USERADM = /bin/more, /bin/cat
    user     ALL=USERADM
    使用者只能以 sudo 執行 more 和 cat 指令。
  • 黑名單:明確列出使用者不可執行哪些指令,如:
    Cmnd_Alias NSU = /bin/su
    
    user     ALL=ALL, !NSU
    使用者不可以 sudo 執行 su 指令,其他指令都可以。
sudo sudo 問題只會發生在使用黑名單時,因為除了黑名單中所列的指令,其他指令都可以執行,而 OS 中的指令很多,有時候會發生漏擋的現象,而造成意想不到的結果。

上禮拜中無意發現,原本的黑名單中只有禁止 su 和 visudo 等指令,沒有禁止 sudo 指令,因此若執行「sudo passwd root」會出現「Sorry, user xxx is not allowed to execute '/usr/bin/passwd root' as root on server.」的訊息,這跟預料中的一樣,顯示黑名單有正確發揮作用。

但是若執行「sudo sudo passwd root」(因為當時眼殘,沒注意到已經打了一次 sudo,就重複了),則可以成功變更 root 密碼!因此若要使用黑名單,除了禁止 su、visudo、passwd root、userdel root 等等指令以外,還要記得禁止 sudo 指令,才不會留下漏洞!

由此可知,使用白名單是比較安全的作法,畢竟使用者可以執行哪些指令都清楚的寫在設定檔中,一目了然,就不會有忘記禁止哪些指令的問題了。

2012-04-13更新:
目前使用的黑名單如下:

Cmnd_Alias NSUREAD = /bin/su,/usr/bin/sudo,/usr/sbin/visudo,/usr/bin/passwd root,/usr/sbin/userdel,/sbin/sysctl -w *

比較特別的是最後加上去的「/sbin/sysctl -w *」,主要是禁止一般 user 以 sudo 的方式變更任何系統參數 (例如 net.ipv4.tcp_keepalive_time ),但若只設定「/sbin/sysctl -w」,沒有加上「*」的話,還是可以變更成功 (因為 -w 之後要加上參數的 key=value,例如 /sbin/sysctl -w net.ipv4.tvp_keepalive_time=300),只是不能執行「sudo /sbin/syscrl -w」(不帶任何參數) 而已,但這樣是沒有意義的,因為 -w 後面必定要接欲變更的參數。因此要加上「*」才能禁止一般 user 透過 sudo /sbin/stsctl -w 變更「任何」系統參數。

雖然目前暫時只有針對 sysctl 指令做這樣的限制,但其他需要參數的指令,以及參數內容可能會任意變化的指令,用「*」去擋就對啦!

2011年7月14日

Openfind 2011 Solution Day 筆記

上週四(7/7)去參加 Openfind 2011 Solution Day,活動辦的還不錯。昨天收到行銷寄來的 mail,說是完整的 session 投影片和錄影可以到他們家網站線上觀看,分為影片欣賞簡報下載

我覺得最精采的是第二個 session:CEH (白帽駭客) OpenBlue 雲端入侵-郵件攻擊與密碼竊取,在現場講師直接用 VM demo 受害人打開惡意的電子郵件,點了惡意的 URL 或者圖片以後,電腦就被植入後門,此時攻擊者便可為所欲為,包括鍵盤側錄、即時螢幕擷取、web cam 擷取等等。現場看到 demo 真的非常 high 阿!

以下列出一些心得:
  • 由於 GPGPU 愈來愈盛行,加上 CPU 的運算能力仍在持續提高,現在長度在 16 位以下的密碼都不夠安全,很容易被暴力破解。參考:T客邦-iPhone 密碼被公開、GPU 極速破解密碼,教你建立高強度密碼。(看來近期內要趕快研究一下怎樣用 LastPass 或者 KeePass Password Safe 之類的解決方案了,重點是要支援 SmartPhone 阿!在 SmartPhone 上面要輸入複雜密碼實在太困難了。)
  • 社交工程電子郵件攻擊非常難擋,郵件內容看來完全沒有異狀,被植入後門之後電腦也完全不覺的有任何異常,真的是無聲無息。另一點是,印象中 demo 的時候受害的 pc 都是 Win XP,如果可以的話應該盡量避免使用這款全世界最危險的 OS
  • web cam 平常關閉是沒用的,一旦被入侵,攻擊者可以直接由遠端下指令啟動 web cam,因此除了把網路線拔掉,從此只用電腦玩單機遊戲這種超激進的作法以外,最好的作法就是 web cam 沒有用的時候要用厚的黑紙貼起來,這樣才不會被偷拍,而且使用 web cam 的時候要衣著整齊。當然如果愛用 web cam 玩一些很刺激的視訊的人就只好自求多福了。家中有女性的人一定要特別注意這一點。
    2011-07-15:毛哥在 buzz 的回應提醒我,web cam 應該分為外接式和內建的兩種。外接式的web cam沒有使用就應該拔掉,內建的 web cam 沒用的時候最好要貼起來。
  • 2011-07-15:現在很多駭客會把病毒/木馬放到 Dropbox,因為 Dropbox 不會對用戶上傳的檔案進行掃毒。因此除了 email 中的 MS Office 附件 (e.g., .doc, .ppt, 圖檔) 可能很毒以外,在 Dropbox 上公開 share 出來的檔案也可能很毒。我覺得以後這些檔案最好都用 Google Docs 來打開會比較保險,畢竟每個 tab 都是跑在一個 sandbox 裡面,萬一真的開到有毒、又沒有被防毒軟體偵測到的檔案也比較不會造成系統被感染。
再來是第三個 session:導入零負擔,個資防護及訊息保全大揭密,也不錯。講師講的很流利,對個資法也蠻熟的,等到法令正式頒佈實施以後對於軟體廠商來講會產生很多商機,所有公司都應該及早全面檢視相關的議題,這種東西突然要趕工是做不完也做不好的。

以上是今年參加 Openfind Solution Day 的簡單心得,希望明年有機會再去參加 :D

2011年4月1日

[ASP.NET] 在 Web 專案中進行排程工作

其實在很久之前坎尼就想研究這樣的東西了
概念大致上曉得,只是一直沒時間去實作出來
這幾天有些時間就去翻了一下資料,把它實作出來

坎尼在以前公司的做法有下列幾個:
  • 另外再寫一個 windows service 來執行
  • 用 Windows Form 寫成 AP,再用內建的工作排程來定期執行

    不多說,馬上進入正題

    I. 概念

    排程這個東西,就是指定好時間,時間一到程式就會自動執行
    在 ASP.NET 裡,坎尼主要是利用 System.Thread.Timer 來進行排程設定
    其他說明可詳見Bill叔所寫的 <三種時間人>
    接著在 Timer callback 事件中撰寫要系統做的事 (抓正妹圖之類的…)

    II.實作

    首先,新增一個 Web 專案 (似乎是廢話)
    在專案中新增一個 Global.asax
    wr_01 
    接著宣告一個全域的 Timer
    並在 Application_Start 中加入要進行 callback 的事件
    最後再設定 Timer 的週期,本範例中是以 5 秒當作一個循環 (50000毫秒)
    (第3個參數為 Timer 要在多少毫秒之後啟動事件wr_02
    範例中所做的事就只是把時間寫進一個文字檔
    (由於 sample 沒做好處理,很容易當掉 XD
    wr_03

    進行測試,在 Visual Studio 中按 F5 (讓虛擬伺服器啟動)

    注意,由於是另外開個 Thread
    所以在伺服器關掉之前都會持續進行 callback事件
    wr_04 
    測試結果,果然有成功的在 background 進行寫時間 log 的動作

    III. 小結

    本次的範例下載
    有興趣的人可以回去研究如何應用 :p

  • 2011年2月11日

    [NPOI] 輕鬆地將 GridView 匯出成試算表-修正版

    之前坎尼有發佈一版 Web User Control,讓 GridView 可以輕鬆匯出成 Excel
    (詳見 [NPOI] 輕鬆地將 GridView 匯出成試算表)

    後來有讀者發信來問:「為什麼他匯出的檔案標題列都是空白?」
    經一番追查之後發現,原來是 GridView 啟用了排序 (AllowSorting)
    HeaderText 會自動轉換成 LinkButton
    以至於原本抓取標題部分的程式碼只抓到空白文字

    於是坎尼稍做了一下修改,如下圖紅框所示
    ec_01 
    可以看到,不論標題是否可排序
    新版本的 Web User Control 仍可以抓取標題文字
    ec_02 
    ec_03 

    請有需求的讀者到 這邊 下載

    2011年2月10日

    在自行撰寫的 DNN Module 中使用 & 列印 Microsoft Chart Controls 的注意事項

    前陣子因緣際會的又摸了一下 DNN,根據官網上的 Basic DotNetNuke Module Development Video 教學影片的說明開始自行撰寫模組,並且在模組中用到 Microsoft Chart Controls 來呈現圖表。過程中陸續遇到一些問題,以下是解法。

    問題一:error: Invalid temp directory in chart handler configuration [c:\TempImageFiles\]

    這個問題挺好解的,因為錯誤訊息很明確,直接 Google 就可以找到解法,重點在於自己新增的 DNN Module 專案(位於 C:\inetpub\wwwroot\dotnetnuke\DesktopModules\[YourModule])下的 web.config 是找不到 Chart Handler 的設定的,必須要去找最上層的 DNN 站台的 web.config,位置是 C:\inetpub\wwwroot\dotnetnuke\web.config:


    找對 web.config 檔案以後,把多餘的「c:\TempImageFiles\」設定刪除,或者指定一個確實存在且有寫入權限的目錄即可。

    問題二:無法列印 Chart Control 圖表,列印時會看到表示圖檔不存在的紅色叉叉


    經過一番搜尋,最後在 StackOverflow 找到這篇文章,雖然該文作者說在 web.config 的 ChartImageHandler 設定中加上「deleteAfterServcing=false」對他們的專案偶爾也沒作用,但我試著加上這個設定之後,測試到目前為止每次都可以順利的把圖表列印出來!而從這個問題一直到現在都沒人回覆的狀況來看,大概只有極少數狀況在加上此設定以後仍然無法確保100% 正確的執行結果,因此有需要列印 Chart Control 的內容的話,加上這個設定就沒錯啦!(看起來就是叫系統不要把暫存圖檔立刻刪掉)


    以上就是最近在 DNN Module 中使用 Microsoft Chart Control 遇到的問題 & 解法,有了這次的經驗,下次開發就可以更順利啦!

    Google Spreadsheet 裡用規則運算式

    最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D