互聯(lián)網(wǎng)安全架構(gòu)平臺設(shè)計

一、Web安全常見攻擊手段

1 XSS

跨站腳本攻擊(Cross Site Scripting)縮寫為CSS,避免與CSS層疊樣式名稱沖突,縮寫改寫為XSS。

**攻擊原理:**數(shù)據(jù)提交轉(zhuǎn)發(fā)到另一個頁面展示,使用js腳本語言,瀏覽器默認支持腳本語言執(zhí)行
**攻擊常見場景:**論壇,評論XSS
**防御手段:**特殊字符,使用轉(zhuǎn)義字符轉(zhuǎn)換
**解決辦法**:服務(wù)后端使用過濾器統(tǒng)一攔截請求數(shù)據(jù),將特殊字符轉(zhuǎn)義處理,但是有的表單需要提交特殊字符,這種情況,在實際開發(fā)中,特殊考慮

2 SQL注入

原理:dao層采用sql拼接的方式,沒有采用預(yù)編譯方式。

攻擊示例:
/login?username=xiaoming&password=' or 1='1;
后臺sql:select * from user where username='${usernmae}' and password='${password}'

**mybatis中:** $是采用sql拼接的方式,#會預(yù)編譯sql語句,防止sql語句攻擊

3 防盜鏈

限制資源只能在某個服務(wù)器上訪問

原理:使用http請求頭中的referer屬性,標識該鏈接的來源域名,服務(wù)端程序,通過檢測請求頭中的referer,是否給與響應(yīng)
實際使用場景:圖片、視頻、接口等需要保護的資源,對請求做限制,例如添加黑名單、白名單來限制可訪問的網(wǎng)站
技術(shù)實現(xiàn):網(wǎng)關(guān),過濾器,添加黑名單白名單,對需要保護的接口或特定請求地址進行訪問限制

4 CSRF

跨站請求偽造(英語:Cross-site request forgery)

冪等性:唯一性,也就是防止表單重復(fù)提交,使用token作為令牌,每次請求前,必須獲取一個令牌,將令牌token存在request header中,請求到達服務(wù)器后,服務(wù)端刪除該令牌,當請求第二次達到時,發(fā)現(xiàn)token不存在,返回請求錯誤
場景:服務(wù)端api采用冪等設(shè)計,使用token令牌來控制請求。客戶端可以提前生成很多token,然后多次發(fā)送相同請求,每次使用事先生成好的token,來發(fā)起攻擊。
如何防止機器模擬請求發(fā)起攻擊:
1 使用圖形驗證碼
2 使用nginx對客戶端限流
3 配置黑名單和白名單(發(fā)現(xiàn)惡意攻擊后,將請求端IP加入黑名單,禁止訪問)
如何防止偽造token請求:
須知:互聯(lián)網(wǎng)上沒有絕對防止通過抓包分析到token的方法。
在操作核心業(yè)務(wù),比如修改密碼,支付下單,轉(zhuǎn)賬等核心業(yè)務(wù)時,使用短信驗證碼方式或者人臉識別方式,確認是否為本人操作。(實際應(yīng)用中,一般小金額不會驗證,大金額會驗證)

5 忘記密碼漏洞
原理:抓包后,模擬請求,用程序不停的嘗試登陸
如何防止:
1 密碼字母數(shù)字符號
2 重試5次仍然錯誤,出圖形驗證碼
3 配置防止DDOS,限流,限制IP訪問,黑名單和白名單

6 不要用隱藏域傳遞關(guān)鍵數(shù)據(jù)
例如流程有第一步、第二部、第三步,前面步驟的數(shù)據(jù)不要存在隱藏域或者js變量,存在后臺session中

7 上傳漏洞

上傳接口中,對文件格式做限制,黑客上傳木馬文件(可執(zhí)行程序),可能會導(dǎo)致服務(wù)崩潰。比如,文件可以為jsp,exe,bat文件。

案例:如果服務(wù)為java web,使用tomcat服務(wù)器,且服務(wù)端未做動靜分離,安全控制,在文件上傳的時候,上傳jsp,jsp頁面植入java刪除文件代碼,瀏覽器訪問該jsp,即可刪除。
如何防御:
1 不能用文件后綴判斷文件格式,讀取文件流,判斷文件格式(重要)
2 動靜分離,Nginx + Tomcat,nginx不能執(zhí)行jsp程序(重要)
3 服務(wù)器環(huán)境上硬盤不能刪除操作
4 前端做后綴限制
5 服務(wù)器生產(chǎn)環(huán)境禁止熱部署
6 限制上傳class、jsp、exe等可執(zhí)行程序

