分享 使用第三方上傳外掛程式的引起的頁面許可權處理

2022-07-29 04:27:11 字數 2177 閱讀 5477

這段時間在discuz的門戶上面加了乙個批量上傳的外掛程式,來會搞了好幾天 算是大功告成了,就是少了乙個水印的功能。現在回顧下實現時候出現的乙個問題,就是接收頁面的許可權問題。

首先我們知道,在檔案上傳的時候,接收頁面是不可以直接被訪問的。如果可以直接被訪問的話,入侵者就可以很簡單的構造第三方的post工具借助千面獲取到的特定字段進行貝本地的傳輸。可以上傳任意的檔案到伺服器上面,當然即使你的伺服器在接收頁面的上做了驗證檔案有效,但是實用cookie的時候就有你鬱悶的了。入侵者可以在上傳乙個合法的檔案,然後進行post抓包。可以很簡單的抓取到相關的資訊,比如提交的頁面,cookie,等等資訊。這其中cookie一般是最危險的。入侵者在實用本地工具進行構造傳輸,將cookie也同樣的提交上去,這樣就可以很簡單的進行資料欺騙。

還有一種就是實用**驗證,說白了就是在接收頁面做乙個驗證,驗證接收的資料是來自指定的路徑。這一般會涉及到另外的乙個技術就是,$_server['

'],可以在這裡面進行獲取**的位址,但是這個函式有一定的侷限性,比如沒有設定,進行的隱藏表單提交,等都是獲取不到任何的**位址的。這裡就要說到我遇到的問題了,因為flash是嵌入在html的乙個執行檔案,可以構造響應的表單進行傳輸,但是如果你是flash的開發者,或者flash的上傳頁面提供第三方的介面供你來進行傳輸特徵碼,才可以進行有效的驗證,更好的就是提供session的驗證。但是目前我們實用的flash的第三方外掛程式很少有提供很完美的這樣的介面,而flash上傳一大部分是構造好乙個表單然後通過post的隱藏方式提交。說白了就是直接提交到你指定的url上面,跟不就談不上是同乙個會話機制了,所以session這東西就顯得力不從心了。

回過頭來看下,我用的這個flash上傳外掛程式就很不幸的沒有提供很好的加密解決方案,並且傳輸是直接的進行post隱藏式的提交,就相當於乙個軟體式的直接提交。既然要進行接收端的加密,又要保證在登入的時候可以正常進行提交,也要同時保證即使在登入狀態下也不可以脫離本頁面進行提交(如果可以脫離本頁面的話,就出現了另外的乙個漏洞,這個下面說)。

顯然session是不可以用的,因為是內部post隱藏提交,相當於構建多個表單進行多個頁面彈出式的提交,這樣根本就不可能傳入session的資訊,因為已經脫離了當前會話。

而後我們想到cookie,但是又否決了,因為cookie的傳輸是相當不安全的,並且,在新的頁面中這種cookie又是不可用的,果斷放棄cookie驗證。

假設我們上傳的時候進行快取重寫或者清空,這樣下乙個檔案在提交的時候就不能進行了。

假設我們在上傳完畢後進行銷毀,如果操作者在上傳過程中宕機了呢?這樣快取就無法進行更新了,這個時間就給黑客有了可趁之機。顯然這又是不行的,並且快取的讀寫頻率很高的話會影響機器的硬碟效能。

快取行不通了,我們能不能直接自己來寫乙個臨時檔案進行儲存呢?顯然這也是不行的,這和快取一樣涉及到什麼時候銷毀什麼時候進行重寫?

那麼**驗證呢?千面我們說過flash在提交的時候相當於新開了乙個瀏覽器,顯然這也是不行的。

那麼到底我們因該採取什麼樣的方法來進行驗證呢?我們不妨可以這樣的想下,驗證碼是我們自己進行書寫規則的,加密明文也是我們掌握的,我們和不利用我們這點來進行乙個驗證呢?即使入侵者知道特徵碼和加密後的文字,但是入侵者永遠都不一定知道我們用的何種加密方式。我們可以模仿discuz中的加密方式,將一段字元結合隨機數進行加密,這樣即使入侵者知道我們的隨機數,也知道我們的明文,但是卻不知道我們真正加密的密碼到底是什麼!這就充分保證了密碼的安全性。

好了處理的思路有了,那就開始實施吧,首先我們在上傳頁面 homep_eidtor.php 中書寫上我們自己的加密方法,生成兩個東西,乙個是加密的隨機碼,乙個是加密後的密碼。 然後在接收頁面中寫上接收密碼和隨機碼的東西,我們將真正的加密東西可以實用固定的,也可以實用快取檔案中的,因為快取無論銷毀和不銷毀對我們的安全都是沒有任何影響的。

上面的原理如下圖

這就是的實現思路。

好了,我們現在來解釋下為什麼要強調在登入狀態也不可以脫離當前頁面提交,原因其實很簡單。試想:入侵者如果偶然獲取到了管理員的帳戶密碼,然後就可以進行那個頁面了,顯然這時候就可以進行頁面的提交了,如果說使用了第三方的工具進行提交的話,就會產生很大的問題咯。輕則會導致伺服器臃腫,重則直接提權伺服器。當然這點有點多慮了,但是為了以防萬一最好家一點提交頁面特有的東西提交到接收頁面上去。最好使用比較常見的一些字段資訊,這會被很多的入侵者所忽略。如果比較醒目的話就不好了。。呵呵

Flask 第三方外掛程式

因為flask自帶的session是將session存在cookie中 所以才有了第三方flask session外掛程式,可以將session儲存在我們想儲存的資料庫中 redis等 pip install flask session注意redis資料庫一定是在內網中的且是一台單獨的伺服器,防止被...

shareSDK(分享第三方庫)的 使用

這個例子我自己裁剪的官方的例子很好,但 太多不方便看,其實會乙個其他的也就會了。1 匯入如下框架和第三方庫 下面是微博分享的 裡子 ibaction sharesina id sender 都在agapiviewcontroller.m這個類中,大家找到這類就可以在裡面找到對應的方法。param s...

Delphi第三方外掛程式的安裝

本文 不是由borland提供的元件叫第三方元件 安裝方法 就目前常見的各種形式的元件的安裝方法介紹一下。1 只有乙個dcu檔案的元件。dcu檔案是編譯好的單元檔案,這樣的元件是作者不想把原始碼公布。一般來說,作者必須說明此元件適合delphi的哪種版本,如果版本不對,在安裝時就會出現錯誤。也正是因...