是否每一個軟體都存在已知或未知的漏洞?造成這種情況的原因是什麼?
如題,好奇~
謝邀;
凱文·米特尼克曾在自己的書《反欺騙的藝術》上說過幾段話,我覺得很有參考價值,在這裡發出來「某公司也許購置了能用錢買到的最好的安全技術,員工們也訓練有素,每晚回家前把所有的秘密都鎖起來,並從業內最好的保安公司僱用了保安,但這家公司仍然易受攻擊。一些人可能遵從了專家所有最好的安全建議,安裝了各種受推薦的安全產品,並十分謹慎的處理系統配置以及應用安全補丁,但他們仍然很不安全。安全,通常情況下僅僅是個幻想,由其是輕信、好奇和無知存在的時候。二十世紀最受尊敬的科學家愛因斯坦這樣說道:「只有兩種事物是無窮盡的――宇宙和人類的愚蠢。但對於前者,我不敢確定。」最終,社會工程學的攻擊,成功於人們的愚蠢或更為普遍的對信息安全實踐上的無知。」曾先後工作於美國國防部與美國電話電報公司(ATT)的貝爾實驗室的密碼學先驅布魯斯·施奈爾也曾經表示:「安全不是一件產品,它是一個過程。」近一步說,安全不是技術問題,它是人和管理的問題。由於開發商不斷地創造出更好的安全科技產品,攻擊者利用技術上的漏洞變得越來越困難。於是,越來越多的人轉向利用人為因素的手段來進行攻擊。穿越人這道防火牆十分容易,只需打一個電話的成本和冒最小的風險。」
最後還有一點我想說的是,企業安全是一個平衡問題,安全性太差公司易受攻擊,但過多的強調安全又會妨礙業務管理和公司的發展,其難點在於達到生產效率和安全之間的平衡,當初淘寶採取每登陸一次就需要輸入一次驗證碼的時候,招來了一片不滿,後來不堪重負的取消後,又有人質疑這樣做的安全性;事實上,便捷和安全本來就無法兩全,要是每個人都能記得住幾十個密碼,那今天安全商家早就全破產了吧(= ̄ω ̄=)謝邀。因為人才是最大的漏洞。
零BUG的軟體是不存在的!零BUG的軟體是不存在的!零BUG的軟體是不存在的!
目前沒有BUG,只是沒有發現,而不能表明軟體沒有BUG。
這是軟體測試的最基本的原則。最近也在想這個問題。但我更擔心的是我們的數學大廈:如果所有軟體都有bug的前提成立,那麼已被確認的數學定理有些是否同樣存在證明漏洞。bug存在有時還不影響軟體的性能,但由於偽證明的存在,如果全世界數學家們都在錯誤的道路上一路狂奔那就非常不好笑了。用一句話概括就是:下一次數學危機會不會以上一次軟體危機的形式出現?發展到一定程度數學應用起來需要非常純熟的技巧,動輒幾百頁的證明全世界看過且能看懂的審稿人數也數得過來。畢竟沒有足夠多審視的眼睛,bugs是非常容易隱藏的。
是可以這麼說的,因為你無法證明一個軟體沒有漏洞。
新代碼的增加和對老漏洞的修復都有可能誘發新的漏洞。程序員每天寫幾百到幾千行代碼,不可能全部記得細節。因此在復用代碼的過程中會造成各種奇怪的問題。我們能做的只有多做測試,盡量考慮到所有情況,但是總會有考慮不周的地方。
就像門鎖一樣。正常人使用的話門鎖是絕對安全的,只要打不開那就是鑰匙不對。但是黑客們並不是正常人,他們想盡辦法撬鎖。我們加固門鎖,他們就想辦法爬窗戶。。。
沒有絕對的安全。提升安全性也是需要成本的。如果為了五千塊錢的東西花一萬塊錢去提升安全性,還不如直接被偷掉,還能省五千。
程序的正確性不可判定,計算理論講過這些問題的證明,比如rice定理之類
也有一些例子能方便理解這點(比如停機問題等)所以自動證明的路子是不通的。有形式化驗證技術比如Petri網、model checking等,是對部分正確性做出回答,而且回答的是模型、協議的一些安全屬性是否被滿足(比如活性等)等問題。至於手動證明(形式化開發),現在有形式化開發方法和工具比如Atelier B限制比較大,此外軟體是基於編譯器、操作系統、資料庫、網路、中間件和硬體等,要嚴格證明軟體正確性,自底向上有很多證明要做,很多就是可信計算的事情了,目前無解。簡單的說,無論你是自動擋還是手動檔的老司機,在現實世界中都沒法證明軟體是沒有漏洞的。為啥?因為自動檔跑不通,手動擋跑不動。歡迎搞計算理論、形式化開發和驗證的大神交流。曾經有個想法想給Spin做個建模和代碼生成環境。。你沒有辦法證明一個軟體沒有漏洞
如果管hello world叫一個軟體的話,大多數應該是沒有漏洞的。
但項目一複雜,參與的人員水平參差不齊,又不一定相互理解……高級語言和框架的各種抽象,系統本身的複雜性,硬體條件的問題以及身為人類的程序員的能力上限都是因素。
另外,漏洞也是人定義的,如果大家都不認為某種意料外的情況是個問題,那這就不算漏洞。我認為既然是一個軟體,那麼他就一定有漏洞,只不過你暫時還沒發現,或者說你沒有能力利用這個漏洞。就像一棟房子,門鎖非常高級,小偷打不開鎖,但小偷可以把牆挖一個洞啊
沒有絕對的安全。原因太多了。無意的。存心的。
中國上古時代修帝王陵墓的時候,聰明的工匠都會偷偷摸摸修一條逃生通道。帝王為了保全陵墓秘密,殺人滅口,把工匠作為陪葬的時候,就可以撿一條小命了。程序員留點後手,我想也是這個緣故吧,一個是防止兔死狗烹,過河拆橋。另一個也是養寇自重,留點後手
推薦閱讀:
※在完美世界工作是種怎樣的體驗?
※人人網在滿足用戶需求方面存在哪些問題?
※一個菜鳥如何學習才能成為做網站的牛人?
※運營總監或運營經理是怎麼成長起來的?
※互聯網到底是靠什麼獲得利潤的?點擊量、流量、廣告?