8 常見其他漏洞

  • jsp注釋,要使用java注釋<%--%>,不要使用htm注釋
  • 全局捕獲異常,統(tǒng)一返回異常信息
二、信息加密與漏洞掃描

加密算法,不能百分百防止,只是盡可能的消耗破解的成本
密碼,一般用單向加密,不可被解密,使用MD5加密再加鹽

  • 對稱加密

加解密使用同一個密鑰。常見的對稱加密方案:DES,AES
缺點:密碼容易泄露
有點:速度非常快
場景:服務(wù)端與服務(wù)端通信,多方約定好相同的密鑰后,各自保護好密鑰
移動端APP,禁止使用對稱加密,apk安裝包可以反編譯獲取源碼中的密鑰

  • 非對稱加密

公鑰 + 私鑰 RSA
1 使用第三方工具生成非對稱加密鑰對,github上有代碼可生成,公開公鑰給客戶端,自己保存好私鑰(每個客戶端對應(yīng)一對公鑰私鑰)
2 公鑰加密,私鑰解密;(安全,比如github本地倉庫同步)
私鑰加密,公鑰解密
有點:目前為止,最安全的加密手段
缺點:效率低
場景:第三方支付對接,核心金融結(jié)構(gòu)對接

三、互聯(lián)網(wǎng)API接口安全設(shè)計
  • API冪等設(shè)計

防止網(wǎng)絡(luò)延遲或接口重復(fù)提交導(dǎo)致數(shù)據(jù)重復(fù)的問題,保證數(shù)據(jù)唯一性

解決方案:請求端將token放入request header中,redis生成token,單機版可以使用uuid來保證token的唯一性,分布式應(yīng)用需要使用分布式全局id,使用AOP技術(shù),自定義注解,實現(xiàn)處理表單重復(fù)提交的邏輯,消費掉token

  • web頁面表單重復(fù)提交

同上,將token放入form表單中。當進入表單頁面時(也可以用自定義注解實現(xiàn),給每個需要token的頁面生成token),后臺生成一個token存入頁面的hidden input

  • 如何保證外網(wǎng)開放接口的安全性
    1 搭建API網(wǎng)關(guān)控制接口訪問權(quán)限
    2 開放平臺設(shè)計oauth2.0協(xié)議(安全認證),包括qq、微信、微博等第三方聯(lián)合登陸
    3 采用https加密傳輸協(xié)議(nginx配置https)
    4 API接口數(shù)字簽名,非對稱加密,rsa2.5,基于令牌的方式實現(xiàn)API接口調(diào)用。防止抓包分析篡改數(shù)據(jù)

    一般來說,表結(jié)構(gòu)設(shè)計
    appName 機構(gòu)名稱
    appId 應(yīng)用id(一次注冊,永遠不變,相當于主鍵,便于后臺控制該應(yīng)用的使用權(quán))
    appSecret 應(yīng)用密鑰(可改變,避免泄露,發(fā)現(xiàn)泄露后更改密鑰)
    isFlag 是否可用(是否對某個機構(gòu)開放)
    accessToken 最近一次的accessToken

    服務(wù)端步驟:根據(jù)appId,appSecret查詢token,有則刪除原來的token,再生成新的token,用redis來控制token過期時間,token作為鍵,appId作為值;具體調(diào)用服務(wù)時攜帶token,后臺判斷token的有效性及是否對機構(gòu)開放(根據(jù)isFlag)。
    客戶端:如果token過期,重新調(diào)用獲取token的接口?一般采用job,根據(jù)過期時間來設(shè)定一個定時任務(wù),設(shè)置最新的token,這樣就可以保證調(diào)用服務(wù)時,從定時任務(wù)執(zhí)行的結(jié)果拿到token,實現(xiàn)token永久有效

四、網(wǎng)站安全漏洞掃描與抓包分析
  • 如何防止抓包篡改數(shù)據(jù)

場景:金融系統(tǒng),傳遞用戶userid,金額等數(shù)據(jù)
用戶防御方式:使用關(guān)鍵聯(lián)網(wǎng)業(yè)務(wù)時,盡量不要連接不可信wifi,使用4g流量 ,使用移動運營商提供的上網(wǎng)服務(wù),除非4g流量使用偽基站發(fā)送詐騙短信。短信鏈接不要點擊。

