常見 Web 安全相關問題

參考:html

常見六大 Web 安全攻防解析前端

常見 Web 安全攻防總結git

Web安全知多少github

XSS

cross-site script.跨站腳本,XSS。web

瀏覽器端運行非法的 HTMl 或 script 標籤進行的一種攻擊。sql

可能形成的影響:shell

  • 利用虛假輸入表單騙取用戶我的信息
  • 利用腳本竊取用戶的 Cookie 值,幫助攻擊者發起惡意請求
  • 顯示僞造的文章或圖片

原理:惡意攻擊者往 Web 頁面裏插入惡意可執行網頁腳本代碼,當用戶瀏覽該頁之時,嵌入其中 Web 裏面的腳本代碼會被執行能夠達到攻擊者盜取用戶信息或其餘侵犯用戶安全隱私的目的數據庫

分類:

  1. 非持久性XSS。經過發送惡意腳本代碼參數的URL,URL地址被打開的時候,特有的惡意代碼參數被解析執行後端

    特色:跨域

    • 不通過服務器存儲,直接經過Http的get或者post就能發起
    • 須要誘騙點擊以後發生
    • 能夠經過document.cookie等方式獲取到敏感信息

    防止:

    • Web渲染的全部內容和數據都必須來自服務端

    • 不要從URLdocument.referrer,document.forms等DOMAPI直接獲取數據渲染。

    • 不要使用evaldocument.write(),innerHTML,document.createElement()等可執行字符串的方式

    • 對字段作encodeURI 處理

      轉義的目的是將一些構成 HTML 標籤的元素轉義,好比 <>空格 等,轉義成 <> 等顯示轉義字符

  2. 持久性XSS(存儲性XSS)

    通常用於表單提交的功能,利用XSS將代碼內容注入數據庫持久存儲,前端頁面得到從數據庫中讀出的注入代碼時,將其渲染執行。

    須要條件:

    • post請求提交表單後段沒有轉義直接入庫,返回時也沒作轉義
    • 前端獲取到數據沒作轉義直接渲染成DOM

    特色:

    • 持久性,植入在數據庫中
    • 盜取信息,危害面廣

XSS 防護

  1. Content-Security-Policy 。經過配置規則,明確告訴瀏覽器哪些外部資源能夠加載和執行。(CSP)

    Content-Security-Policy

    • 設置 HTTP Header 中的 Content-Security-Policy
    • 設置 meta 標籤的方式

    例子:

    • 只容許加載本站資源:Content-Security-Policy: default-src 'self'
    • 只容許加載 HTTPS 協議圖片:Content-Security-Policy: img-src https://*
    • 容許加載任何來源:Content-Security-Policy: child-src 'none'
  2. 轉義字符。對於輸入輸出的內容進行轉義,引號,尖括號斜槓這些。何內容寫到頁面以前都必須加以encode,避免把 html tag 弄出來。

  3. HttpOnly Cookie,預防XSS攻擊竊取用戶cookie最有效的防護手段。設置了 HttpOnly 屬性的 cookie 不能使用 JavaScript 經由 Document.cookie 屬性、XMLHttpRequestRequest APIs 進行訪問。


CSRF

Cross site Request Forgery,跨站請求僞造。利用用戶已登陸的身份,在用戶不知情的狀況下,以用戶名義完成非法操做

完成CSRF攻擊須要的條件:

  • 用戶登陸A站點,在本地記錄了cookie
  • 沒有登出A站點,即Cookie生效的狀況下,訪問了惡意攻擊提供的危險站點B(B要求訪問A)
  • 站點A沒有作CSRF防護

CSRF 防護

  1. sameSite,對Cookie設置sameSite屬性,表示Cookie不隨着跨域請求發送,能夠減小CSRF攻擊。(該屬性不兼容全部瀏覽器)
  2. Referer Check,Referer信息告訴服務器是從哪一個頁面連接過來的,經過檢查http包頭referer的值是否是這個頁面,來判斷是否是CSRF攻擊
  3. Anti-SCRF-Token。請求時在HTTP 請求中以參數的形式加入一個隨機產生的token,服務器創建一個攔截器來驗證這個token,會進行校驗該請求當中的token和cookie當中的token值是否都存在且相等,才認爲這是合法的請求。
  4. 驗證碼。核心步驟增長驗證碼,增長驗證碼實際上就是添加了一個請求參數。
  5. 對Cookie設置HttpOnly

SQL 注入

就是經過把 SQL 命令插入到 Web 表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令

例如,咱們以前預想的SQL 語句是:

SELECT * FROM user WHERE username='admin' AND psw='password'

