前端安全規(guī)范

前端安全規(guī)范

本文檔描述前端開(kāi)發(fā)人員在應(yīng)用開(kāi)發(fā)中,需要關(guān)注的安全問(wèn)題和相應(yīng)的編碼規(guī)范,旨在杜絕一些常見(jiàn)的安全隱患。

說(shuō)明:文檔中使用的關(guān)鍵字「MUST」,「MUST NOT」,「REQUIRED」,「SHALL」,「SHALL NOT」,「SHOULD」,「SHOULD NOT」,「RECOMMENDED」,「MAY」和「OPTIONAL」在 RFC2119 中有說(shuō)明。

背景知識(shí)

本文不會(huì)詳細(xì)介紹 Web 安全的攻擊和防御技術(shù),所以請(qǐng)先參考如下資料了解相關(guān)知識(shí):

XSS

XSS防御

請(qǐng)務(wù)必閱讀:終極XSS防護(hù)備忘錄 根據(jù)其中的描述做好數(shù)據(jù)轉(zhuǎn)義操作。

使用fis進(jìn)行smarty模板X(qián)SS轉(zhuǎn)義:

fis-plus默認(rèn)開(kāi)啟xss轉(zhuǎn)義功能,需要編譯時(shí)加-o參數(shù)

fisp release -o

富文本數(shù)據(jù)

富文本數(shù)據(jù)「MUST」必須由 RD 依賴(lài)最小化原則進(jìn)行處理,杜絕不安全的內(nèi)容。

CSRF

背景知識(shí):

Cookie使用

禁止「MUST NOT」給 baidu.com 域下設(shè)置 cookie,設(shè)置 cookie 請(qǐng)指定為當(dāng)前域名。

禁止「MUST NOT」給頁(yè)面設(shè)置 document.domain = "baidu.com"。

防釣魚(yú)

似乎沒(méi)啥好方法。

隱私數(shù)據(jù)

禁止「MUST NOT」在頁(yè)面中出現(xiàn) ip 相關(guān)信息 ,如有提交 ip 給 server 端的需求,請(qǐng)修改為其它形式,比如:由 rd 在 server 端間接獲取 ip 信息。

用戶(hù)的個(gè)人隱私信息:姓名、郵箱、電話(huà)、QQ 等,必須「MUST」遵守最小化原則,使用不到信息 禁止「MUST NOT」 出現(xiàn)在頁(yè)面代碼中,獲取這些數(shù)據(jù)的 json 接口也必 「MUST」須經(jīng)過(guò)權(quán)限控制。

頁(yè)面跳轉(zhuǎn)

獲取 url 中的參數(shù),跳轉(zhuǎn)至另一個(gè)站點(diǎn)時(shí), 禁止「MUST NOT」跳轉(zhuǎn)至任意站點(diǎn),「MUST」設(shè)置白名單,只允許跳轉(zhuǎn)至規(guī)定的站點(diǎn)。

點(diǎn)擊頁(yè)面中的鏈接跳轉(zhuǎn)至第三方站點(diǎn)的時(shí)候,建議「RECOMMENDED」 以類(lèi)似百度、 Google 搜索結(jié)果中 Server 端跳轉(zhuǎn)的形式進(jìn)行,后端可以對(duì) URL 進(jìn)行安全性?huà)呙?,檢測(cè)到是一個(gè)惡意網(wǎng)站、或者目標(biāo)資源是可執(zhí)行文件時(shí),應(yīng)給予用戶(hù)強(qiáng)烈的警告,告知其風(fēng)險(xiǎn)。

第三方功能和資源

頁(yè)面中嵌入的第三方功能,禁止「MUST NOT」直接內(nèi)嵌第三方 JS 代碼,建議以「RECOMMENDED」iframe 形式引入 。

頁(yè)面中如果需要使用第三方的數(shù)據(jù),建議 「RECOMMENDED」 由 RD 獲取,盡量避免以 jsonp 方式獲取,如必須使用 jsonp,請(qǐng)限制好第三方返回的 callback 函數(shù)名,對(duì)于不允許使用的函數(shù)名稱(chēng),一律禁止。

原則上禁止「MUST NOT」使用第三方提供的資源:圖片、文檔等,如有必須,建議「RECOMMENDED」由 RD 抓取相關(guān)內(nèi)容轉(zhuǎn)存至自有 Server。因?yàn)?,外鏈?huì)產(chǎn)生站外請(qǐng)求,可以被利用實(shí)施 CSRF 攻擊,而且往往存在性能問(wèn)題。

點(diǎn)擊劫持