服務(wù)端程序防御方式:驗證簽名和令牌方式實現(xiàn)參數(shù)傳遞
令牌方式:
1 客戶端界面?zhèn)鞯街飨到y(tǒng)后臺的userid,金額等參數(shù),主系統(tǒng)服務(wù)器使用httpclient調(diào)用支付系統(tǒng)獲取令牌參數(shù)接口,將userid,金額等參數(shù)傳過去,獲取到返回的參數(shù)令牌,并給客戶端
2 客戶端拿到參數(shù)令牌后,跳轉(zhuǎn)到支付系統(tǒng)
3 支付系統(tǒng)通過該參數(shù)令牌,取到保存好的參數(shù),完成支付相關(guān)業(yè)務(wù)
除非黑客能黑掉主系統(tǒng)服務(wù)端或者支付系統(tǒng),常見的抓包是通過連接局域網(wǎng),該局域網(wǎng)內(nèi)有黑客對客戶端發(fā)起的請求進行抓包獲取明文數(shù)據(jù)或者篡改數(shù)據(jù),發(fā)生安全事故

  • 抓包工具

在請求前后可以進行攔截,修改請求參數(shù)或修改返回數(shù)據(jù)
1 測試工程,核對傳入?yún)?shù)是否符合要求
2 黑客:獲取明文數(shù)據(jù),篡改數(shù)據(jù)

五、Https協(xié)議
  • http協(xié)議

超文本傳輸協(xié)議,底層使用socket TCP長連接,基于請求與響應(yīng),同步請求

  • 重定向

瀏覽器發(fā)起兩次請求,如果返回狀態(tài)302給客戶端,在響應(yīng)頭中存放對應(yīng)的值就是重定向地址,直接訪問本地。后臺可以直接寫response.setStatus(302);response.setHeader("location", "loginPage");

  • https協(xié)議

https底層實現(xiàn),使用混合加密算法(對稱加密和非對稱加密)
先生成對稱加密密鑰SC,然后使用非對稱加密生成的公鑰SCP,對SC進行加密,最后通過SC對請求數(shù)據(jù)進行對稱加密傳輸(因為對稱加密效率高)
流程:
客戶端為瀏覽器,服務(wù)端為證書服務(wù)
1 瀏覽器向服務(wù)器端發(fā)送https請求
2 服務(wù)端向客戶端發(fā)送證書和公鑰
3 瀏覽器驗證證書是否有效,有效,則生成一個隨機數(shù),作為對稱密鑰,然后使用公鑰對對稱密鑰進行加密,發(fā)送到服務(wù)端
4 服務(wù)端使用私鑰對接收到的數(shù)據(jù)解密,得到隨機數(shù),然后使用該隨機數(shù)進行對稱加密傳輸數(shù)據(jù)到瀏覽器
5 瀏覽器使用隨機數(shù)解密,得到正確的數(shù)據(jù),驗證可靠性
6 最后,瀏覽器使用隨機數(shù)對傳輸參數(shù)進行對稱加密傳輸
如何使用https:
阿里云申請免費一年的證書,支持nginx,apache,tomcat配置,按照官方教程配置即可,一般使用nginx來配置https,如果tomcat集群,每個集群都要配置相對來說較nginx會多一些工作量

六、電子商務(wù)風控與黑名單白名單系統(tǒng)
  • 企業(yè)網(wǎng)關(guān)如何架構(gòu)
  • 企業(yè)級網(wǎng)關(guān)應(yīng)用場景

路由地址,反向代理,黑名單與白名單,授權(quán)安全,跨域(保證域名(網(wǎng)關(guān)地址)相同使用nginx區(qū)分不同的項目路徑進行轉(zhuǎn)發(fā)跳轉(zhuǎn))

  • 企業(yè)網(wǎng)關(guān)作用
  • 常用網(wǎng)關(guān)框架,Nginx, Zuul

Zuul使用JAVA編寫,微服務(wù)專用,springboot搭建一個zuul服務(wù)并起到,在application.yml文件中配置管理的項目地址
Nginx 使用C編寫,針對服務(wù)器,配置搞定,nginx根據(jù)項目名進行轉(zhuǎn)發(fā)

  • 基于Zuul框架實現(xiàn)接口權(quán)限判斷
七、基于多種手段防御DDOS攻擊
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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