數據庫系統概論-第九章

統一資源定位符 Uniform Resource Locator URL Web上每一個可訪問文檔在全球惟一的名字git

HTTP請求無鏈接,請求完成後當即斷開算法

雙因素認證 two-factor authentication數據庫

兩個獨立的因素用於識別一個用戶(兩個因素不能具備一樣的弱點,好比都是密碼)瀏覽器

使用雙因素認證可能會收到中間人攻擊 man-in-the-middle-attack MITM緩存

攻擊者可能會假裝成代理服務器,在通訊的雙方傳輸數據時對數據進行竊取和修改。(HTTPS對數據進行加密,能夠必定程度上防止中間人攻擊)安全

單點登陸 single sign-on 用於只須要認證一次,多個應用經過同一個認證服務對用戶進行驗證,服務器

安全斷言標記語言 security assertion markup languagecookie

在不一樣的認證服務間交換認證和受權信息,以提供跨機構的單點登陸session

OpenID負載均衡

不一樣應用間身份認證方案

加密技術

對稱加密 加密密鑰同時用於加密和解密數據
非對稱加密 公鑰用於加密,私鑰用於解密

擴展加密標準 Advanced Encryption Standard AES 基於Rijndael算法

公私鑰 一般用兩個大素數p1和p2的積建立公鑰,私鑰由(p1,p2)組成,因爲計算大數的素數因子須要的時間以年計算,因此相對安全

公鑰的一個應用是數字簽名 digital signature 使用私鑰對數據進行加密,而後用公鑰進行解密,只有持有私鑰的人能夠加密數據

數字證書

無鏈接協議和有鏈接協議對比

無鏈接協議在請求完成後能夠當即斷開鏈接,所以能夠爲更多的客戶端提供鏈接,而且無鏈接協議能夠提供負載均衡和熔斷機制。
無鏈接協議在每次請求時都須要創建,而且須要經過cokkie或者隱藏字段(hidden fields)來發送session信息。

使用緩存提升Web服務性能
1.創建HTTP鏈接池,減小創建HTTP鏈接的時間
2.緩存請求數據,若是遇到相同的請求,能夠直接從緩存中取數據而不用查詢數據庫(同步緩存須要消耗額外的內存)

SQL注入

SQL注入發生在惡意用戶試圖執行本身的查詢SQL時。若是應用程序經過拼接SQL進行查詢,那麼攻擊者可能經過參數傳入本身查詢語句。

好比有句SQL 「SELECT password FROM userinfo WHERE userid= ’ 」 + userid + 「 ’ 」這樣拼接的,而後攻擊者輸入的userid是john’ OR userid= ’admin,這樣SQL就變成了
SELECT password FROM userinfo WHERE userid=’john’ OR userid=’admin’;

通常咱們使用預編譯的方法防止SQL注入的問題。

編寫管理鏈接池的僞碼,必須包含一個建立鏈接池的函數(以數據庫鏈接字符串,數據庫鏈接帳號和密碼做爲輸入參數),一個向鏈接池請求鏈接的函數,一個歸還鏈接的函數和一個關閉鏈接池的函數。

//初始化鏈接池的大小
INTEGER INITIAL_POOL_SIZE = 10;

//擴容時的增加值
INTEGER POOL_SIZE_INCREMENT = 5;

//鏈接池最大尺寸
INTEGER MAX_POOL_SIZE = 100;

//鏈接URL
String connectionURL;

//鏈接用戶帳號
String userAccount;

//鏈接用戶密碼
String userPassword;

//空閒鏈接池
Queue freeQueue = new Queue();

//活躍鏈接池
Queue activeQueue = new Queue();

//初始化鏈接池,設置大小爲初始大小
void createPool(String connectionURL,String userAccount,String userPassword){
this.connectionURL = connectionURL;
this.userAccount = userAccount;
this.userPassword = userPassword;

for(int i = 0;i < INITIAL_POOL_SIZE;i++ ){
Connection conn = createConnection(connectionURL,userAccount,userPassword);
freeQueue.add(conn);
}
}

//獲取鏈接
Connection getConnection(){
Connection conn = null;
//優先從空閒鏈接次獲取鏈接資源
if(freeQueue.size() != 0){
conn = freeQueue.remove();
activeQueue.add(conn);
}

int activeConns = activeQueue.size();

//到達鏈接池最大鏈接數,拋出異常
if(activeConns == MAX_POOL_SIZE){
ERROR("has reached the max pool size");
}

//可建立線程池大於擴容增加值
if(MAX_POOL_SIZE - activeConns > POOL_SIZE_INCREMENT){
toCreateConns = POOL_SIZE_INCREMENT;
}else{ //可擴容數小於擴容增加值
toCreateConns = MAX_POOL_SIZE - activeConns;
}

for(inti =0;i<toCreateConns;i++){
Connection conn = createConnection(connectionURL,userAccount,userPassword);
freeQueue.add(conn);
}
return getConnection();
}

void releaseConnection(){
Connection conn = activeQueue.remove();
freeQueue.add(conn);
}

void closePool(){
if(activeConnections.size() != 0)
WARNING("Connections active. Will force close.");

for (i=0; i < freeConnections.size(); i++) {
  conn = freeConnections.elementAt(i); 
  freeConnections.removeElementAt(i); conn.close();
}
for (i=0; i < activeConnections.size(); i++) { 
conn = activeConnections.elementAt(i); 
activeConnections.removeElementAt(i); 
conn.close();

}
}

XSS攻擊

XSS攻擊者輸入JavaScript或者flash腳原本代替輸入參數,當另外一個用戶訪問頁面時,攻擊者使用如同源策略來獲取用戶的cookie等包含私人信息的參數,或者其實用戶輸入的信息被使用在另外一個網站登錄。

HTTP協議容許服務檢查頁面的引用,及用戶點擊後跳轉的連接。若是檢測到引用(跳轉的連接)是有效的,好比引用頁面和
當前頁面在同一個網站,那麼使用同源策略試圖講用戶導向不一樣網站的XSS攻擊將被阻止。引用字段是由瀏覽器設置的,所以
惡意瀏覽器及收到攻擊的瀏覽器能夠僞造引用字段,可是引用字段能夠防止基礎的XSS攻擊。

HTTPS網站如何保證安全性

在HTTPS協議中,網站首先發送一個電子證書到用戶的瀏覽器,瀏覽器解密使用信任的公鑰解密電子證書而且從證書中解析網站的 名稱。這樣的話用戶能夠校驗其將要訪問的網站名稱和解析的網站名稱是否一致並接受證書。瀏覽器使用公鑰(證書攜帶的信息) 加密用戶數據。攻擊者能夠經過證書獲取用戶的信息,可是因爲用戶數據是加密的,攻擊者在沒有獲取私鑰的狀況下沒法解析 用戶數據。

相關文章
相關標籤/搜索