TsaiChihWei / learning-blog

1 stars 0 forks source link

[筆記] 資訊安全(雜湊加密、SQL Injection、XSS、CSRF) #24

Open TsaiChihWei opened 4 years ago

TsaiChihWei commented 4 years ago

此篇內容節錄並改寫自 讓我們來談談 CSRF1 2

請說明雜湊跟加密的差別在哪裡,為什麼密碼要雜湊過後才存入資料庫

雜湊與加密最大的差別在於,雜湊是不可逆的,而加密可逆。使用者的密碼先經過雜湊函式再存入資料庫,即便防止資料庫遭入侵,攻擊者也無法直接看到明碼。

雜湊的特性:

includerequireinclude_oncerequire_once 的差別

require 與 include 除了引入檔案失敗之後的行為不同之外,可以看成是相同的。 include 引入的檔案發生錯誤的話,會顯示警告,會繼續執行後面的程式碼; 而 require 則是會顯示錯誤,立刻終止程式,不再往下執行。 require_once 和 include_once 會判斷檔案是否重複引入,如果沒有才會去執行引入動作。

請說明 SQL Injection 的攻擊原理以及防範方法

攻擊原理:攻擊者利用組合、拼湊的方式注入夾帶惡意 SQL 指令,夾帶進去的惡意指令就會被資料庫伺服器誤認為是正常的 SQL 指令而執行,因此遭到破壞或是入侵。 防範方法:利用 prepare statement 使資料庫不會將攻擊者輸入的內容當成程式碼來執行。

請說明 XSS 的攻擊原理以及防範方法

全名為 Cross-site scripting 即「跨網站指令碼」。

攻擊原理:攻擊者注入惡意程式碼(通常是 HYML 及 JavaScript),目的有竊取 Cookie、將頁面導向釣魚網站等等。 防範方法:將注入的惡意程式碼跳脫字元。 PHP 有內建 htmlspecialchars(),JavaScript 可以自己寫一個 escape() function 例:

function escape(unsafe) {
      return unsafe
           .replace(/&/g, "&")
           .replace(/</g, "&lt;")
           .replace(/>/g, "&gt;")
           .replace(/"/g, "&quot;")
           .replace(/'/g, "&#039;");
    }

請說明 CSRF 的攻擊原理以及防範方法

全名為 Cross-site request forgery 即「跨站請求偽造」又稱作 one-click attack。

攻擊原理:攻擊者利用瀏覽器自動帶上 Cookie 的機制,欺騙用戶的瀏覽器,以受害者的名義傳送惡意請求去做一些未經過授權的操作。 範例:

  1. 使用者已登入過 A 網站,Cookie 存有登入狀態
  2. 使用者再進入惡意網站,該網站將導向 A 網站的偽造 Request包裝成按鈕或圖片等等
  3. 使用者點下惡意網站包裝後的元素後,送出偽造 Request 並自動帶上 Cookie
  4. A 網站的伺服器核對 Cookie 之後判定為本人發送的 Request,並執行惡意操作

防範方法:

客戶端:每次使用完網站就登出,讓認證狀態無法維持被利用。

伺服器端: