美籍匈牙利數學家馮·諾依曼於1946年提出存儲程序原理,把程序自己看成數據來對待,程序和該程序處理的數據用一樣的方式儲存。 馮·諾依曼體系結構馮·諾依曼理論的要點是:計算機的數制採用二進制;計算機應該按照程序順序執行。人們把馮·諾依曼的這個理論稱爲馮·諾依曼體系結構。
程序員
(1)採用存儲程序方式,指令和數據不加區別混合存儲在同一個存儲器中,數據和程序在內存中是沒有區別的,它們都是內存中的數據,當EIP指針指向哪 CPU就加載那段內存中的數據,若是是不正確的指令格式,CPU就會發生錯誤中斷. 在如今CPU的保護模式中,每一個內存段都有其描述符,這個描述符記錄着這個內存段的訪問權限(可讀,可寫,可執行).這就變相的指定了哪些內存中存儲的是指令哪些是數據)指令和數據均可以送到運算器進行運算,即由指令組成的程序是能夠修改的。
(2)存儲器是按地址訪問的線性編址的一維結構,每一個單元的位數是固定的。
(3)指令由操做碼和地址組成。操做碼指明本指令的操做類型,地址碼指明操做數和地址。操做數自己無數據類型的標誌,它的數據類型由操做碼肯定。
(4)經過執行指令直接發出控制信號控制計算機的操做。指令在存儲器中按其執行順序存放,由指令計數器指明要執行的指令所在的單元地址。指令計數器只有一個,通常按順序遞增,但執行順序可按運算結果或當時的外界條件而改變。
(5)以運算器爲中心,I/O設備與存儲器間的數據傳送都要通過運算器。
(6)數據以二進制表示。
參考First Draft of a Report on the EDVACweb
圖靈機,又稱圖靈計算、圖靈計算機,是由數學家艾倫·麥席森·圖靈(1912~1954)提出的一種抽象計算模型,即將人們使用紙筆進行數學運算的過程進行抽象,由一個虛擬的機器替代人們進行數學運算。
所謂的圖靈機就是指一個抽象的機器,它有一條無限長的紙帶,紙帶分紅了一個一個的小方格,每一個方格有不一樣的顏色。有一個機器頭在紙帶上移來移去。機器頭有一組內部狀態,還有一些固定的程序。在每一個時刻,機器頭都要從當前紙帶上讀入一個方格信息,而後結合本身的內部狀態查找程序表,根據程序輸出信息到紙帶方格上,並轉換本身的內部狀態,而後進行移動。
一臺圖靈機是一個七元組,{Q,Σ,Γ,δ,q0,qaccept,qreject},其中 Q,Σ,Γ 都是有限集合,且知足
Q 是狀態集合;
Σ 是輸入字母表,其中不包含特殊的空白符;
Γ 是帶字母表;
δ:Q×「→Q×Γ×{L,R}是轉移函數,其中L,R 表示讀寫頭是向左移仍是向右移;
q0∈Q是起始狀態;
qaccept是接受狀態;
qreject是拒絕狀態,且qreject≠qaccept
圖靈機 M = (Q,Σ,Γ,δ,q0,qaccept,qreject)。
電子計算機的問世,奠定人是英國科學家艾蘭· 圖靈(Alan Turing)和美籍匈牙利科學家馮· 諾依曼(John Von· Neumann)。圖靈的貢獻是創建了圖靈機的理論模型,奠基了人工智能的基礎。而馮· 諾依曼則是首先提出了計算機體系結構的設想。
圖靈機是爲了探索可計算問題的數學領域,並得到描述這些計算的方法而發明的理論概念。馮-諾伊曼體系結構是一種用於構建實際計算機的體系結構(實現圖靈機器理論上描述的內容),是一種實現通用圖靈機的計算設備。sql
程序:是指令,數據及其組織形式的描述,是指爲了獲得某種結果而能夠由計算機等具備信息處理能力的裝置執行的代碼化指令序列,或者能夠被自動轉換成代碼化指令序列的符號化指令序列或者符號化語句序列。
指令:告訴計算機從事某一特殊運算的代碼。如:數據傳送指令、算術運算指令、位運算指令、程序流程控制指令、串操做指令、處理器控制指令。
指令和數據是應用上的概念。在內存或磁盤上,指令和數據是沒有任何區別的,都是二進制信息。CPU在工做的時候,把有的信息看作是指令,有的信息看作是數據,爲一樣的信息賦予了不一樣的意義。數據庫
計算機程序通常都會使用到一些內存,這些內存或是程序內部使用,或是存放用戶的輸入數據,這樣的內存通常稱做緩衝區。溢出是指盛放的東西超出容器容量而溢出來了,在計算機程序中,就是數據使用到了被分配內存空間以外的內存空間。而緩衝區溢出,簡單的說就是計算機對接收的輸入數據沒有進行有效的檢測(理想的狀況是程序檢查數據長度並不容許輸入超過緩衝區長度的字符),向緩衝區內填充數據時超過了緩衝區自己的容量,而致使數據溢出到被分配空間以外的內存空間,使得溢出的數據覆蓋了其餘內存空間的數據。
經過往程序的緩衝區寫超出其長度的內容,形成緩衝區的溢出,從而破壞程序的堆棧,形成程序崩潰或使程序轉而執行其它指令,以達到攻擊的目的。形成緩衝區溢出的緣由是程序中沒有仔細檢查用戶輸入的參數。安全
XSS攻擊全稱跨站腳本攻擊,是一種在web應用中的計算機安全漏洞,它容許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。好比這些代碼包括HTML代碼和客戶端腳本。攻擊者利用XSS漏洞旁路掉訪問控制——例如同源策略(same origin policy)。這種類型的漏洞因爲被駭客用來編寫危害性更大的網絡釣魚(Phishing)攻擊而變得廣爲人知。對於跨站腳本攻擊,駭客界共識是:跨站腳本攻擊是新型的「緩衝區溢出攻擊「,而JavaScript是新型的「ShellCode」。網絡
SQL注入攻擊是黑客對數據庫進行攻擊的經常使用手段之一。隨着B/S模式應用開發的發展,使用這種模式編寫應用程序的程序員也愈來愈多。可是因爲程序員的水平及經驗也良莠不齊,至關大一部分程序員在編寫代碼的時候,沒有對用戶輸入數據的合法性進行判斷,使應用程序存在安全隱患。用戶能夠提交一段數據庫查詢代碼,根據程序返回的結果,得到某些他想得知的數據,這就是所謂的SQL Injection,即SQL注入。xss
由上面的分析,能夠發現共同點,它們都是利用了漏洞,將惡意代碼經過某種方式注入了目標,而後執行惡意代碼達到攻擊的目的。所以防範的方法,應該在於,如何防止這些代碼被注入,應該有一個更安全的檢查機制,杜絕這些代碼的注入。好比對於XSS攻擊,針對編譯器能夠引入緩衝區的邊界保護機制,杜絕溢出的發生,也就杜絕了惡意代碼的注入。好比XSS攻擊,對於用戶的輸入檢查,過濾掉可能的腳本代碼,對於SQL,一樣加強過濾掉可能的SQL語法。
統一的防範方法是加入一個檢查過濾機制,杜絕對於可能發生代碼注入狀況的發生。函數