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

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

馮·諾依曼體系結構

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

本結構隱約指導了將存儲設備與中央處理器分開的概念,所以依本結構設計出的計算機又稱存儲程序計算機。
sql


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

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

馮·諾依曼瓶頸

馮·諾依曼架構爲計算機大提速鋪平了道路,卻也埋下了一個隱患:在內存容量指數級提高之後,CPU 和內存之間的數據傳輸帶寬成爲了瓶頸。因爲指令與數據放在同一內存帶來的CPU利用率(吞吐率)下降就是馮諾依曼瓶頸 。編程

圖靈機

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

  • 在紙上寫上或擦除某個符號;
  • 把注意力從紙的一個位置移動到另外一個位置;

而在每一個階段,人要決定下一步的動做,依賴於(a)此人當前所關注的紙上某個位置的符號和(b)此人當前思惟的狀態。服務器

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

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

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

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

注意這個機器的每一部分都是有限的,但它有一個潛在的無限長的紙帶,所以這種機器只是一個理想的設備。圖靈認爲這樣的一臺機器就能模擬人類所能進行的任何計算過程。編碼

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

圖靈機是一個計算機的理論模型,本質上是狀態機;馮諾依曼體系是圖靈機的實現,包括運算、控制、存儲、輸入、輸出五個部分。諾依曼體系相對以前的計算機最大的創新在於程序和數據的存儲,以此實現機器內部編程。圖靈機的紙帶應對應諾依曼計算機體系中的存儲,讀寫頭對應輸入和輸出,規則(讀了一個符號後下一步作什麼)對應運算,紙帶怎麼移動對應控制。來源:https://www.zhihu.com/question/25004267/answer/86444056

程序 = 指令 + 數據

對於程序怎麼理解成「指令+數據」,從彙編語言的層面看最爲清晰。一個程序被編譯爲彙編語言後,很明顯的看出實際上就是一行行的彙編代碼,而這一行行的彙編代碼有相同的格式,都是一個指令,後面接上要操做的數據或者寄存器,而寄存器只是爲數據提供一種存儲方式,所謂操做寄存器實際是操做寄存器中的數據。

XOR AX, AX
    XOR BX, BX
    XOR DX, DX
    MOV CX, 10
    MOV SI,OFFSET ARRAX

所以 程序= 指令 + 寄存器 是對程序一種直觀的解釋方式,相比於 程序 = 算法 + 數據結構 這種要直觀的多。

緩衝區溢出 XSS攻擊 SQL注入攻擊 共同點、統一防範

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

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

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

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

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

相關文章
相關標籤/搜索