值得注意的安全開發知識總結

loveinalife發表於2019-08-28

CSRF/XSRF(跨站請求偽造)

攻擊者通過跨站請求,以合法的使用者身份進行非法操作

攻擊原理

1.主要歸結於瀏覽器同源策略限制級別的問題。
2.對於Cookie,DOM和XMLHttpRequest(ajax)所有瀏覽器都會嚴格遵守同源策略。但是也有例外,如'img'標籤,"script"標籤,"iframe"標籤等的連結會自動載入,更重要的是,表單提交也是可以跨域。
正是因為這些html標籤和表單提交的可以跨域問題,一些黑產在惡意站點設定了在使用者不感知的情況下發起其他站點的請求,比如使用者登入了某支付網站後,不經意點開了某惡意站點,該站點自動請求某支付網站(瀏覽器會匹配domain和path自動帶上了cookie憑證),此時就相當於黑產拿到使用者的身份憑證了。

防禦措施

表單提交請求CRSF攻擊防禦

因為表單提交是可以跨域的,所以表單提交的CRSF防禦已經成為站點的標配了。原理也很簡單,因為表單的提交都要分為兩個階段,表單渲染和表單提交。檢查表單提交的表單是否是自己的伺服器渲染的即可。
值得注意的安全開發知識總結

Ajax請求CRSF攻擊防禦

頒發一個令牌token,放在嚴格遵循同源策略的媒介上來識別請求是否可信。
值得注意的安全開發知識總結

解決方案

棄用cookie機制,薦用方案JSON Web Token

SQL隱碼攻擊

攻擊原理

利用現有應用程式,將(惡意的)SQL命令注入到後臺資料庫引擎執行。通過在引數中輸入特殊符號,來篡改並通過程式SQL語句的條件判斷。

防禦措施

被動防禦

主流框架已基本可阻止sql注入。

主動防禦
  1. 通過使用靜態和動態測試,定期檢查並發現應用程式中的SQL隱碼攻擊漏洞。
  2. 通過使用引數化查詢和物件關係對映(Object Relational * Mappers,ORM),來避免和修復注入漏洞。此類查詢通過指定引數的佔位符,以便資料庫始終將它們視為資料,而非SQL命令的一部分。
  3. 使用轉義字元,來修復SQL隱碼攻擊漏洞,以便忽略掉一些特殊字元。
  4. 通過對資料庫強制執行最小許可權原則,來減緩SQL隱碼攻擊漏洞的影響。籍此,應用程式的每一個軟體元件都只能訪問、並僅影響它所需要的資源。
  5. 對訪問資料庫的Web應用程式採用Web應用防火牆(Web Application Firewall,WAF)。這有助於識別出針對SQL隱碼攻擊的各種嘗試,進而防止此類嘗試作用到應用程式上。

    解決方案

    使用更加安全的開發框架,提高開發者安全編碼意識。

XSS(Cross-Site Scripting,跨站指令碼攻擊)

攻擊原理

惡意程式碼未經過濾,與網站的正常程式碼混在一起,瀏覽器無法分辨哪些指令碼是可信的,導致惡意指令碼被執行。由於直接在使用者的終端程式碼執行,惡意程式碼能夠直接獲取使用者的資訊,利用這些資訊冒充使用者向網站發起攻擊請求。

防禦措施

入參字元過濾。

在源頭控制,把輸入的一些不合法的東西都過濾掉,從而保證安全性。如移除使用者提交的的DOM屬性如onerror,移除使用者上傳的Style節點,'iframe', 'script','a'節點等

HTML轉義處理

轉義編碼參考:
值得注意的安全開發知識總結

出參進行編碼

如果源頭沒控制好,就得後期補救了:像一些常見的符號,如<>在輸出的時候要對其進行轉換編碼,這樣做瀏覽器是不會對該標籤進行解釋執行的,同時也不影響顯示效果。例如:對<>做編碼如:"<"用:"<",">"用:">"來代替。

public function processVal($value = null, $type = self::VAL_STRING)
{
if ($value !== null)
switch ($type) {
case self::VAL_STRING:
$value = Html::encode($value);
break;
case self::VAL_INT:
$value = intval($value);
break;
case self::VAL_TEXT:
$value = HtmlPurifier::process($value);
break;
case self::VAL_FLOAT:
$value = floatval($value);
break;
default:
break;
}
}
return $value;
}
VMS對圖片xss的防護措施