而後,惡意攻擊者輸入的用戶名是 admin' --

結果 SQL 語句變成了以下形式:

SELECT * FROM user WHERE username='admin' --' AND psw='xxxx'

在 SQL 中,' --是閉合和註釋的意思,-- 是註釋後面的內容的意思,因此查詢語句就變成了:

SELECT * FROM user WHERE username='admin'

而後密碼隨意輸入均可以,就能夠登入系統了,這就是一個SQL注入

包含如下過程:

  • 獲取用戶請求參數
  • 拼接到代碼當中
  • SQL語句按照咱們構造參數的語義執行成功

SQL 注入的本質是數據和代碼未分離,數據看成代碼來執行。

危害:

  • 獲取數據庫信息
  • 獲取服務器權限,讀取敏感文件

SQL注入防護

  • 嚴格控制Web應用的數據庫操做權限
  • 後端代碼檢查輸入的數據是否符合預期
  • 對進入數據庫的特殊字符轉義
  • 不要使用拼接SQL語句,使用數據庫提供的參數化查詢接口

點擊劫持

本質上是一種視覺欺騙。將須要攻擊的網站內嵌到本身的網頁中,將iframe設置爲透明,再透出一個按鈕誘導點擊。

特色:

  • 隱蔽性高,騙取用戶操做
  • UI-覆蓋

原理:登陸A網站後,被誘導打開第三方的網站,第三方的網站經過 iframe 引入了A網站頁面的內容,在第三方的網站點擊某個按鈕,實際上觸發的是A網站的按鈕。

例如:在已經登陸的網站,誘導點擊某按鈕,可能實際上就是關注了某人。

點擊劫持防護

  1. X-FRAME-OPTIONS。是一個HTTP響應頭,能夠設置不一樣的值防護 iframe 的嵌套劫持點擊。

    • DENY 頁面不容許經過 iframe 的方式現實
    • SAMEORIGIN,頁面能夠在相同域名下經過 iframe 顯示。
    • ALLOW-FAROM,頁面能夠在任意來源的 iframe 中顯示。
  2. JS 手動防護,當經過 iframe 的方式加載頁面的時候,直接不顯示任何內容。(window.self)

    if (self != top) { 
      alert('在iframe中');
    }

<hr/ >

URL 跳轉漏洞

藉助未驗證的URL跳轉,將應用引導到不安全的第三方區域,致使的安全問題。

其原理是構建惡意連接(連接須要進行假裝,儘量迷惑),發在QQ羣或者是瀏覽量多的貼吧/論壇中。安全意識低的用戶點擊後,通過服務器或者瀏覽器解析後,跳到惡意的網站中

如:

http://gate.baidu.com/index?act=go&url=http://t.cn/RVTatrd
http://qt.qq.com/safecheck.html?flag=1&url=http://t.cn/RVTatrd

實現方式:

  • Header頭跳轉
  • JavaScript跳轉
  • META標籤跳轉

URL跳轉漏洞防護

  • Referer,肯定URL參數進入的來源,避免用戶本身生成跳轉連接
  • 驗證Token。在生成的連接里加入用戶不可控的Token對生成的連接進行校驗

OS命令注入攻擊

SQL注入是針對數據庫的,而OS命令注入則是針對操做系統的。OS命令經過Web應用,執行非法的操做系統命令達到攻擊的目的。

命令注入能夠向shell發送命令,讓Windows或者Linux系統的命令行啓動程序。經過命令注入可執行系統上安裝的各類程序。

例子:

// 以 Node.js 爲例,假如在接口中須要從 github 下載用戶指定的 repo
const exec = require('mz/child_process').exec;
let params = {/* 用戶輸入的參數 */};
exec(`git clone ${params.repo} /some/path`);

若是 params.repo 傳入的是 https://github.com/admin/admin.github.io.git 確實能從指定的 git repo 上下載到想要的代碼。
可是若是 params.repo 傳入的是 https://github.com/xx/xx.git && rm -rf /* && 剛好你的服務是用 root 權限起的就糟糕了。

OS命令注入防護

  • 對前端提交內容規則限制
  • 調用系統命令前對傳入參數進行命令行參數轉義過濾
  • 不要直接拼接命令語句,藉助工具作拼接和轉移預處理

<hr/ >

擴展:DDoS

Distributed Denial of Service,分佈式拒絕服務。利用大量的請求形成資源過載,致使服務不可用。

其原理都是形成資源過載,致使服務不可用

網絡層DDoS和應用層DDos

詳情:DDoS

相關文章
相關標籤/搜索