網絡上超過一半的流量並非由真人做成

hacker

網絡保安公司 Incapsula 最近的一項研究顯示,網站的流量中只有 49% 來自真實的人類。若果你用 Google Analystics 來追蹤網站使用者的資料,很抱歉,Google 只會替你分析這 49% 的資料,餘下的 51% 使用者是誰?Incapsula 說這包括了搜尋引擎、入侵程式、剽竊程式、濫發留言程式、和間諜程式,換句話說,31% 的網站流量都是有害的。 繼續閱讀 »

內容安全政策 (Content Security Policy) 是甚麼?

XSS attack

W3C 最近推出了「內容安全政策」(Content Security Policy, CSP) 的技術報告,建議在 HTTP 協定中加入一些新的標籤,希望可以令惡名照著的「跨網站攻擊程式」(cross site scripting, XSS) 永遠消失,至少令「儲存式」和「反射式」的 XSS 無法生存,至於「DOM 為本」的 XSS 可能仍需要開發人員繼續進行防禦。XSS 在 OWASP 的攻擊手段排名中名列第二,不少著名網站都曾受 XSS 攻擊,例如 Twitter、Facebook 等。究竟「內容安全政策」是甚麼?作為開發人員,對你有甚麼影響? 繼續閱讀 »

定期更改密碼的迷信

你的公司、網絡服務商、電郵系統、網上銀行等等,總會提醒你定期更改密碼,例如每三個月或者半年,有的甚至要求用戶最近幾次的密碼不能相同,其實這個方法是基於一些錯誤的假設、對入侵技術的無知 (不要以為系統管理員都是專家,哈),不論從運作上還是技術上來說,這不單指不能保障你的帳號,反而使你的帳號更容易被入侵。 寫在便條紙上的密碼 誰能記住每三個月改變一次的密碼?若果要記住很多密碼,這些密碼又要每幾個月更改一次,每次都要全新的,怎樣創作這麼多高安全性又易記的密碼?很多人索性把密碼寫在紙條上,這張紙條收藏在錢包或者抽屜裡,這些地方有多安全大家都很清楚。 繼續閱讀 »

怎樣管理密碼?

最近有一位朋友需要登入一個已經一整年沒有登入的系統,他完全忘記了密碼,試了幾個自己常用的密碼都無效後,系統便把他的帳號鎖死,最後要管理員替他重設密碼。

銀行、公司、討論區、Facebook、電郵、政府部門等等,我們要記著的密碼何其多?怎樣管理密碼才最方便、最安全?

初級使用者

很 多人會用同一個密碼,應用在大部分的系統,這個密碼一般比較易記,而且長時間不會改動,通常應用在不太重要的系統,例如網上討論區等。這種做法的好處是一 個密碼走天涯,絕對不會忘記。缺點是這個密碼一般很容易破解,因為它很可能是你的生日日期、車牌號碼、流動電話號碼、親人的個人資料、或者以上各項資料的合體,又或者把以上的資料作輕微的改動,熟悉你的人很容易猜到。一旦破解,他們便可以冒充你登入所有系統。

用 PHP 實現 HTTP 身份驗證

HTTP 身份驗證 (HTTP authentication) 是一種十分常用而容易實作的驗證方法,它倚賴網頁伺服器的內置功能,大量縮短所需編寫的程式碼,對於用戶驗證的要求不高的系統,是一個很實用的驗證方法。Evert Pot 在他的網誌上討論了如何用 PHP 實作這種用戶驗證。

基本驗證 (Basic Auth)

HTTP 身份驗證有兩個主要的驗證方案:「基本驗證 (basic authentication)」和「摘要驗證 (digest authentication)」,其中基本驗證比較容易實作,所以也比較常見,以下是一個以 PHP 實作的基本驗證:

繼續閱讀 »

Google 的 Chrome 和蘋果的 Safari 的密碼管理系統最弱

密碼管理一直是受到忽視的瀏覽器安全性項目,資訊科技顧問公司 Chapin Infomration Services (CIS) 最近對 Google 的 Chrome、微軟的 IE 7、Opera、蘋果的 Safari 和 Firefox 3 五大瀏覽器的密碼管理系統進行測試,發現沒有一個能完全通過他們的 21 項測試項目,表現比較好的是 Opera 和 Firefox,但也只能通過 7 項測試,最差的是 Google Chrome 和 Safari,兩者只通過兩項測試。

