有 a - b < c 似芝, 對Java安全性思考

軟件工程中,不論使用哪種開發(fā)語言板甘,安全性一直是一個非常棘手卻又重要的問題党瓮。安全性是軟件開發(fā)領(lǐng)域永遠(yuǎn)的主題之一,而且隨著互聯(lián)網(wǎng)的蜂擁發(fā)展而帶動的新技術(shù)的興起與革命(比如近幾年火起來的node.js盐类,python寞奸,go等呛谜,甚至微軟也開源后的.net Core),軟件工程中的安全性更加的凸顯與重要了枪萄。

那么隐岛,什么才是危險(xiǎn)的呢?我的第一反應(yīng)是注入攻擊瓷翻,比如SQL注入攻擊聚凹。一個典型的場景是WEB應(yīng)用中,用戶登陸功能齐帚,根據(jù)用戶輸入的用戶名密碼獲取相應(yīng)的數(shù)據(jù)妒牙,那么SQL注入就應(yīng)運(yùn)而生,模擬用戶名对妄,密碼加入特殊字符湘今,加入惡意腳本等等手段,進(jìn)而造成不了可挽回的后果剪菱。比如象浑,正常腳本當(dāng)如:
select * from userInfo where username='input_Name' and password='input_Pwd or'
 那么,如果是這樣的呢琅豆?
select * from userInfo where username='input_Name' and password='input_Pwdte' or 1=1 or ''

關(guān)于如何編寫安全的Java代碼愉豺,Sun官方給了一份指南,有興趣的同學(xué)可以參考這篇文章茫因,大致為:

? 靜態(tài)字段
    ? 縮小作用域
    ? 公共方法和字段
    ? 保護(hù)包
    ? equals方法
    ? 如果可能使對象不可改變
    ? 不要返回指向包含敏感數(shù)據(jù)的內(nèi)部數(shù)組的引用
    ? 不要直接存儲用戶提供的數(shù)組
    ? 序列化
    ? 原生函數(shù)
    ? 清除敏感信息

比如蚪拦,DoS是一種常見的網(wǎng)絡(luò)攻擊,有人戲稱為“洪水攻擊”驰贷。其慣用手法是通過某種手段,比如大量的機(jī)器發(fā)送請求括袒,將目標(biāo)網(wǎng)站寬帶和其資源耗盡,導(dǎo)致用戶無法正常訪問锹锰,甚至服務(wù)器的宕機(jī)。

而對于此類問題漓库,如果單從服務(wù)器級別考慮恃慧,多少欠缺,我們或許需要考慮程序級別的攻擊痢士,比如Java,JVM怠蹂,以及涉及到的線程方面的安全善延,應(yīng)用程序的瑕疵等進(jìn)行低成本的DoS攻擊。

而在面試中城侧,我們都會被問到安全性的問題易遣,卻大多比較多泛泛,大而廣赞庶,而大多數(shù)的安全性問題都與代碼安全性有關(guān)澳骤。我們回顧下Java代碼的運(yùn)行過程:

首先編譯器把.java文件編程成.class字節(jié)碼文件,然后由類加載器負(fù)責(zé)把.class文件加載到JVM为肮,再由字節(jié)碼校驗(yàn)進(jìn)行校驗(yàn),然后由Java解釋器負(fù)責(zé)把該類文件解釋為機(jī)器碼執(zhí)行茅特。

在類加載器加載.class文件到j(luò)ava虛擬機(jī)的過程中棋枕,類加載器通過區(qū)分本機(jī)文件系統(tǒng)的類和網(wǎng)絡(luò)系統(tǒng)導(dǎo)入的類增加安全性(不允許網(wǎng)絡(luò)上的應(yīng)用程序修改本地的數(shù)據(jù))白修,本機(jī)的類先被加載重斑,一旦所有的類加載完,執(zhí)行文件的內(nèi)存劃分就固定了窥浪,然后字節(jié)碼校驗(yàn)器開始校驗(yàn).class字節(jié)碼文件,字節(jié)碼校驗(yàn)器不檢查那些可信任的編譯器所產(chǎn)生的類文件假颇。通過之后,java解釋器材負(fù)責(zé)把類文件解釋成為機(jī)器碼進(jìn)行執(zhí)行笨鸡。

