前端安全方面面試題

2021-10-23 22:20:34 字數 1934 閱讀 3116

兩種思路: 不要讓其變成程式, 這個資料變成程式的話不讓它執行

瀏覽器內建了對反射型xss的防禦, 當它檢測到有反射型xss的時候會進行攔截

對資料進行適當轉義, 包括在正文中的轉義, 屬性中的轉義, 指令碼中的轉義, 轉義的字元包括大於號小於號單雙引號以及and號等等

針對不能對html標籤全部過濾或轉義的情況, 比如富文字, 因為富文字的樣式是靠html標籤產生的, 這種情況只能使用白名單進行過濾, 就是把這段**解析成具體的html樹, 對樹進行分析哪些可以保留, 最後變成html字串

使用csp指定哪些內容可以執行, 哪些不能執行

轉義的時候注意適用場景和範圍

如果是在script標籤, 需要轉義大於號小於號, 在屬性中轉義引號, 富文字中只能通過白名單方式… 也就是場景和對應方法

瀏覽器在訪問伺服器的時候會帶上cookie, 而第三方**通過或表單提交方式也會帶上cookie, 帶上的過程中表示我知道使用者身份, 利用身份進行操作, 而這個過程中使用者不知情. 危害是冒名發帖, 冒名消費等等

不讓第三方請求帶cookie, 主要通過same-site這個屬性, 但是會有相容性問題

第二種方式是增加使用者的感知, 比如驗證碼, 不讓靜默操作

第三種方式增加token, 第三方訪問時沒法讀取cookie

第四種方式判斷refer, **是否來自第三方**

從技術上講, 從瀏覽器端儲存資料, 這個量不會很大, 可能用儲存一些**的配置, 比如偏好, 個性化選擇等等, 使用者身份的標識, 做一些分析統計等等, 總之放到本地儲存的需求都可以放到cookie中.

相容性區別, localstorage是h5新增的, 低版本ie不支援

cookie在請求時自動帶上, 不需要手工傳送, localst無法手動傳送

cookie可以指定過期時間, 時間到了自動失效, localst沒有這樣機制, 需要我們做刪除動作

session是在服務端實現的, 用來登入時有些登入態需要關注, 它需要有個標識, 需要你告訴我這個人對應的是哪個人

這個標識一般給到cookie裡面, 下一次訪問時帶上

session是基於cookie的儲存來實現的

容量有限, 跟隨html傳送, 可以通過http頭髮送和設定, 通過js讀取

屬性主要有

網域名稱(因為有網域名稱就不可以跨域)

路徑path(同乙個網域名稱下的path不一樣cookies讀取情況也不一樣)

有效期http-only 的無法通過js讀取, 只能通過http傳送到後台讀取

securt 只有在https使用

same-site

設定cookie的過期時間為過期時間

通過資料加密在客戶端和服務端通訊之前協商乙個加密協議, 通過加密協議傳輸資料, 第三方可以竊聽 但是不知道加密前的原始資料是什麼

中間人就是在客戶端和服務端之間充當加密和解密角色, 通過證書機制, 伺服器證書需要ca簽發, 瀏覽器驗證是否可信ca簽發

首先確保全站都可以部署到https, 因為部署一部分的話意義有限, 最麻煩的地方是資源引用, 涉及到資源改造

第二部找ca生成證書

第三部部署到伺服器

跟xss原理相似, sql語句的語義改變

頁面邏輯出現異常

洩露資料, 拖庫等

通過轉義, 可能有風險的引數進行轉義

通過orm系統資料模型來做

通過資料庫提供的引數化查詢能力(表達查詢意圖, 條件值是什麼)

上傳的檔案執行惡意**

防範:判斷檔案字尾

判斷檔案型別

判斷檔案頭

設定許可權, 讓上傳的檔案沒有可執行許可權

雜湊 + 加鹽

使用者明文密碼不能被對比和儲存

登入過程中用跟儲存相同的方式進行雜湊, 雜湊之後對比

如果被竊聽可能, 要保證明文密碼不被洩露

演算法方面面試題及個人解答

1 o n 2 冒泡 直接插入 最好o n 簡單選擇排序 2 o n logn 快排 最壞 o n n 歸併 堆排序 3 o d n 基數排序 4 根據增量函式 希爾排序 1 簡單排序演算法 它們在時間複雜度上表現不是很好,但簡單排序演算法都是穩定的,其次,在n值比較小的情況下 簡單排序演算法和其它...

前端面面試題 死記硬背版

1 http請求 http協議使用tcp協議進行傳送,首先是tcp三次握手,完成後,客戶端會向伺服器發出請求 2 http請求方式 get,get是向伺服器獲取提取資料,有限制,不安全 post,post提交資料會放到header內提交,post沒有限制,post安全,表單提交和上傳都用post 表...

前端面試題

sprites是什麼和為什麼要使用他們?css 精靈 把一堆小的整合到一張大的上,減輕伺服器對的請求數量 有可能替代sprites的方法是什麼?svg圖示,字型圖示,字元編碼等等。1 在div排版的時候,假設現在是100px的寬,我在盒子左側用padding left留個10px的白,div就撐開了...