該公司檢視了市場上幾個主流瀏覽器:IE 7、Opera 9.62、Firefox 3.04、Safari 3.2 及 Google Chrome,測試的結果顯示每個瀏覽器都或多或少有密碼保安上的漏洞,可以導致密碼洩漏。他們特別指出三個關鍵的安全性問題:

繼續閱讀 »

微軟和 Google 的 Captcha 先後被破解

我們曾經介紹過利用 Captcha 技術來阻截機器人程式進入系統,與及在系統上登記帳號,對於公開的網上服務來說,Captcha 已經成為必備而有效的攔截工具,不過 Websense 最近報導,微軟的 Live MailGoogle 的 Captcha 均已被黑客破解,這兩宗事件對我們作為用戶有甚麼影響?對我們作為系統開發者/管理員又有甚麼啟示?

Live Mail 和 GMail 受到黑客垂青很容易理解,因為:

live.com 和 gmail.com 這兩個域名發出的電郵幾乎不會被任何郵件過濾器阻截 這兩項服務都是免費的 這兩個伺服器的用戶人數和使用率都極端龐大,黑客在裡面很容易隱藏身分和痕跡 攻陷這兩個伺服器是黑客的榮譽

如何評價一個密碼的質量?

現代人是一種沒有密碼不能存活的生物,我們接觸的所有電腦系統,都要依靠密碼來鑑定訪客的身份,辦公室的大門、家裡保險箱的門鎖, 可能都要靠密碼來啟動,甚至商號提供的會員證,也要憑密碼鑑定你的身份。密碼既然如此重要,專家們很久以前便提供了各式各樣的建議幫助我們建立安全可靠的密碼,例如混合使用大小寫的英文字母,甚至加入數字和標點符號,增加密碼的長度,避免使用跟個人資料有關的文字或數字,定期更改密碼,不要重複使用以前的密碼,使用 L33t 技術……曾經有人慨歎,若果完全依照專家的建議,創造出來的密碼必定是難以記憶,用戶們最終會把密碼寫在某個地方(電腦旁邊的小紙條或者錢包裡面),反而變成保安上的大漏洞。怎樣才是好的密碼?高質量的密碼應該具備什麼條件?

好的密碼應該是以用戶為本,即是說即使沒有把密碼抄寫下來,相隔很久仍然能夠記得。每個人的生活經歷、體驗、背景、成長環境、興趣、願望、理想等都 不相同,這些都是建構密碼的好材料,加點油、糖、醋、鹽,把材料炒一下便是一道好密碼,這樣的密碼用戶不難記憶,問題是這樣的密碼足夠複雜嗎?最好能夠有 一種客觀的標準來評價密碼的複雜程度。

防止濫發電郵或文章的線上工具 reCAPTCHA

曾經管理網站,特別是論壇、網誌之類容許訪客寫文章的網站,一定見識過濫發文章/濫發電郵的威力,所以很多網站管理員都會安裝/啟動一個稱為 Captcha 的驗證系統,當訪客貼文章的時候,要從一個圖像中辨認出其中的文字然後連同文章一拼呈交,這些圖像都是隨機產生、充滿訊燥、字體故意被扭曲的圖像,只有人 類才有能力正確辨識,這樣便可以杜絕網絡上的壞蛋使用機器人大量貼出文章。

Captcha 是一個很成功的技術,很多內容管理系統都內建了 Captcha,或者透過安裝附加模塊來實現 Captcha,根據統計,互聯網上每天有六千萬個 Captcha 被解答,每一個花大約十秒鐘,十秒鐘對一個人來說不算得什麼,但六千萬個十秒鐘加起來便很可觀了,我們可以善加利用這龐大的腦力資源嗎?

reCaptcha 正好解答這個問題,它除了有助杜絕濫發文章,也藉著人類「閱讀」圖像的能力把掃描的文字數碼化。

兩個可能洩漏系統資訊的 PHP 漏洞