設定外鏈圖片上傳白名單機制,只允許系統信任的圖片來源上傳。

越權

越權訪問(Broken Access Control,簡稱BAC)是Web應用程式中一種常見的漏洞,由於其存在範圍廣、危害大,被OWASP列為Web應用十大安全隱患的第二名。

越權訪問分類

垂直越權訪問(許可權提升攻擊)

垂直越權是指不同使用者級別之間的越權,如普通使用者執行管理員使用者的許可權。
值得注意的安全開發知識總結

水平越權訪問

水平越權是指相同級別使用者之間的越權操作
值得注意的安全開發知識總結

解決方案

  1. 對平行越權漏洞防護中,增加訪問與操作物件的使用者屬性,在對目標物件進行訪問與操作時,服務端校驗會話與物件的使用者屬性,在校驗通過後才能執行讀取和操作。
    2.對垂直越權漏洞防護中,所有訪問採取預設拒絕機制,採取基於角色訪問控制,對於各個功能的訪問,規定不同角色擁有不同的訪問許可權,當使用者在使用該功能時,系統要校對使用者的許可權和訪問控制機制是否與規定相同,通過校對者才能使用,否則拒絕使用該功能。

    簡訊安全

    簡訊攻擊常見於簡訊介面被惡意利用,導致業務無法正常訪問。

    簡訊介面被刷的危害

    1.過多的簡訊介面請求導致伺服器負載增加,嚴重情況下導致伺服器資源耗盡,無法響應請求,影響使用者正常的訪問。
    2.過多的簡訊介面傳送,導致正常使用者無法使用簡訊驗證服務

  2. 過多的簡訊介面非法呼叫消耗簡訊包資源,從而直接導致運營成本增加。

    通用防護措施

    1. 手機號碼邏輯檢測
    在手機號碼視窗增加號碼有效性檢測,防止惡意攻擊者使用無效或非法的號碼,從而在第一視窗遮蔽非手機號的亂碼等無效數字。
    2. 隨機校驗
    在註冊頁新增個隱藏的'input',設定儲存在session中的隨機驗證碼,發簡訊前驗證一下,保證發驗證碼簡訊請求是在業務頁面點選。
    3. 增加友好的圖形驗證碼
    即當使用者進行“獲取動態簡訊” 操作前,彈出圖片驗證碼,要求使用者輸入驗證碼後,伺服器端再傳送動態簡訊到使用者手機上,該方法可有效緩解簡訊轟炸問題。
    由於當前驗證碼在攻防對抗中逐步被成功自動化識別破解,我們在選用安全的圖形驗證碼也需要滿足一定的防護要求。
    4. 同號碼簡訊傳送頻率限制
    採用限制重複傳送動態簡訊的間隔時長, 即當單個使用者請求傳送一次動態簡訊之後,伺服器端限制只有在一定時長之後(此處一般為60-120秒),才能進行第二次動態簡訊請求。該功能可進一步保障使用者體驗,並避免包含手工攻擊惡 意傳送垃圾驗證簡訊。
    5. 不同號碼請求數量限制
    根據業務特點,針對不同手機號碼、不同訪問源IP訪問請求進行頻率限制,防止高併發非法請求消耗更多的簡訊包和伺服器效能,提高業務穩定性。
    6. 場景流程限定
    將手機簡訊驗證和使用者名稱密碼設定分成兩個步驟,使用者在填寫和校驗有效的使用者名稱密碼後,下一步才進行手機簡訊驗證,並且需要在獲取第一步成功的回執之後才可進行校驗。
    7. 啟用https協議
    為網站配置證照,啟用https加密協議,防止傳輸明文資料被分析。
    8. 單IP請求限定
    使用了圖片驗證碼後,能防止攻擊者有效進行“動態簡訊”功能的自動化呼叫。但若攻擊者忽略圖片驗證碼驗證錯誤的情況,大量執行請求會給伺服器帶來額外負擔,影響業務使用。建議在伺服器端限制單個 IP 在單位時間內的請求次數,一旦使用者請求次數(包括失敗請求次數)超出設定的閾值,則暫停對該IP一段時間的請求。

    簡訊安全防護

    針對同一使用者和同一IP簡訊傳送頻率限制。

完結。
不足之處,敬請指正。

code one

相關文章