對(duì)一些重要的操作,例如刪除數(shù)據(jù)、支付等,建議「RECOMMENDED」先驗(yàn)證是否被嵌套。如果處于第三方頁(yè)面的框架里,應(yīng)彈出確認(rèn)框提醒用戶(hù)。確認(rèn)框的坐標(biāo)位置最好有一定的隨機(jī)偏移,從而使攻擊者構(gòu)造的點(diǎn)擊區(qū)域失效。驗(yàn)證方式為:

Flash 使用

SWF與js交互的控制屬性AllowScriptAccess,「RECOMMENDED」強(qiáng)烈建議為never,如果選擇sameDomain或者always,自己應(yīng)該清楚自己在做什么

SWF的網(wǎng)絡(luò)屬性AllowNetworking,「RECOMMENDED」強(qiáng)烈建議為none,否則可能會(huì)引起CSRF,如果選擇all或internel,自己應(yīng)該清楚自己在做什么

SWF與js參數(shù)傳遞,「SHOULD」需要進(jìn)行字符過(guò)濾,防止XSS攻擊

可執(zhí)行文件(.swf)授信,不應(yīng)該「SHOULD NOT」使用Security.allowDomain("*"),加載者或被加載者會(huì)獲得和當(dāng)前SWF相同的權(quán)限

非可執(zhí)行文件(.txt,.xml,.json,.jpg等)授信,不應(yīng)該「SHOULD NOT」在crossdomain.xml文件中使用allow-access-from domain="*"

在加載跨域SWF時(shí),「SHOULD NOT」慎用合并安全域(crossdomain.xml授權(quán)或loadBytes()),被加載的SWF會(huì)擁有和父SWF同樣的權(quán)限,能做任何事情

在使用sharedEvents時(shí),所發(fā)送的事件「SHOULD」應(yīng)該限制為只包含簡(jiǎn)單數(shù)據(jù)的事件,否則可能會(huì)把SWF中的數(shù)據(jù)和舞臺(tái)上所有對(duì)象暴露出去

上傳文件

建議「RECOMMENDED」上傳接口所在的域名和主域名隔離,并且采用最小化原則限制允許上傳的文件大小。

JSON/JSONP協(xié)議

JSON 數(shù)據(jù),必須「MUST」設(shè)置 http header Content-Type : application/json

以 JSONP 形式向第三方提供數(shù)據(jù),必須「MUST」設(shè)置 http header Content-Type : application/javascript,并且callback function 名稱(chēng)只允許出現(xiàn):數(shù)組、字母、下劃線(xiàn)。

JSON/JSONP 方式提供數(shù)據(jù),建議「RECOMMENDED」遵循最小化原則,只暴露需要暴露的信息,并且用白名單限制 referer 防止惡意抓取。

Cross Domain 設(shè)置

在時(shí) XML Httprequest 2(xhr2) 以及 font-face 如果需要支持跨域訪(fǎng)問(wèn)的需求,禁止「MUST」設(shè)置 header 為: Access-Control-Allow-Origin: * ,需要設(shè)置為允許訪(fǎng)問(wèn)的地址,比如: Access-Control-Allow-Origin: www.baidu.com

參考資料

JSONP 安全攻防技術(shù)
Web 前端攻防 2014
New Tricks in XMLHttpRequest2
WooYun
80sec
Open Web Application Security Project
知道創(chuàng)宇
上傳攻擊框架
SS編碼剖析
XSS原理-1
XSS的原理-2

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

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

  • 跨站腳本(XSS)是web應(yīng)用中的一種典型的計(jì)算機(jī)安全漏洞。XSS允許攻擊者可以在其他用戶(hù)瀏覽的web頁(yè)面中注入客...
    留七七閱讀 8,309評(píng)論 1 26
  • 原文https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html...
    梁行之閱讀 1,377評(píng)論 0 0
  • HTML HTML5新增加的內(nèi)容或者APIAPI層canvas: 用來(lái)寫(xiě)游戲還是很不錯(cuò)的,推薦開(kāi)源游戲框架:pix...
    FConfidence閱讀 583評(píng)論 0 3
  • 前端開(kāi)發(fā)面試知識(shí)點(diǎn)大綱: HTML&CSS: 對(duì)Web標(biāo)準(zhǔn)的理解、瀏覽器內(nèi)核差異、兼容性、hack、CSS基本功:...
    秀才JaneBook閱讀 2,773評(píng)論 0 25
  • 今日邯鄲,雨水嘩嘩啦啦的下,這樣的天氣自然是不宜出門(mén)的。坐在窗邊書(shū)桌前,臨摹一只蘿卜,這愜意的小時(shí)光。這小小水蘿卜...
    曉冰小時(shí)光閱讀 513評(píng)論 6 9

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