系統保安網站 Hacker Webzine 最近有一篇文章,介紹兩個可能洩漏伺服器系統資訊的 PHP 漏洞,第一個有關伺服器變量的處理方法,第二個則有關 PHPSESSID 對話標識在用戶端被修改,嚴格來說這兩個不是 PHP 語言的毛病,只要編程人員小心謹慎,一切問題都可以避免。

伺服器變量 $_SERVER 儲存著很多從伺服器送來的變量,很多人不會對這些變量的值進行檢查和「消毒」,因為很多人都以為 $_SERVER 是不可以修改的,事實上 $_SERVER 是可以修改的,尤其是它包含很多從用戶端送來的值,在使用前若不加以檢查消毒,很容易成為注入攻擊的絕佳渠道。有人會說:我的程式對 $_SERVER["QUERY_STRING"] 執行最嚴謹的檢查,在送到數據庫和輸出前都會轉換成逸出字串(escape string),還會出問題嗎?有可能,除非你的程式連 $_SERVER["REQUEST_URI"]、$_SERVER["PATH_INFO"] 等也做逸出轉換。

SQL 注入攻擊新招

相信很多 PHP 的開發者都認識 SQL 注入攻擊(SQL injection),我們之前在「不可不知的 PHP 安全技巧」也曾經介紹過,最近 Gareth Heyes 在他的個人網誌提到一種新的 SQL 注入攻擊招式,Gareth Heyes 稱它做「SQL 反射注入攻擊(reflected SQL injection)」,很多人可能都會忽略。

當用戶把數據送來伺服器,我們都會把數據 escape,然後組合成 SQL 指令送給數據庫,這樣做的好處是即使用戶的數據包含數據庫的特殊字符,例如「’」、「%」,也不會破壞 SQL 指令的完整性和語法,從而做成保安上的漏洞,也保證儲存在數據庫的東西,與用戶輸入的東西完全一致。

研究顯示員工經常隨意抄下密碼

「每三個人便有一個把電腦密碼抄下,危害著他們的安全,公司應該採取更先進的方法來保護系統,例如生物測定等。」一個由全球性的調查機構 Nucleus ResearchKnowledgeStorm 所做的研究顯示,很多公司用來增強資訊保安的措施並不湊效,其中包括定期更改密碼和藉著加插數字到密碼中令其更加複雜。

員工仍然習慣於把密碼寫在紙上、儲存在電腦檔案中或者流動裝置上。

常見的 PHP 保安問題

HKPUG 經常報導專家們提出有關 PHP 安全性的忠告,其實很多忠告都是幾乎「常識」的水平,即使沒有專家的提點也不應該觸犯,但是我們仍然不斷在討論區見到網友編寫漏洞百出的 PHP 程式,看得人觸目驚心,這裡我們再次介紹一篇有關 PHP 安全性的建議。

Justin Silverston 在他的網誌中列出其中五個常見的 PHP 保安盲點:

呼叫系統程式:在 PHP 中有幾個方法呼叫系統程式,包括 system()、exec() 和 passthru(),Justin 說若果不小使用的話,這幾個函式很容易被用戶濫用來肆意執行系統指令,盜取系統中的資料和檔案。 Justin 一再強調在任何情況下都不能信任用戶輸入的資料,PHP 提供兩個函式 escapeshellarg() 和 escapeshellcmd() 來消除用戶輸入資料中的潛在危險,使這些資料用在呼叫系統程式時不能做成惡意的破壞。 檔案上載:Justin 警告 PHP 內核不會替我們檢查上載的檔案是否包含不合法的名稱、不正確的延伸檔名、或者不正確的大小,這一切都要由應用程式透過 $_FILE 進行驗證,利用 move_uploaded_file() 和 is_uploaded_file() 也可以提升安全程度。 嵌入檔案(including files):在 PHP 中我們可以透過 include()、include_once()、require() 和 require_once() 來嵌入檔案,Justin 警告我們儘管這是一個十分有用的功能,但必須小心進行,例如嵌入遠端檔案便十分危險,倚賴用戶輸入的資料作為檔案名稱也很有問題,這些存在潛在的安全性風 險,真的需要這樣做的話必須確保所有資料均經過嚴格的檢驗。

8 招抵禦假冒者