a b c 都是int類型的數(shù)值 if(a - b < c) { // … }
  這段看似簡單坦冠,沒毛病的代碼會引發(fā)下列問題:

如果b<0,而造成的數(shù)據(jù)溢出蓝牲,你能想象出多少問題?例衍!而對于越界的處理雖然Java底層給出了很好的解決已卸,但是數(shù)值而造成內(nèi)存問題不容小覷硼一。

當(dāng)然累澡,過多的考慮安全性問題,勢必會造成應(yīng)用程序的冗余甚至疲軟般贼,這些需要視情況而定,而不可蓋棺而論蕊梧。

再比如腮介,對于一段可能出現(xiàn)問題的代碼肥矢,常用手段 try … catch(){… },那么問題來了叠洗,catch的是什么?而一般情況下十艾,我們程序需要抓取到catch腾节,因?yàn)橐鋈罩咎幚砼备敲慈罩局胁豢苫蛉钡挠蓄愃拼a位置禀倔,方法名,以及錯誤原因等愧杯,甚至包含了敏感信息鞋既。當(dāng)然力九,不可避免邑闺,我的建議是,盡量使用內(nèi)部標(biāo)識的異常信息抵乓,而返回給客戶端的類似異常消息盡量少的自動返回的異常消息。

對于安全標(biāo)準(zhǔn)特別高的系統(tǒng)灾炭,甚至可能要求敏感信息被使用后,要立即明確再內(nèi)存中銷毀蜈出,以免被探測到;或者避免在發(fā)生core dump時偷厦,意外暴露燕刻。

開發(fā)和測試階段

1. 盡量的規(guī)范化代碼,可參考《阿里巴巴開發(fā)手冊》

2. 盡量多的code review酌儒,避免不必要尷尬代碼出現(xiàn)

3. 在代碼check-in等環(huán)節(jié)枯途,利用hook機(jī)制去調(diào)用規(guī)則檢查工具,保證不合規(guī)范代碼進(jìn)入OpenJDK代碼庫

部署階段

可參考JDK在加密方法的路線圖

以上皆為日常開發(fā)總結(jié)酪夷,也借鑒網(wǎng)上大神的文章,略略整理一二鸥印,權(quán)作學(xué)習(xí)使用坦报,當(dāng)然面試能幫到不慎感動了库说,以后有機(jī)會再做梳理片择。

歡迎指點(diǎn)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末啰挪,一起剝皮案震驚了整個濱河市嘲叔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌硫戈,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件歇由,死亡現(xiàn)場離奇詭異,居然都是意外死亡沦泌,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門释牺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來回挽,“玉大人,你說我怎么就攤上這事千劈。” “怎么了涡驮?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵喜滨,是天一觀的道長。 經(jīng)常有香客問我虽风,道長,這世上最難降的妖魔是什么无牵? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任厂抖,我火速辦了婚禮,結(jié)果婚禮上验游,老公的妹妹穿的比我還像新娘。我一直安慰自己耕蝉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布蒜魄。 她就那樣靜靜地躺著,像睡著了一般旅挤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上粘茄,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天秕脓,我揣著相機(jī)與錄音,去河邊找鬼吠架。 笑死,一個胖子當(dāng)著我的面吹牛傍药,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拣挪,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼薛训,長吁一口氣:“原來是場噩夢啊……” “哼仑氛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起锯岖,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎遇伞,沒想到半個月后捶牢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鸠珠,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡渐排,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年灸蟆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡霎迫,死狀恐怖帘靡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情描姚,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布谒主,位于F島的核電站赃阀,受9級特大地震影響霎肯,放射性物質(zhì)發(fā)生泄漏榛斯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一懂缕、第九天 我趴在偏房一處隱蔽的房頂上張望王凑。 院中可真熱鬧搪柑,春花似錦索烹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽旬迹。三九已至求类,卻和暖如春奔垦,著一層夾襖步出監(jiān)牢的瞬間仑嗅,已是汗流浹背张症。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工鸵贬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人阔逼。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓嗜浮,卻偏偏與公主長得像羡亩,于是被迫代替她去往敵國和親危融。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,111評論 25 707
  • 用兩張圖告訴你,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料蛋勺? 從這篇文章中你...
    hw1212閱讀 12,723評論 2 59
  • 有多少渴望才能形成一個夢想?有多少夢想陪伴我們成長抱完?時間流逝,很多夢想已經(jīng)變成現(xiàn)實(shí)碉怔,還有一些藏在心里面最深的地方。...
    oulan閱讀 252評論 0 0
  • 在五月眨层,搬家住進(jìn)了華盛頓州的溫哥華市上荡。其實(shí)就是俄勒岡州的波特蘭市的郊區(qū)馒闷,哥倫比亞河將兩座城市自然地分開酪捡。春天自然相...
    美西旅行者閱讀 143評論 1 1
  • 地球繁華時纳账,出現(xiàn)了修仙者,看時間風(fēng)云變幻疏虫,如何讓林麒創(chuàng)下神話
    龍雲(yún)丨天樂閱讀 153評論 0 0