對于程序員來說,養(yǎng)成良好的代碼寫作能力是非常重要的。
創(chuàng)新互聯(lián)是一家專注網站建設、網絡營銷策劃、微信小程序定制開發(fā)、電子商務建設、網絡推廣、移動互聯(lián)開發(fā)、研究、服務為一體的技術型公司。公司成立十年以來,已經為上千家成都混凝土攪拌機各業(yè)的企業(yè)公司提供互聯(lián)網服務。現(xiàn)在,服務的上千家客戶與我們一路同行,見證我們的成長;未來,我們一起分享成功的喜悅。
今天,我們就一起來了解一下,規(guī)范化的代碼編寫都有哪些要求。
希望通過對本文的閱讀,能夠提高大家對于代碼規(guī)范的認識。
1.保證代碼壓縮后不出錯對于大型的JSP項目,一般會在產品發(fā)布時對項目包含的所有JSP文件進行壓縮處理,比如可以利用GoogleClosureCompilerService對代碼進行壓縮,新版jQuery已改用這一工具對代碼進行壓縮,這一般會去掉開發(fā)時寫的注釋,除去所有空格和換行,甚至可以把原來較長的變量名替換成短且無意義的變量名,這樣做的目的是加快文件的下載速度,同時也減小網站訪問帶來的額外數(shù)據(jù)流量,另外在代碼保護上也起到了一點點作用,至少壓縮后的代碼即使被還原還是沒那么容易一下讀懂的。
要想代碼能正確通過壓縮,一般要求語句都要以分號正常結束,大括號也要嚴格結束等,具體還要看壓縮工具的要求。
所以如果一開始沒有按標準來做,等壓縮出錯后再回去找錯誤那是浪費時間。
2.保證代碼能通過特定IDE的自動格式化功能一般較為完善的開發(fā)工具(比如AptanaStudio)都有代碼"自動格式"化功能,這一功能幫助實現(xiàn)統(tǒng)一換行、縮進、空格等代碼編排,你可以設置自己喜歡的格式標準,比如左大括號{是否另起一行。
達到這個要求的目的在于方便你的開發(fā)團隊成員拿你代碼的一個副本用IDE自動格式化成他喜歡或熟悉的風格進行閱讀。
你同事需要閱讀你的代碼,可能是因為你寫的是通用方法,他在其它模塊開發(fā)過程中也要使用到,閱讀你的代碼能深入了解方法調用和實現(xiàn)的細節(jié),這是簡單API文檔不能達到的效果。
3.使用標準的文檔注釋這一要求算是基本的,這有利于在方法調用處看到方法的具體傳參提示,也可以利用配套文檔工具生成html或其它格式的開發(fā)文檔供其他團隊成員閱讀,你可以嘗試使用jsdoc-toolkit。
如果你自動生成的API是出自一個開放平臺,就像facebook.com應用,那么你的文檔是給天下所有開發(fā)者看的。
另外編寫完整注釋,也更方便團隊成員閱讀你的代碼,通過你的參數(shù)描述,團隊成員可以很容易知道你編寫的方法傳參與實現(xiàn)細節(jié)。
當然也方便日后代碼維護,這樣即使再大的項目,過了很長時間后,回去改點東西也就不至于自己都忘記了當時自己寫的代碼是怎么一回事了。
4.使用規(guī)范有意義的變量名使用規(guī)范有意義的變量名可以提高代碼的可讀性,作為大項目開發(fā)成員,自己寫的代碼不僅僅要讓別人容易看懂。
電腦培訓認為開發(fā)大項目,其實每個人寫的代碼量可能都比較大,規(guī)范命名,日后自己看回自己的代碼也顯的清晰易懂,比如日后系統(tǒng)升級或新增功能,修改起代碼來也輕松多了。
如果到頭發(fā)現(xiàn)自己當初寫的代碼現(xiàn)在看不太懂了,那還真是天大的笑話了。
其實理論上,任何代碼都能被反編譯,你再好的混淆技術,也只是讓代碼變得復雜,不容易看懂,但肯定是有人能看懂,僅僅是時間花得更多。現(xiàn)在借助工具來整理線索很容易找出變量之間的關聯(lián)而猜測出它的用途。如果你覺得C能保證安全水平更好,那可以加掛 Java 6 開始支持的 Instrument,它可以支持對 class 文件進行解密。我們在編譯好代碼后手工加密后這個 運行時的 instrument 能解密,而這部分功能用 dll 來做,不過,還是那句話,沒有理論上不能被反編譯破解的代碼。
您好。感謝您給我這次回答的機會。
首先,我認為這個有兩種方法,看你怎么選。
第一種:
限制代碼庫只能在公司內網訪問,公司之外懷能下載代碼;
限制只能用公司的電腦下載代碼、編寫代碼、提交代碼;
限制訪問代碼庫的權限,發(fā)人員不授予訪問和自己不相關代碼庫的權限;
能訪問代碼的電腦上安裝監(jiān)控軟件,號稱可以監(jiān)控所有員工活動;
設置公司網絡防火墻,禁止訪問github這樣的開源網站;
把上面所有的規(guī)矩記錄下來,教育員工知道,讓他們簽字畫押必須遵守,鈑者開除而且報警。
第二種:
招募受過良好教育、品行良好、專業(yè)團隊工作經驗的開發(fā)者;
對開發(fā)者友善,讓他們不會對公司心懷怨恨;
把開發(fā)者的利益和公司利益關聯(lián)起來,讓他們不想為了蠅頭小利犧牲公司利益。
其次,你可能不知道的東西。
1.絕大部分的公司(bat另說) 手中的源代碼商業(yè)價值根本不高。
2.絕大部分的公司的源碼質量都比不過github的哪些開源類庫。
3.絕大部分的公司的源碼都屬于高度定制化的開發(fā)(就是換個公司,這個軟件幾乎就沒有什么價值了)。
4.絕大部分的公司都不是靠“軟件技術”賺錢的。
5.絕大部分的人都不會傻到直接把偷來的源碼用于“商業(yè)活動”(非但不一定賺錢還可能吃官司,還不如去github上扒開源代碼)
6."防御"的成本數(shù)倍于"重新開發(fā)一套"軟件.
所以看淡一點源碼,它在絕大多數(shù)公司中其實并不值”幾個錢“雖然它的創(chuàng)造成本可能”很貴“。
所以說,這些東西掌握以后,就基本上不用擔心代碼被泄露了。
理論上做到公司電腦無法和外界連通,進出人員不得攜帶任何外設就可以徹底解決代碼泄漏的問題。但是商業(yè)公司比較難做到。下面我們來的分析一下員工有沒必要竊取代碼,有沒能力竊取到下完整的代碼。
現(xiàn)在有一定規(guī)模的公司應用都是服務化的,不同的小組負責不同的服務,有各自的代碼查看權限。所以一個或者幾個程序員無法拿到全部代碼。
超大規(guī)模的應用就更復雜了,有前臺,中臺,后臺,APP等,架構也極其復雜,就算某個程序員獲得到了全部代碼,也沒有能力搭建并運行起來。
小規(guī)模公司的代碼基本都是業(yè)務邏輯代碼,泄不泄漏可能也沒有太大關系。
防止別人偷拿代碼是很難的,倒不如加強企業(yè)文化,提高員工的職業(yè)素養(yǎng)。尊重是互相的,做到用人不疑,我想大部分人也不會以怨報德。
說說我們公司是怎么做的吧:
1. 封了百度文庫、百度網盤、CSDN等網站
凡是能上傳文件的網站,我們公司都封了,這樣就防止員工把內部文件上傳到這些網站被泄密。但是這樣做的一個后果就是員工想查一些資料,在這些網站都打不開,只能用自己的手機去查了,造成了一些工作的不便。
2. 封了USB、藍牙接口,以及光驅
凡是能從電腦上拷貝文件到外部的接口,我們公司都封了,這樣員工就無法把公司的文件拷到外面了,避免了泄密。這樣做的后果也給我們帶來了一些工作上的不便。比如以前我們做藍牙測試的時候,需要把測試的App拷貝到手機上舊非常困難。后來公司了解了我們的困難,允許我們提申請,經過上級領導的批準后,可以給電腦開通USB權限,但是拷貝的內容也是被公司監(jiān)控,所以也只能拷貝需要的內容。申請的時候有選擇開通的時間,到期后,USB權限自動關閉了。
3. 禁止將公司電腦帶出公司
為了防止員工私下里想辦法把公司電腦的文件拷走,公司禁止把電腦帶出辦公室。如果需要帶電腦去客戶那里,則需要向公司提出申請,申請的時候也要選擇帶出和帶回的時間,這樣基本上就杜絕了員工泄密的可能。如果員工在外出途中丟失了電腦,這就會成為一個大事件,會匯報到公司最高層,對員工個人的影響也很大。公司有一套流程專門應對這類事件。曾經我們公司有人帶電腦去客戶那里,跟客戶吃飯喝醉了,打車回家把電腦弄丟了,引起了很大的后果,這個事經常會作為事例來教育全體員工。
4. 電腦里安裝監(jiān)控軟件
公司的電腦里都安裝有監(jiān)控軟件,網管可以監(jiān)控到每一臺電腦。員工在電腦上打印,發(fā)傳真、發(fā)郵件這些活動都受到監(jiān)控。打印機也能看到每個人打印、傳真的內容。員工如果有泄密的行為都可以及時監(jiān)控到。至于員工對著電腦拍照,公司應該也能檢測到。所以公司的電腦不要做一些私人的事情,很容易被監(jiān)控到。
5. 封了QQ、微信等可以傳輸文件的社交軟件
QQ、微信這類可以傳遞文件的社交軟件在公司的電腦上是不能安裝的,也防止了員工通過這些軟件把文件傳輸?shù)酵饷妗9緝炔恐荒苁褂梦④涀詭У牧奶旃ぞ週ync,這個軟件也不能傳輸文件,只能聊天。如果公司內部需要傳輸文件,只能用公司的服務器或者郵件。有些大的文件,只能盡量壓縮,否則傳輸會非常不方便。
6. 禁止員工安裝公司允許之外的軟件
嚴格監(jiān)控員工的軟件安裝列表。公司給出了允許安裝的軟件列表,超出范圍的安裝軟件會被監(jiān)控到,讓員工刪除掉。這樣員工無法安裝一些上傳文件的軟件了,防止泄密了。員工也不能隨意從網絡上下載安裝文件,防止一些木馬病毒藏在軟件里,盜取公司文件。
公司防止員工泄密的手段是很多的,每年還要對員工進行安全教育,規(guī)范員工的行為。
虛擬化桌面服務器,使用虛擬桌面和瘦客戶機,瘦客戶機禁止usb存儲。瘦客戶機不能聯(lián)網但可以連虛擬化服務器,服務器不能連外網。單獨設立一臺機器可以聯(lián)網,也可以連接一臺ftp虛擬機(虛擬化服務器中的FTP用于內外網共享文件),聯(lián)網機器下載的東西了上傳到ftp供其他桌面虛擬機使用。桌面虛擬機上傳的文件需要管理員通過才能被這臺外網機器看到下載。
1,不允許攜帶電子設備進入工作區(qū)域,進門經過金屬探測。
2,公司電腦不允許連接外網。
3,封死USB等外設接口。
4,機箱鎖死,防止拆硬盤。
5,安裝攝像頭對準每一個工位,一旦發(fā)現(xiàn)使用拍照設備等,進行相應處罰。
這幾個只有一起用才能完全防止泄露,否則都有辦法。
你去看看某研究院的一些規(guī)章。禁止筆記本等帶入,不小心帶入了,對不起,設備留置24小時,徹底格式化。手機,存儲設備也一樣禁止帶入。開發(fā)機全部內網。沒有WIFI,鼠標鍵盤全部有線,粘死。機箱上鎖。USB等接口全部封掉。人員權限限制,絕大部分人員不能下載全部代碼。
首先管理層面,領導要重視信息安全,然后按照iso27000系列信息安全標準去做。信息安全和物理安全是要互相配合的。辦公區(qū)要根據(jù)安全級別設置不同的管理措施,信息資產要根據(jù)價值設置不同的標簽,區(qū)分關鍵資產和非關鍵資產,另外信息資產只能有一個出口要經過審批后才能出去。技術層面的措施也可以用,但是不能亂用。另外開發(fā)環(huán)境安全可以參考15408的站點審查部分。
防止不了,有合作公司管理嚴格,我們都用手機拍照溝通,所以除非禁用手機和一切拍照設備,否則都給你拍出來。
我覺吧吧,關鍵是人。而不是制度。
這么說吧,光有源代碼屁也不是。要是沒人build都困難。別說上線和運行了。
所以,你要是選信任的人,而不是選信任的方法。那么就算別人真偷了,拿一堆源代碼回去,都沒辦法build,有什么用?
反之,就算沒有源代碼。人家拍拍屁股走人。然后還他媽實現(xiàn),你有什么辦法?
java編程一直以來都是互聯(lián)網軟件開發(fā)市場上的主流開發(fā)語言,同樣的這也就導致了只要發(fā)生漏洞的話,所有用java編程開發(fā)的軟件都會出現(xiàn)問題,下面合肥java培訓就一起來了解一下,java編程語言中的序列化問題應該如何解決。
什么是序列化?自從1997年發(fā)布JDK1.1以來,序列化已經存在于Java平臺中。
它用于在套接字之間共享對象表示,或者將對象及其狀態(tài)保存起來以供將來使用(反序列化)。
在JDK10及更低版本中,序列化作為java.base包和java.io.Serializable方法的一部分存在于所有的系統(tǒng)中。
序列化的挑戰(zhàn)和局限序列化的局限主要表現(xiàn)在以下兩個方面:出現(xiàn)了新的對象傳輸策略,例如JSON、XML、ApacheAvro、ProtocolBuffers等。
1997年的序列化策略無法預見現(xiàn)代互聯(lián)網服務的構建和攻擊方式。
進行序列化漏洞攻擊的基本前提是找到對反序列化的數(shù)據(jù)執(zhí)行特權操作的類,然后傳給它們惡意的代碼。
序列化在哪里?如何知道我的應用程序是否用到了序列化?要移除序列化,需要從java.io包開始,這個包是java.base模塊的一部分。
常見的使用場景是:實現(xiàn)Serializable接口和(可選)serialversionuid長整型字段。
使用ObjectInputStream或ObjectOutputStream。
使用嚴重依賴序列化的庫,例如:Xstream、Kryo、BlazeDS和大多數(shù)應用程序服務器。
使用這些方法的開發(fā)人員應考慮使用其他存儲和讀回數(shù)據(jù)的替代方法。
EishaySmith發(fā)布了幾個不同序列化庫的性能指標。
在評估性能時,需要在基準度量指標中包含安全方面的考慮。
默認的Java序列化“更快”一些,但漏洞也會以同樣的速度找上門來。
我們該如何降低序列化缺陷的影響?項目Amber包含了一個關于將序列化API隔離出來的討論。
我們的想法是將序列化從java.base移動到單獨的模塊,這樣應用程序就可以完全移除它。
在確定JDK11功能集時并沒有針對該提議得出任何結果,但可能會在未來的Java版本中繼續(xù)進行討論。
通過運行時保護來減少序列化暴露一個可以監(jiān)控風險并自動化可重復安全專業(yè)知識的系統(tǒng)對于很多企業(yè)來說都是很有用的。
Java應用程序可以將JVMTI工具嵌入到安全監(jiān)控系統(tǒng)中,通過插樁的方式將傳感器植入到應用程序中。
其他有用的安全技術在進行維護時,可以不需要手動列出一長串東西,而是使用像OWASPDependency-Check這樣的系統(tǒng),它可以識別出已知安全漏洞的依賴關系,并提示進行升級。
也可以考慮通過像DependABot這樣的系統(tǒng)進行庫的自動更新。
雖然用意很好,但默認的Oracle序列化過濾器存在與SecurityManager和相關沙箱漏洞相同的設計缺陷。
因為需要混淆角色權限并要求提前了解不可知的事物,限制了這個功能的大規(guī)模采用:系統(tǒng)管理員不知道代碼的內容,所以無法列出類文件,而開發(fā)人員不了解環(huán)境,甚至DevOps團隊通常也不知道系統(tǒng)其他部分(如應用程序服務器)的需求。
Java語言是一種非常適用于網絡編程的語言,它的基本結構與C++極為相似,但拋棄了C/C++中指針等內容,同時它吸收了Smalltalk、C++面向對象的編程思想。它具有簡單性、魯棒性、可移植性、動態(tài)性等特點。這些特點使得Java成為跨平臺應用開發(fā)的一種規(guī)范,在世界范圍內廣泛流傳。 加密Java源碼的原因 Java源代碼經過編譯以后在JVM中執(zhí)行。由于JVM界面是完全透明的,Java類文件能夠很容易通過反編譯器重新轉換成源代碼。因此,所有的算法、類文件等都可以以源代碼的形式被公開,使得軟件不能受到保護,為了保護產權,一般可以有以下幾種方法: (1)"模糊"類文件,加大反編譯器反編譯源代碼文件的難度。然而,可以修改反編譯器,使之能夠處理這些模糊類文件。所以僅僅依賴"模糊類文件"來保證代碼的安全是不夠的。 (2)流行的加密工具對源文件進行加密,比如PGP(Pretty Good Privacy)或GPG(GNU Privacy Guard)。這時,最終用戶在運行應用之前必須先進行解密。但解密之后,最終用戶就有了一份不加密的類文件,這和事先不進行加密沒有什么差別。 (3)加密類文件,在運行中JVM用定制的類裝載器(Class Loader)解密類文件。Java運行時裝入字節(jié)碼的機制隱含地意味著可以對字節(jié)碼進行修改。JVM每次裝入類文件時都需要一個稱為ClassLoader的對象,這個對象負責把新的類裝入正在運行的JVM。JVM給ClassLoader一個包含了待裝入類(例如java.lang.Object)名字的字符串,然后由ClassLoader負責找到類文件,裝入原始數(shù)據(jù),并把它轉換成一個Class對象。 用戶下載的是加密過的類文件,在加密類文件裝入之時進行解密,因此可以看成是一種即時解密器。由于解密后的字節(jié)碼文件永遠不會保存到文件系統(tǒng),所以竊密者很難得到解密后的代碼。 由于把原始字節(jié)碼轉換成Class對象的過程完全由系統(tǒng)負責,所以創(chuàng)建定制ClassLoader對象其實并不困難,只需先獲得原始數(shù)據(jù),接著就可以進行包含解密在內的任何轉換。 Java密碼體系和Java密碼擴展 Java密碼體系(JCA)和Java密碼擴展(JCE)的設計目的是為Java提供與實現(xiàn)無關的加密函數(shù)API。它們都用factory方法來創(chuàng)建類的例程,然后把實際的加密函數(shù)委托給提供者指定的底層引擎,引擎中為類提供了服務提供者接口在Java中實現(xiàn)數(shù)據(jù)的加密/解密,是使用其內置的JCE(Java加密擴展)來實現(xiàn)的。Java開發(fā)工具集1.1為實現(xiàn)包括數(shù)字簽名和信息摘要在內的加密功能,推出了一種基于供應商的新型靈活應用編程接口。Java密碼體系結構支持供應商的互操作,同時支持硬件和軟件實現(xiàn)。 Java密碼學結構設計遵循兩個原則: (1)算法的獨立性和可靠性。 (2)實現(xiàn)的獨立性和相互作用性。 算法的獨立性是通過定義密碼服務類來獲得。用戶只需了解密碼算法的概念,而不用去關心如何實現(xiàn)這些概念。實現(xiàn)的獨立性和相互作用性通過密碼服務提供器來實現(xiàn)。密碼服務提供器是實現(xiàn)一個或多個密碼服務的一個或多個程序包。軟件開發(fā)商根據(jù)一定接口,將各種算法實現(xiàn)后,打包成一個提供器,用戶可以安裝不同的提供器。安裝和配置提供器,可將包含提供器的ZIP和JAR文件放在CLASSPATH下,再編輯Java安全屬性文件來設置定義一個提供器。Java運行環(huán)境Sun版本時, 提供一個缺省的提供器Sun。 下面介紹DES算法及如何利用DES算法加密和解密類文件的步驟。 DES算法簡介 DES(Data Encryption Standard)是發(fā)明最早的最廣泛使用的分組對稱加密算法。DES算法的入口參數(shù)有三個:Key、Data、Mode。
由于Java字節(jié)碼的抽象級別較高,因此它們較容易被反編譯。下面介紹了幾種常用的方法,用于保護Java字節(jié)碼不被反編譯。通常,這些方法不能夠絕對防止程序被反編譯,而是加大反編譯的難度而已,因為這些方法都有自己的使用環(huán)境和弱點。
1.隔離Java程序
最簡單的方法就是讓用戶不能夠訪問到Java Class程序,這種方法是最根本的方法,具體實現(xiàn)有多種方式。例如,開發(fā)人員可以將關鍵的Java Class放在服務器端,客戶端通過訪問服務器的相關接口來獲得服務,而不是直接訪問Class文件。這樣黑客就沒有辦法反編譯Class文件。目前,通過接口提供服務的標準和協(xié)議也越來越多,例如 HTTP、Web Service、RPC等。但是有很多應用都不適合這種保護方式,例如對于單機運行的程序就無法隔離Java程序。
2.對Class文件進行加密
為了防止Class文件被直接反編譯,許多開發(fā)人員將一些關鍵的Class文件進行加密,例如對注冊碼、序列號管理相關的類等。在使用這些被加密的類之前,程序首先需要對這些類進行解密,而后再將這些類裝載到JVM當中。這些類的解密可以由硬件完成,也可以使用軟件完成。
在實現(xiàn)時,開發(fā)人員往往通過自定義ClassLoader類來完成加密類的裝載(注意由于安全性的原因,Applet不能夠支持自定義的ClassLoader)。自定義的ClassLoader首先找到加密的類,而后進行解密,最后將解密后的類裝載到JVM當中。在這種保護方式中,自定義的ClassLoader是非常關鍵的類。由于它本身不是被加密的,因此它可能成為黑客最先攻擊的目標。如果相關的解密密鑰和算法被攻克,那么被加密的類也很容易被解密。
3.轉換成本地代碼
將程序轉換成本地代碼也是一種防止反編譯的有效方法。因為本地代碼往往難以被反編譯。開發(fā)人員可以選擇將整個應用程序轉換成本地代碼,也可以選擇關鍵模塊轉換。如果僅僅轉換關鍵部分模塊,Java程序在使用這些模塊時,需要使用JNI技術進行調用。當然,在使用這種技術保護Java程序的同時,也犧牲了Java的跨平臺特性。對于不同的平臺,我們需要維護不同版本的本地代碼,這將加重軟件支持和維護的工作。不過對于一些關鍵的模塊,有時這種方案往往是必要的。為了保證這些本地代碼不被修改和替代,通常需要對這些代碼進行數(shù)字簽名。在使用這些本地代碼之前,往往需要對這些本地代碼進行認證,確保這些代碼沒有被黑客更改。如果簽名檢查通過,則調用相關JNI方法。
4.代碼混淆
代碼混淆是對Class文件進行重新組織和處理,使得處理后的代碼與處理前代碼完成相同的功能(語義)。但是混淆后的代碼很難被反編譯,即反編譯后得出的代碼是非常難懂、晦澀的,因此反編譯人員很難得出程序的真正語義。從理論上來說,黑客如果有足夠的時間,被混淆的代碼仍然可能被破解,甚至目前有些人正在研制反混淆的工具。但是從實際情況來看,由于混淆技術的多元化發(fā)展,混淆理論的成熟,經過混淆的Java代碼還是能夠很好地防止反編譯。下面我們會詳細介紹混淆技術,因為混淆是一種保護Java程序的重要技術。
分享文章:如何保護代碼java,如何保護代碼產權
標題URL:http://vcdvsql.cn/article22/hecojc.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供關鍵詞優(yōu)化、手機網站建設、品牌網站制作、網站收錄、網站策劃、用戶體驗
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)