Eric LundquisteWeek.com 表示美國聯邦貿易委員會(Federal Trade Commission, FTC)發表了一份如何預防假冒者的忠告,所謂「假冒者」是指那些以虛假的託詞來騙取你的個人資料的壞蛋,這些資料包括了你的身分證號碼、信用卡號碼、銀行帳戶號碼、或者任何與你個人相關的資料。

FTC 的忠告包括八大點:

除非是你主動聯絡對方,或者你很確定對方的身分,否則千萬不要在電話、電郵、或互聯網上提供任何個人資料。假冒者會假扮成市場調查公司、銀行、甚至政府機關的代表,向你索取例如身分證號碼等資料,真正與你有業務來往的機關應該已經知道這些資料,無須向你查問。 向你的財務機構查問他們處理個人資料的政策,甚至具體地查問他們預防假冒者的方針。 教育家中的成員預防假冒者的重要性,向他們強調只有你自己或者你授權的人才可以向外披露家中成員的個人資料。 把印有個人資料的東西妥善保存,無用的收據、申請表、支票、財物報表均要撕碎或放入碎紙機。 替你的信用卡、提款卡和電話理財帳號加上適當的密碼,千萬不要用容易獲得的資料來做密碼,例如你母親女傭的名字、你的出生日期、身分證號碼的最後幾個數字、電話號碼、或者一串連續相同的數字。 注意你的個人資料存放在家中甚麼地方,尤其是你有室友,或者家中有其他人工作。 注意在你工作的地方誰可以接觸你的個人資料,確保這些資料存放在安全的地方。 每年向信用機構查閱你的信用資料。

我知道你去過甚麼地方

Jeremiah Grossman 在他的網誌上 用 JavaScript 編寫了一個實驗性的小程式,若果你使用的是 Firefox、Safari、Mozilla 或者 Netscape,一部份你曾經造訪的網站和瀏覽器上安裝的擴充模組便會顯示出來。由於這個程式在動態處理 CSS 上使用了一些 IE6 不兼容(但符合 W3C 的標準)的方法,所以無法在 IE6 上執行,但是已經有人把它修改變成 IE6 兼容的版本

IPM 投票:最常見的 PHP 應用程式安全漏洞

Internation PHP Magazine 剛剛結束了一個題為「最常見的 PHP 應用程式安全漏洞」投票,活動為期一周,結果顯示最多人認為「未經驗證的輸入資料」是最常見的安全漏洞,得票率達 42.9%;「SQL 注入攻擊」是第二多人投票的漏洞,得票率接近三成;「錯誤報告」、「session id 保護」及「存取權限控制」則以不足百份之十的得票率排在第三、四、五位,至於「其他」類別的安全漏洞則以微不足道的 0.9% 排列最後。

這次頭票結果可以作為我們邊寫程式時的警惕,為了系統的安全,必須特別注意上述的幾項漏洞,不要為了貪圖一時之便,或者為了執行的效率而犧牲了安全性,萬一失掉了寶貴的資料,或者網站被別人用來發放不良訊息而影響了信譽,便得不償失了。

不可不知的 PHP 安全技巧

IBM developerWorks 刊登了一篇由 Thomas Myer 所寫,有關 PHP 安全技巧的指導

有幾項簡單的安全性原則是每一個 PHP 程式員都應該遵守的:

永遠不信任外來的資料 確保一些 PHP 設定例如 register_globals、display_errors 等已經關掉 寫簡潔清晰的原始碼,使保安漏洞更容易被檢查出來 把「深度防禦」列為你的座右銘

從客戶端送進來的資料,有六種最常見的攻擊方式:

SQL 注入攻擊 (SQL injection attack) 操縱 GET 變量的值 (manipulating GET variables) 緩衝器溢位攻擊 (buffer overflow attack) 交叉資料站腳本攻擊 (cross-site scripting) 操縱瀏覽器內的資料 (manipulating data inside the browser) 遠程表格遞交 (remote form posting)

作者詳細解釋每一種攻擊,列舉沒有防禦及實施防禦後的例子,對於初學者有很大的啟發性,若果文章對高階的主題如檔案注入攻擊等加以解釋,便更加完美了。