關(guān)于web開發(fā)的常見安全問題

常見的安全問題

每次向服務(wù)器發(fā)送數(shù)據(jù)時(shí),都需要考慮安全性。到目前為止,HTML表單是最常見的攻擊路徑(可能發(fā)生攻擊的地方)。這些問題從來都不是來自HTML表單本身,它們來自于服務(wù)器如何處理數(shù)據(jù)。

根據(jù)你所做的事情,你會(huì)遇到一些非常有名的安全問題:

XSS 和 CSRF

跨站腳本(XSS)和跨站點(diǎn)請求偽造(CSRF)是常見的攻擊類型,它們發(fā)生在當(dāng)您將用戶發(fā)送的數(shù)據(jù)顯示給這個(gè)用戶或另一個(gè)用戶時(shí)。

XSS允許攻擊者將客戶端腳本注入到其他用戶查看的Web頁面中。攻擊者可以使用跨站點(diǎn)腳本攻擊的漏洞來繞過諸如同源策略之類的訪問控制。這些攻擊的影響可能從一個(gè)小麻煩到一個(gè)重大的安全風(fēng)險(xiǎn)。

CSRF攻擊類似于XSS攻擊,因?yàn)樗鼈円韵嗤姆绞介_始攻擊——向Web頁面中注入客戶端腳本——但它們的目標(biāo)是不同的。CSRF攻擊者試圖將權(quán)限升級到特權(quán)用戶(比如站點(diǎn)管理員)的級別,以執(zhí)行他們不應(yīng)該執(zhí)行的操作(例如,將數(shù)據(jù)發(fā)送給一個(gè)不受信任的用戶)。

XSS攻擊利用用戶對web站點(diǎn)的信任,而CSRF攻擊則利用網(wǎng)站對其用戶的信任。

為了防止這些攻擊,您應(yīng)該始終檢查用戶發(fā)送給服務(wù)器的數(shù)據(jù)(如果需要顯示),盡量不要顯示用戶提供的HTML內(nèi)容。相反,您應(yīng)該對用戶提供的數(shù)據(jù)進(jìn)行處理,這樣您就不會(huì)逐字地顯示它。當(dāng)今市場上幾乎所有的框架都實(shí)現(xiàn)了一個(gè)最小的過濾器,它可以從任何用戶發(fā)送的數(shù)據(jù)中刪除HTML<script>、<iframe><object> 元素。這有助于降低風(fēng)險(xiǎn),但并不一定會(huì)消除風(fēng)險(xiǎn)。

SQL注入

SQL 注入是一種試圖在目標(biāo)web站點(diǎn)使用的數(shù)據(jù)庫上執(zhí)行操作的攻擊類型。這通常包括發(fā)送一個(gè)SQL請求,希望服務(wù)器能夠執(zhí)行它(通常發(fā)生在應(yīng)用服務(wù)器試圖存儲(chǔ)由用戶發(fā)送的數(shù)據(jù)時(shí))。這實(shí)際上是攻擊網(wǎng)站的主要途徑之一

其后果可能是可怕的,從數(shù)據(jù)丟失到通過使用特權(quán)升級控制整個(gè)網(wǎng)站基礎(chǔ)設(shè)施的攻擊。這是一個(gè)非常嚴(yán)重的威脅,您永遠(yuǎn)不應(yīng)該存儲(chǔ)用戶發(fā)送的數(shù)據(jù),而不執(zhí)行一些清理工作(例如,在php/mysql基礎(chǔ)設(shè)施上使用[mysql_real_escape_string()](http://www.php.net/manual/en/function.mysql-real-escape-string.php "http://www.php.net/manual/en/function.mysql-real-escape-string.php")

HTTP數(shù)據(jù)頭注入和電子郵件注入

這種類型的攻擊出現(xiàn)在當(dāng)您的應(yīng)用程序基于表單上用戶的數(shù)據(jù)輸入構(gòu)建HTTP頭部或電子郵件時(shí)。這些不會(huì)直接損害您的服務(wù)器或影響您的用戶,但它們會(huì)引發(fā)一個(gè)更深入的問題,例如會(huì)話劫持或網(wǎng)絡(luò)釣魚攻擊。

這些攻擊大多是無聲的,并且可以將您的服務(wù)器變成僵尸。

偏執(zhí):永遠(yuǎn)不要相信你的用戶

那么,你如何應(yīng)對這些威脅呢?這是一個(gè)遠(yuǎn)遠(yuǎn)超出本指南的主題,不過有一些規(guī)則需要牢記。最重要的原則是:永遠(yuǎn)不要相信你的用戶,包括你自己;即使是一個(gè)值得信賴的用戶也可能被劫持。

所有到達(dá)服務(wù)器的數(shù)據(jù)都必須經(jīng)過檢查和消毒??偸沁@樣。沒有例外。

  • 遠(yuǎn)離有潛在危險(xiǎn)的字符轉(zhuǎn)義。應(yīng)該如何謹(jǐn)慎使用的特定字符取決于所使用的數(shù)據(jù)的上下文和所使用的服務(wù)器平臺(tái),但是所有的服務(wù)器端語言都有相應(yīng)的功能。
  • 限制輸入的數(shù)據(jù)量,只允許有必要的數(shù)據(jù)。
  • 沙箱上傳文件(將它們存儲(chǔ)在不同的服務(wù)器上,只允許通過不同的子域訪問文件,或者通過完全不同的域名訪問文件更好)。

如果你遵循這三條規(guī)則,你應(yīng)該避免很多問題,但是如果你想要得到一個(gè)有能力的第三方執(zhí)行的安全檢查,這是一個(gè)好主意。不要以為你已經(jīng)看到了所有可能的問題。

注意:我們的服務(wù)器端學(xué)習(xí)主題的網(wǎng)站安全性文章更詳細(xì)地討論了上述威脅和潛在的解決方案。

結(jié)論

如您所見,發(fā)送表單數(shù)據(jù)很容易,但要確保應(yīng)用程序的安全性是很棘手的。請記住,前端開發(fā)人員不是應(yīng)該定義數(shù)據(jù)安全模型的人。是的,我們將看到,執(zhí)行客戶端數(shù)據(jù)驗(yàn)證是可能的,但是服務(wù)器不能信任這種驗(yàn)證,因?yàn)樗鼰o法真正知道客戶端到底發(fā)生了什么。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容