《網絡攻防實踐》第十週做業

馮諾依曼體系結構與圖靈機

馮諾依曼體系結構

馮·諾伊曼結構(英語:Von Neumann architecture),也稱馮·諾伊曼模型(Von Neumann model)或普林斯頓結構(Princeton architecture),是一種將程序指令存儲器和數據存儲器合併在一塊兒的計算機設計概念結構。本詞描述的是一種實現通用圖靈機的計算設備,以及一種相對於並行計算的序列式結構參考模型(referential model)。sql

本結構隱約指導了將存儲設備與中央處理器分開的概念,所以依本結構設計出的計算機又稱存儲程序計算機。
馮.諾依曼體系結構是現代計算機的基礎,如今大多計算機還是馮.諾依曼計算機的組織結構,只是做了一些改進而已,並無從根本上突破馮體系結構的束縛。馮.諾依曼也所以被人們稱爲「計算機之父」。數據庫

存儲程序計算機在體系結構上主要特色有:編程

  • 以運算單元爲中心
  • 採用存儲程序原理
  • 存儲器是按地址訪問、線性編址的空間
  • 控制流由指令流產生
  • 指令由操做碼和地址碼組成
  • 數據以二進制編碼

程序內存和數據內存之間的共享總線致使了馮諾依曼瓶頸,即中央處理器(CPU)和內存之間的有限吞吐量(數據傳輸速率)與內存的數量相比。由於單個總線一次只能訪問兩類內存中的一種,因此吞吐量低於CPU的工做速率。當CPU須要對大量數據執行最小的處理時,這嚴重限制了有效的處理速度。CPU不斷地被迫等待所需的數據被傳輸到或從內存中。因爲CPU速度和內存大小的增加速度比它們之間的吞吐量增加速度快得多,瓶頸已經成爲一個更大的問題,這個問題的嚴重性隨着新一代CPU的出現而增長。安全

圖靈機

一張經典的圖靈機構成圖:

圖靈的基本思想是用機器來模擬人們用紙筆進行數學運算的過程,他把這樣的過程看做下列兩種簡單的動做:服務器

  • 在紙上寫上或擦除某個符號
  • 把注意力從紙的一個位置移動到另外一個位置
    而在每一個階段,人要決定下一步的動做,依賴於(a)此人當前所關注的紙上某個位置的符號和(b)此人當前思惟的狀態。

在某些模型中,紙帶移動,而未用到的紙帶真正是「空白」的。要進行的指令(q4)展現在掃描到方格之上。xss

在某些模型中,讀寫頭沿着固定的紙帶移動。要進行的指令(q1)展現在讀寫頭內。在這種模型中「空白」的紙帶是所有爲0的。有陰影的方格,包括讀寫頭掃描到的空白,標記了1,1,B的那些方格,和讀寫頭符號,構成了系統狀態。編碼

爲了模擬人的這種運算過程,圖靈構造出一臺假想的機器,該機器由如下幾個部分組成:設計

  • 一條無限長的紙帶TAPE。紙帶被劃分爲一個接一個的小格子,每一個格子上包含一個來自有限字母表的符號,字母表中有一個特殊的符號 {\displaystyle \square } \square表示空白。紙帶上的格子從左到右依次被編號爲0, 1, 2, ...,紙帶的右端能夠無限伸展。
  • 一個讀寫頭HEAD。該讀寫頭能夠在紙帶上左右移動,它能讀出當前所指的格子上的符號,並能改變當前格子上的符號。
  • 一套控制規則TABLE。它根據當前機器所處的狀態以及當前讀寫頭所指的格子上的符號來肯定讀寫頭下一步的動做,並改變狀態寄存器的值,令機器進入一個新的狀態,按照如下順序告知圖靈機命令:
    • 寫入(替換)或擦除當前符號
    • 移動 HEAD, 'L'向左, 'R'向右或者'N'不移動
    • 保持當前狀態或者轉到另外一狀態
  • 一個狀態寄存器。它用來保存圖靈機當前所處的狀態。圖靈機的全部可能狀態的數目是有限的,而且有一個特殊的狀態,稱爲停機狀態。參見停機問題。
    注意這個機器的每一部分都是有限的,但它有一個潛在的無限長的紙帶,所以這種機器只是一個理想的設備。圖靈認爲這樣的一臺機器就能模擬人類所能進行的任何計算過程。

馮諾依曼體系結構和圖靈機的聯繫

首先什麼是圖靈機和馮諾依曼計算機體系。圖靈機是一個計算機的理論模型,本質上是狀態機;馮諾依曼體系是圖靈機的實現,包括運算、控制、存儲、輸入、輸出五個部分。諾依曼體系相對以前的計算機最大的創新在於程序和數據的存儲,以此實現機器內部編程。blog

圖靈機的紙帶應對應諾依曼計算機體系中的存儲,讀寫頭對應輸入和輸出,規則(讀了一個符號後下一步作什麼)對應運算,紙帶怎麼移動對應控制。內存

參考:https://www.zhihu.com/question/25004267/answer/86444056

程序 = 指令 + 數據

無論多麼複雜的軟件程序,到了彙編層面(最接近硬件的層面), 都成了簡單的指令流。這些指令流雖然簡單,可是已經包含了全部必須的計算指令。每一行彙編代碼都有固定的格式,都是一條指令,而寄存器爲數據提供了一種存儲的方式,操做寄存器能夠對寄存器中的數據進行操做。
程序 = 指令 + 數據是對程序的一種直觀、本質的解釋方式。

緩衝區溢出、XSS攻擊、SQL注入攻擊

這些安全問題的共同點是都進行了越界訪問,訪問了他們本不應訪問到的內存空間,從而執行了本不應被執行的代碼。

對於緩衝區溢出攻擊來講,這種說法很是好理解,就是緩衝區溢出字面的意思。

對於XSS攻擊,XSS攻擊被認爲是「新型的緩衝區溢出攻擊」,其本質也是利用緩衝區溢出實現。

對於SQL注入攻擊該如何理解呢?SQL注入是一種針對數據庫的攻擊方式,攻擊者在輸入的字符串之中注入SQL指令,在設計不良的程序當中忽略了字符檢查,那麼這些注入進去的惡意指令就會被數據庫服務器誤認爲是正常的SQL指令而運行,所以遭到破壞或是入侵。在設計的意圖中,接受這些惡意的sql指令的地方本不該該執行該種類型的代碼,也就是說原本應該沒有權限進行該種類型的操做,查詢就應該只是查詢,並且只能是在該針對用戶的查詢或者說是針對數據庫中某個表的某一項的查詢,用戶的輸入原本只能是參數而非指令,而當用戶的輸入變成指令後,訪問的內存就不是原來指令所在的內存了。

要提出統一的防範措施,我認爲很難對全部攻擊作到有效的防護,或者說不能比單獨針對這三種攻擊的防範措施加起來作的更好。由於這三種攻擊畢竟是針對三種不一樣的應用。若是說有一種統一的防範措施的話,那我以爲是嚴格的內存邊界檢查,對每一條指令的訪問內存範圍都進行檢查,但這會大大拖慢程序的運行效率。

相關文章
相關標籤/搜索