兩種思路: 不要讓其變成程式, 這個資料變成程式的話不讓它執行
瀏覽器內建了對反射型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是在服務端實現的, 用來登入時有些登入態需要關注, 它需要有個標識, 需要你告訴我這個人對應的是哪個人容量有限, 跟隨html傳送, 可以通過http頭髮送和設定, 通過js讀取這個標識一般給到cookie裡面, 下一次訪問時帶上
session是基於cookie的儲存來實現的
屬性主要有
網域名稱(因為有網域名稱就不可以跨域)
路徑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就撐開了...