到最后,c0debreak打開了一個(gè)“機(jī)密文檔”給我看。這是一個(gè)宅男積累多年的秘密,我瞇著眼好奇地湊過去,里面密密麻麻的都是。。。。對最新網(wǎng)絡(luò)安全技術(shù)的研究筆記。
“我讓你給我展示一下和工作無關(guān)的‘業(yè)余愛好’,XX都X了,你就給我看這個(gè)?”我怒道。
“對啊,這就是和工作無關(guān)的業(yè)余愛好啊。因?yàn)檫@些技術(shù)現(xiàn)在都還用不到工作里。” c0debreak一臉呆萌。
瞬間,我特別想見見那個(gè)馬上就要和他結(jié)婚的妹子,據(jù)說她也是個(gè)程序員。我強(qiáng)烈懷疑他們的蜜月旅行會是:在用馬爾代夫海灘做桌面的電腦上敲代碼。
c0debreak,百度安全工程師,一個(gè)比百度工程師還像百度工程師的百度安全工程師。其實(shí),c0debreak還有另一個(gè)身份,那就是OpenRASP項(xiàng)目負(fù)責(zé)人。
OpenRASP,看到這個(gè)名字時(shí),估計(jì)很多人也像我一樣升騰起不明覺厲的感覺。(我覺得凡是名字里帶有五個(gè)大寫字母的項(xiàng)目都挺有前途,例如:CPPCC,不知道的童鞋可自行百度)其實(shí),OpenRASP是一個(gè)百度安全旗下的免費(fèi)開源安全項(xiàng)目,全稱應(yīng)該是:Opensource Runtime Application Self-Protection開源實(shí)時(shí)程序自保護(hù)系統(tǒng)。它隸屬于百度OAESE智能終端安全生態(tài)聯(lián)盟,是其中五大開放技術(shù)之一。
作為一個(gè)把復(fù)雜科技講簡單的媒體,我總結(jié)這套系統(tǒng)的功能就是——檢測網(wǎng)絡(luò)入侵,從而發(fā)現(xiàn)漏洞。
在這類功能的系統(tǒng)中,最著名的要數(shù) WAF,也就是Web應(yīng)用防火墻。WAF被設(shè)置在應(yīng)用的外部邊界上,可以通過特定的規(guī)則和模式識別出惡意請求,并且把它們拒之門外,是一種被廣泛應(yīng)用,連程序員家的貓都知道的網(wǎng)絡(luò)安全系統(tǒng)。
我們就是想顛覆 WAF!
難以想象,一個(gè)不愛說話只對你呵呵笑的宅男工程師在沉默了五秒之后突然認(rèn)真地看著你,沒有一點(diǎn)過度直接說出這么一句“豪言壯語”。
一、顛覆 WAF的 OpenRASP到底是神馬?
在 c0debreak看來,傳統(tǒng)WAF存在一個(gè)非常大的問題,概括起來就是:“因?yàn)椴粔蛏睿圆粔蛩薄榱藢Ρ榷叩募夹g(shù)實(shí)現(xiàn)方式,下面我們以一幢辦公樓的安保來舉個(gè)例子:
WAF——門衛(wèi)模型
WAF代表大樓的門衛(wèi),很遺憾這里的門衛(wèi)并沒有朝陽大媽那種柯南般的智慧。每當(dāng)走進(jìn)一個(gè)人,他只會攔下來問:“來者何人?”并且把這個(gè)人的形態(tài)樣貌和手里的冊子(特征庫)一一核對。如果不是“在案”的壞蛋,就一律放行。
雖然特征庫在不停升級,但是從壞人的角度來看,這樣的門衛(wèi)并非無懈可擊。如果我是小偷,我今天來的時(shí)候可以戴一頂紅帽子,明天可以換一頂綠帽子,后天甚至男扮女裝。對于技術(shù)水平一般的 WAF來說,很可能“穿上馬甲你就不認(rèn)識我了”。而智能程度高一些的WAF,可以利用技術(shù)識別出一些“變裝”伎倆,但這時(shí)對方同樣可以用“整容”甚至“換人”的方法,加大成本再次騙過門衛(wèi)的眼睛。
如果想有效地阻止壞人,WAF必須以非常高的頻率升級特征庫,但即使是這樣,它仍然無法擺脫兩個(gè)弊端:1、永遠(yuǎn)追在敵人后面跑。2、高居不下的誤報(bào)率。
OpenRASP——管家模型
RASP技術(shù),干脆選擇了另一個(gè)思路,它把防護(hù)系統(tǒng)跑在每一個(gè)應(yīng)用內(nèi)部。還是以大樓作比喻,這相當(dāng)于在每個(gè)辦公室里都設(shè)置了一位管家(就是上圖這個(gè)Superman)。無事不登三寶殿,壞人進(jìn)入大樓,肯定是要做壞事的。所以RASP的思路是:你長了一張什么臉我并不關(guān)心,重要的是你有沒有在房間里做出“攻擊動作”。
c0debreak給我看了OpenRASP的技術(shù)文檔,里面列舉了25類“攻擊動作”。
這其中包括:數(shù)據(jù)庫 SQL注入、數(shù)據(jù)庫慢查詢、任意文件上傳、敏感文件下載等等。。。
每一個(gè)攻擊場景,都有具體的代碼描述,而這種描述,相比 WAF上繁復(fù)的規(guī)則要簡單許多。正如世界上的騙局有千萬種,但最后無外乎是把你口袋里的錢掏出來;世界上越獄的方法有千萬種,但最終的動作都是離開牢房;漢子們對姑娘的花言巧語永遠(yuǎn)在翻新,但最終目標(biāo)都是【此處省略三個(gè)字】。只要你能站在事件的邏輯中心,分辨出真?zhèn)紊茞壕拖鄬θ菀缀芏唷?/p>
利用對“攻擊動作”的判斷,OpenRASP可以比較精準(zhǔn)地揪出惡意攻擊行為,有了惡意行為,就可以由此回溯,找到未被發(fā)現(xiàn)的漏洞。
二、OpenRASP厲害在什么地方?
如果不考慮技術(shù)實(shí)現(xiàn)的難度和成本,顯然為每間辦公室單獨(dú)設(shè)置一個(gè)管家比在大門口設(shè)置門衛(wèi)的模式更為安全,因?yàn)楣芗覀兛梢钥吹介T衛(wèi)看不到的“詳情”。類比到 WAF和OpenRASP上,這意味著兩種安全系統(tǒng)可供判斷的信息量是不一樣的。
WAF掌握的是軟件的“入口流量”,
而 OpenRASP卻掌握了內(nèi)部所有動作的“上下文聯(lián)系”。
這同樣可以用一個(gè)例子來說明:
在 WAF所代表的“門衛(wèi)模型”中,如果一個(gè)人帶著錘子進(jìn)入辦公樓,門衛(wèi)無權(quán)攔截他,因?yàn)檫@個(gè)人并沒做什么傷天害理的事情,而且依照規(guī)章,帶錘子進(jìn)入辦公室也未嘗不可。
在 OpenRASP所代表的“管家模型”中,同樣還是這個(gè)人,進(jìn)入辦公室之后,卻猛地用錘子砸向文件柜上面的鎖,那么毋庸多言,管家上來一個(gè)掃堂腿撂倒便是。
你看,之所以門衛(wèi)不敢攔下這個(gè)拿錘子的人,就是因?yàn)樗徽莆者@個(gè)人接下來的行動信息。而房間里的管家,卻是有充足把握做出判斷的。
實(shí)際上,OpenRASP身處應(yīng)用內(nèi)部,還有諸多的好處。為了說明OpenRASP技術(shù)的優(yōu)點(diǎn),c0debreak用了四個(gè)關(guān)鍵詞:
1、誤報(bào)
廣義的黑客“攻擊”,應(yīng)該包含兩個(gè)方面:1、掃描;2、實(shí)際進(jìn)攻。這大概對應(yīng)著竊賊的“踩點(diǎn)”和“盜竊”兩個(gè)步驟。
這里有一個(gè)重要的認(rèn)知:“踩點(diǎn)”本身是不違法的,甚至對你來說是不用在意的。
為什么這樣說呢?看過阿凡提的叔叔阿姨們應(yīng)該記得,有一集講的是盜賊挨家挨戶踩點(diǎn),最終選定了幾家作為盜竊對象,并且在門口標(biāo)記了記號準(zhǔn)備晚上“光臨”。(當(dāng)然陰謀被神勇的阿凡提發(fā)現(xiàn)了并且把每一家門口都畫上了同樣的記號)
科普一下竊賊在你門口做標(biāo)記的含義
我想說的是,你家大門被各種人打量,并不意味著你一定會被盜。說回黑客攻擊,借助自動化工具,黑客進(jìn)行的掃描行為可能是實(shí)際進(jìn)攻行為的萬倍或億倍之多。這是一種典型的“廣種薄收”的策略,絕大多數(shù)掃描僅僅停留在掃描。如果你的系統(tǒng)沒有攻擊價(jià)值,或沒有他掌握的漏洞,黑客根本就不會對你采取下一步動作。
有了這個(gè)背景知識,你就可以進(jìn)一步感受 WAF和OpenRASP的區(qū)別了。
c0debreak給我舉了個(gè)栗子:
如果有人掃描了一個(gè)根本不存在的路徑,這很可能就是自動化程序進(jìn)行的掃描,產(chǎn)生威脅的可能性非常小。但是由于 WAF不掌握應(yīng)用內(nèi)部的信息,它沒辦法判斷掃描的危害性有多大,因此保險(xiǎn)起見只能報(bào)警。
這時(shí) OpenRASP的優(yōu)勢就非常明顯,它知道應(yīng)用內(nèi)部的路徑,所以就會選擇不報(bào)警。
這就是 OpenRASP誤報(bào)率低的原理之一。
2、兼容
如果你看過《唐人街探案2》或者更早的《不見不散》,你可能記得里面都出現(xiàn)了中國人教美國警察說漢語的細(xì)節(jié)。為啥美國的警察要學(xué)說漢語?很簡單,因?yàn)樽鳛榘踩Pl(wèi)者,需要和你的被管理者有語言交流。
一個(gè)正常的應(yīng)用,在URL里面用“&”來分割請求參數(shù),但是,在有些語言中,也可以用“;”來分割。如果你不知道參數(shù)還可以這樣寫,那么你一定會漏掉一些攻擊的代碼。
c0debreak說。
還是之前的原理,WAF存在于應(yīng)用之外,它不知道也不關(guān)心應(yīng)用本身是什么語言寫成的。這就很難完全兼容后端應(yīng)用的特性,而 c0debreak和團(tuán)隊(duì),根據(jù)Java、PHP等每一種語言來獨(dú)立開發(fā)。這雖然會耗費(fèi)很多時(shí)間和精力,但是換來了非常好的兼容性。
3、應(yīng)用熱補(bǔ)丁
正如之前所說,同一類漏洞,在黑客手里可能被披上各種偽裝來使用。這些相似的攻擊方法,在 WAF看來卻沒有內(nèi)在聯(lián)系,對于每一種都要逐一添加規(guī)則。其實(shí),這樣做的最大問題并不在于“笨”,而是在于“慢”。
一旦黑客成功突破進(jìn)入系統(tǒng),就有可能迅速安插后門。后門設(shè)置成功,就相當(dāng)于多了一條供他來去自由的密道,根本不用再走大門。WAF再想發(fā)現(xiàn)他的難度就大大增加。
而 OpenRASP在應(yīng)用內(nèi)部,把攻擊動作抽象成為一種“OGNL表達(dá)式”,大意就是透過現(xiàn)象看本質(zhì),任你千路來,我只一路去。只要是利用原理相同的攻擊手法,無論外表怎么翻新,都可以被直接識別。
這就是 c0debreak所說的“應(yīng)用熱補(bǔ)丁”,從某種程度上說,它可以防護(hù)“未知攻擊”。
最近三年,Struts漏洞被爆出三十多個(gè),但是針對這些漏洞的利用方法,其實(shí)都收錄在我們的25條攻擊套路之內(nèi)。根據(jù)我們的測試數(shù)據(jù),是完全可以攔截的。
他說。
4、安全編碼
既然把 OpenRASP比作是“辦公室”里的管家,那么除了“抓賊”的作用以外,他一定還有幫你做好內(nèi)部安全規(guī)范的作用,比如機(jī)密文件不能隨意放置,不要把鑰匙掛在鎖上等等。。。
在企業(yè)服務(wù)器里,這種情形同樣存在:
數(shù)據(jù)庫查詢的時(shí)候,有哪些字符串的拼接是不能出現(xiàn)的;哪些敏感的函數(shù)是不能讓數(shù)據(jù)庫自己使用的,等等這些編碼規(guī)范問題造成的漏洞,應(yīng)該在研發(fā)階段就消滅在萌芽里。如果 OpenRASP被嵌入在應(yīng)用里,隨著系統(tǒng)開發(fā)流程,這些錯誤都能被警告和糾正。
c0debreak說。
另外,OpenRASP還可以輔助服務(wù)器調(diào)整安全基線,例如服務(wù)器的某些安全策略是不是被開啟,是不是存在弱密碼等等問題。
從這幾點(diǎn)來看,OpenRASP確實(shí)很有前途。
三、“OpenRASP”的“Open”
其實(shí),有關(guān) RASP的理念,早在2014年就已經(jīng)被提出,并且被世界頂級咨詢公司Gartner列為應(yīng)?安全領(lǐng)域的“關(guān)鍵趨勢”。
這就讓我想到兩個(gè)問題:
1、為什么四年以來,RASP仍然沒能取代WAF的江湖地位?
2、百度安全現(xiàn)在推動這種技術(shù),是否有前途呢?
這兩個(gè)問題,還真不太好回答,不如來看三個(gè)小故事。
1st
CPU性能損耗20%。
“臥槽!”c0debreak看著這樣的數(shù)據(jù),內(nèi)心其實(shí)是崩潰的。
此刻是2017年9月,這就是OpenRASP最初版本的性能。
其實(shí)他內(nèi)心比誰都清楚,性能本來就是 RASP技術(shù)相比傳統(tǒng)WAF的最大劣勢。畢竟在每個(gè)應(yīng)用內(nèi)部都強(qiáng)勢安插了那么多“內(nèi)線”,這些進(jìn)程人吃馬喂,哪個(gè)不向CPU要糧餉?
一個(gè)安全進(jìn)程消耗了 CPU 20%的性能,就好比你請的管家要花掉全家五分之一的收入,不用說,連我都知道不會有人買單。(不過OpenRASP是開源項(xiàng)目,本來就不需要花錢。即使這樣,這種指標(biāo)還是意味著幫倒忙。)
他知道,自己和團(tuán)隊(duì)掉進(jìn)了一個(gè)所有 RASP技術(shù)開發(fā)者都曾經(jīng)掉進(jìn)的坑。這樣的性能指標(biāo)拿出去,百度丟人,百度安全也丟人。更可怕的是,為了降低社區(qū)參與的門檻,團(tuán)隊(duì)采用了之前沒人在這類產(chǎn)品上使用的JavaScript(JS)語言編寫了所有的檢測邏輯。以至于連可參考的前人經(jīng)驗(yàn)教訓(xùn)都沒有。
項(xiàng)目上線的幾個(gè)月的時(shí)間里,團(tuán)隊(duì)都在為解決這個(gè)問題發(fā)愁。走投無路的時(shí)候,他們甚至都已經(jīng)決定放棄之前的所有代碼,把編程語言換成 Lua重新開發(fā)。實(shí)際上,他們已經(jīng)著手開始做新的Demo了。
很巧,某日一位團(tuán)隊(duì)小伙伴忽然抬起頭,用百度程序員特有的冷靜語氣對 c0debreak說:那個(gè),我好像找到了解決的辦法。。。
他的辦法就是,用火狐最新版的 Rhino引擎替代之前的谷歌V8引擎來編寫代碼。
就是這個(gè)從來沒有人嘗試過用的 JS+Rhino組合,把CPU的性能損耗迅速降到了1%-5%的可用水平,作為RASP產(chǎn)品中唯一開源的一個(gè),OpenRASP的性能開始超越市面上大多數(shù)的商業(yè)產(chǎn)品。這讓 c0debreak和團(tuán)隊(duì)大松一口氣。因?yàn)榫驮趲讉€(gè)月以前,項(xiàng)目還是“生死未卜”的狀態(tài)。
2nd
此時(shí)的 c0debreak還在焦灼地等待一個(gè)“判決”。
一個(gè)月以前,他就把 OpenRASP的項(xiàng)目計(jì)劃書遞交領(lǐng)導(dǎo)審核了,百度安全實(shí)驗(yàn)室的負(fù)責(zé)人韋韜從技術(shù)角度很快開了綠燈,現(xiàn)在項(xiàng)目就放在百度安全總經(jīng)理馬杰的桌面上,等待他最后拍板。
但是一個(gè)月的時(shí)間過去了,沒有音信,c0debreak慌了:“我感覺當(dāng)時(shí)這個(gè)項(xiàng)目要被砍了,覺得蠻可惜的。”
而另一邊,馬杰面對 OpenRASP的計(jì)劃確實(shí)有些猶豫。但讓他拿不定注意的最主要原因,不是“RASP”,而是“Open”。
久經(jīng)沙場的安全“老炮兒”馬杰非常明白,要運(yùn)營一個(gè)開源項(xiàng)目,靠的可不是頭腦一熱。
首先,開源項(xiàng)目需要投入很大精力來宣傳和經(jīng)營,如果發(fā)出去就不管了,那么命運(yùn)肯定是死路一條,這些年輕人是否能堅(jiān)持下去是個(gè)未知數(shù)。
其次,開源項(xiàng)目是免費(fèi)的,需要通過建設(shè)生態(tài)來實(shí)現(xiàn)效益,而 OpenRASP團(tuán)隊(duì)沒人有開源項(xiàng)目的經(jīng)驗(yàn),未來要面對的挑戰(zhàn)確實(shí)不小。
但是,沉默寡言的 c0debreak在這件事上表現(xiàn)出少見的堅(jiān)持,他三天一個(gè)表決心,五天一個(gè)問進(jìn)度,一副赴湯蹈火永不言敗的姿態(tài)。
縱然有所推遲,但馬杰最終給這個(gè)年輕人投出信任票;c0debreak拿到批復(fù),沒有多說一個(gè)字,火速開工。這是一個(gè)典型的屬于百度的溫情故事。
3rd
其實(shí)“開源”兩個(gè)字,很能代表最近兩年百度身上發(fā)生的變化。
從開源深度學(xué)習(xí)平臺 PaddlePaddle到開源自動駕駛平臺Apollo,看上去百度要在開源這條路上越走越遠(yuǎn)了。
OpenRASP也是這條路上的一份子。
某種程度上說,一個(gè)開源項(xiàng)目的運(yùn)營,靠的不僅僅是核心技術(shù)團(tuán)隊(duì),而是認(rèn)同這個(gè)項(xiàng)目的社區(qū)中的每個(gè)人。
除了技術(shù)開發(fā)本身,讓這個(gè)項(xiàng)目獲得更多的認(rèn)同,也是 c0debreak迫切要做的事情。
他在百度內(nèi)部各個(gè)部門“奔走呼號”,先說服幾個(gè)部門灰度測試了OpenRASP系統(tǒng);幾個(gè)月來,他還在公眾平臺上不斷發(fā)布OpenRASP的技術(shù)解析文章,“以死相逼”讓身邊的技術(shù)大牛轉(zhuǎn)發(fā)宣傳;他甚至找來一些比較成功的開源項(xiàng)目,從他們的代碼提交記錄里一點(diǎn)點(diǎn)學(xué)習(xí)運(yùn)營開源項(xiàng)目的經(jīng)驗(yàn)。
功夫不負(fù)有心人,百度安全實(shí)驗(yàn)室老大韋韜轉(zhuǎn)發(fā)的一篇文章引起了OWASP(開放式Web應(yīng)用程序安全項(xiàng)目組織)的關(guān)注,幾天后,OpenRASP的介紹出現(xiàn)在了OWASP的網(wǎng)頁上。
也就是在這些日子,OpenRASP的技術(shù)交流QQ群不斷涌進(jìn)來很多人。c0debreak馬上帶著三個(gè)同事客串客服,忙得不亦樂乎。
一開始人們問的都是怎么安裝怎么配置的問題,到后來,問題就變成了支持什么型號的服務(wù)器,支持什么架構(gòu)。項(xiàng)目主頁上用于點(diǎn)贊的“Star”按鈕,也開始有人點(diǎn)擊。
OpenRASP項(xiàng)目在GitHub上的主頁
幾個(gè)月的時(shí)間里,c0debreak和同事每天盯著Star的個(gè)數(shù)。每多一個(gè)Star,他們都感覺爽爆了。
2018年2月4日,對他和團(tuán)隊(duì)來說是一個(gè)值得紀(jì)念的日子。這一天,OpenRASP收到了第一份“Pull Request”,也就是代碼合并請求。“社區(qū)中有人對項(xiàng)目的代碼進(jìn)行了升級,并且想合并到主代碼中,這意味著有人開始主動為社區(qū)做貢獻(xiàn)了,開源的意義真正被體現(xiàn)出來了!”他興奮地說。
就在一個(gè)星期以后,團(tuán)隊(duì)又收到了一封來自西班牙的郵件,那位程序員用英語詢問 OpenRASP什么時(shí)候可以支持PHP語言。c0debreak滿懷激動地認(rèn)真回復(fù)了郵件,要知道,他們甚至還沒來得及把技術(shù)文檔翻譯成英文,目前只有官網(wǎng)上有一些簡單的英文Q&A。
c0debreak覺得,這個(gè)項(xiàng)目的發(fā)展甚至超過了自己最好的預(yù)期。短短幾個(gè)月時(shí)間里,唯品會、蘇寧、攜程、科大訊飛、綠盟等等大企業(yè)都已經(jīng)開始內(nèi)部測試這套系統(tǒng),并且根據(jù)這套開源代碼定制自己需要的版本。
和這些用戶交流,詢問他們的意見和需求,現(xiàn)在成為了 c0debreak重要的工作之一。
他盯著屏幕上已經(jīng)累積到300多的“Star”,嚴(yán)肅地說:“看來未來幾年,我都要全心投入在這個(gè)項(xiàng)目上了。”
在 Github頁面上,標(biāo)注了項(xiàng)目的路線圖和里程碑
三個(gè)故事講完了。
可能你心中的疑問被解開了,也可能你有了更多疑問。
c0debreak和百度安全的同事們創(chuàng)造了OpenRASP,并且奮力讓它成長至今。他們想要的東西很簡單,那就是讓更多人了解OpenRASP,認(rèn)可OpenRASP,愿意為OpenRASP做點(diǎn)什么。
打開網(wǎng)絡(luò)空間搜索引擎 Shodan,里面已經(jīng)可以查到很多第三方公司利用OpenRASP做的安全項(xiàng)目。至于他們是誰,具體怎樣使用OpenRASP,c0debreak并不了解,但他感到很幸福。“潤物細(xì)無聲”,這正是開源的魅力所在。
在 Shodan上,搜索到“OpenRASP”的地區(qū),就會被標(biāo)為紅色,現(xiàn)在地圖上只有四個(gè)國家。我問 c0debreak未來的計(jì)劃,這個(gè)技術(shù)宅楞了一下,然后把手一揮,說:“全變成紅色。”
我突然明白,對于開源世界來說,最好的姿態(tài)莫過于:
心懷夢想 信馬由韁
再自我介紹一下吧。我叫史中,是一個(gè)傾心故事的科技記者。我的日常是和各路大神聊天。如果想和我做朋友,可以關(guān)注微博:@史中方槍槍,或者搜索微信:shizhongst。不想走丟的話,你也可以關(guān)注我的自媒體公眾號“淺黑科技”。
月26日,GOSIM Conference、IstioCon、ONE Summit Regional Day、OpenJS World、阿里云云原生開放日、Kubernetes貢獻(xiàn)者峰會等六大系列、十一場活動在上海跨國采購會展中心舉行,近百位國內(nèi)外嘉賓圍繞移動和互聯(lián)網(wǎng)、Rust語言、人工智能、汽車和機(jī)器人、游戲和元宇宙、服務(wù)網(wǎng)格、網(wǎng)絡(luò)和邊緣計(jì)算、JavaScript等開源和云原生領(lǐng)域進(jìn)行深度分享,標(biāo)志著為期三天的KubeCon + CloudNativeCon + Open Source Summit China
日,Mybridge 對 Github 上將近 250 個(gè) JavaScript 開源項(xiàng)目進(jìn)行了排名,并從中挑選出了 Top 10,旨在幫助開發(fā)者能找到一個(gè)對自己有所啟發(fā)的有趣的項(xiàng)目。
Top 10 的項(xiàng)目包含了日歷、驗(yàn)證、人臉識別、3D 游戲、貨幣值、熱鍵、走馬燈效果、AWE Amplify、VS 代碼主題以及 Magenta.js。
▌No.1:Tui.calendar 1.0 版
Javascript 日歷,可以滿足你的所有需求。
▌No.2:Ow
為人類設(shè)計(jì)的的函數(shù)參數(shù)驗(yàn)證。
▌No.3:Picojs
用 200 行 Javascript 編寫的人臉識別庫。
▌No.4:Babylon.js
完整的 Javascript 框架,可以通過 HTML 5 和 WebGL 創(chuàng)建 3D 游戲。
▌No.5:Dinero.js 1.0版
該代碼庫支持 immutable 對象,用于創(chuàng)建、計(jì)算和整理貨幣值。
▌No.6:Hotkeys 第3版
一個(gè)強(qiáng)大的Javascript庫,可以捕捉鍵盤的輸入,且沒有任何依賴。
▌No.7:Glide 3.0
JavaScript ES6 實(shí)現(xiàn)的幻燈片和跑馬燈效果,不包含任何依賴。優(yōu)點(diǎn)有:輕量級、靈活性好、速度快。僅為幻燈片做的設(shè)計(jì),恰到好處。
▌No.8:AWS Amplify GraphQL客戶端
用于云服務(wù)應(yīng)用程序開發(fā)的聲明式 JavaScript 庫。
▌No.9:Subliminal
面向 JavaScript 的個(gè)性化簡約 VS 代碼主題。
▌No.10:Magenta-js
在瀏覽器中使用機(jī)器智能生成音樂和藝術(shù)。
原文:https://medium.mybridge.co/top-10-javascript-open-source-of-the-month-v-may-2018-d6ccb4940fda
作者:Mybridge
譯者:彎月,責(zé)編:屠敏
征稿啦!
CSDN 公眾號秉持著「與千萬技術(shù)人共成長」理念,不僅以「極客頭條」、「暢言」欄目在第一時(shí)間以技術(shù)人的獨(dú)特視角描述技術(shù)人關(guān)心的行業(yè)焦點(diǎn)事件,更有「技術(shù)頭條」專欄,深度解讀行業(yè)內(nèi)的熱門技術(shù)與場景應(yīng)用,讓所有的開發(fā)者緊跟技術(shù)潮流,保持警醒的技術(shù)嗅覺,對行業(yè)趨勢、技術(shù)有更為全面的認(rèn)知。
如果你有優(yōu)質(zhì)的文章,或是行業(yè)熱點(diǎn)事件、技術(shù)趨勢的真知灼見,或是深度的應(yīng)用實(shí)踐、場景方案等的新見解,歡迎聯(lián)系 CSDN 投稿,聯(lián)系方式:微信(guorui_1118,請備注投稿+姓名+公司職位),郵箱(guorui@csdn.net)。
*請認(rèn)真填寫需求信息,我們會在24小時(shí)內(nèi)與您取得聯(lián)系。