日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
關(guān)于Python漏洞挖掘那些不得不提的事兒

前言

專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)加查免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了成百上千企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

Python因其在開發(fā)更大、更復(fù)雜應(yīng)用程序方面獨特的便捷性,使得它在計算機(jī)環(huán)境中變得越來越不可或缺。雖然其明顯的語言清晰度和使用友好度使得軟件工程師和系統(tǒng)管理員放下了戒備,但是他們的編碼錯誤還是有可能會帶來嚴(yán)重的安全隱患。

這篇文章的主要受眾是還不太熟悉Python的人,其中會提及少量與安全有關(guān)的行為以及有經(jīng)驗開發(fā)人員遵循的規(guī)則。

輸入函數(shù)

在Python2強(qiáng)大的內(nèi)置函數(shù)中,輸入函數(shù)完全就是一個大的安全隱患。一旦調(diào)用輸入函數(shù),任何從stdin中讀取的數(shù)據(jù)都會被認(rèn)定為Python代碼:

$ python2

>>> input()

dir()

['__builtins__', '__doc__', '__name__', '__package__']

>>> input()

__import__('sys').exit()

$

顯然,只要腳本stdin中的數(shù)據(jù)不是完全可信的,輸入函數(shù)就是有危險的。Python 2 文件將 raw_input 認(rèn)定為一個安全的選擇。在Python3中,輸入函數(shù)相當(dāng)于是 raw_input,這樣就可以完全修復(fù)這一問題。

assert語句

還有一條使用 assert 語句編寫的代碼語句,作用是捕捉 Python 應(yīng)用程序中下一個不可能條件。

def verify_credentials(username, password):

assert username and password, 'Credentials not supplied by caller'

... authenticate possibly null user with null password ...

然而,Python在編譯源代碼到優(yōu)化的字節(jié)代碼 (如 python-O) 時不會有任何的assert 語句說明。這樣的移除使得程序員編寫用來抵御攻擊的代碼保護(hù)都形同虛設(shè)。

這一弱點的根源就是assert機(jī)制只是用于測試,就像是c++語言中那樣。程序員必須使用其他手段才能確保數(shù)據(jù)的一致性。

可重用整數(shù)

在Python中一切都是對象,每一個對象都有一個可以通過 id 函數(shù)讀取的唯一標(biāo)示符??梢允褂眠\算符弄清楚是否有兩個變量或?qū)傩远贾赶蛳嗤膶ο蟆U麛?shù)也是對象,所以這一操作實際上是一種定義:

>>> 999+1 is 1000

False

上述操作的結(jié)果可能會令人大吃一驚,但是要提醒大家的是這樣的操作是同時使用兩個對象標(biāo)示符,這一過程中并不會比較它們的數(shù)值或是其它任何值。但是:

>>> 1+1 is 2

True

對于這種行為的解釋就是Python當(dāng)中有一個對象集合,代表了最開始的幾百個整數(shù),并且會重利用這些整數(shù)以節(jié)省內(nèi)存和對象創(chuàng)建。更加令人疑惑的就是,不同的Python版本對于“小整數(shù)”的定義是不一樣的。

這里所指的緩存永遠(yuǎn)不會使用運算符進(jìn)行數(shù)值比較,運算符也專門是為了處理對象標(biāo)示符。

浮點數(shù)比較

處理浮點數(shù)可能是一件更加復(fù)雜的工作,因為十進(jìn)制和二進(jìn)制在表示分?jǐn)?shù)的時候會存在有限精度的問題。導(dǎo)致混淆的一個常見原因就是浮點數(shù)對比有時候可能會產(chǎn)生意外的結(jié)果。下面是一個著名的例子:

>>> 2.2 * 3.0 == 3.3 * 2.0

False

這種現(xiàn)象的原因是一個舍入錯誤:

>>> (2.2 * 3.0).hex()

'0x1.a666666666667p+2'

>>> (3.3 * 2.0).hex()

'0x1.a666666666666p+2'

另一個有趣的發(fā)現(xiàn)就是Python float 類型支持無限概念。一個可能的原因就是任何數(shù)都要小于無限:

>>> 10**1000000 > float('infinity')

False

但是在Python3中,有一種類型的對象不支持無限:

>>> float > float('infinity')

True

一個最好的解決辦法就是堅持使用整數(shù)算法,還有一個辦法就是使用十進(jìn)制內(nèi)核模塊,這樣可以為用戶屏蔽煩人的細(xì)節(jié)問題和缺陷。

一般來說,只要有任何算術(shù)運算就必須要小心舍入錯誤。詳情可以參閱 Python 文檔中的《發(fā)布和局限性》一章。


本文標(biāo)題:關(guān)于Python漏洞挖掘那些不得不提的事兒
轉(zhuǎn)載源于:http://www.5511xx.com/article/dhdsoge.html