前端常見安全問題 + 防御方法 + 面試回答

目錄

  1. XSS(跨站腳本攻擊)
  2. CSRF(跨站請求偽造)
  3. SQL 注入
  4. 文件上傳漏洞
  5. 其他前端常見安全問題
  6. 面試常見問答

1. XSS(跨站腳本攻擊)

定義

XSS(Cross-Site Scripting)是一種 通過注入惡意腳本執行非預期操作 的攻擊。
分為三類:

  • 存儲型:代碼存儲在數據庫中,用戶訪問時執行(評論區、論壇)。
  • 反射型:代碼通過 URL 參數返回執行。
  • DOM 型:前端 JS 動態插入數據時執行。

危害

  • 竊取 Cookie、Token,盜取用戶身份。
  • 偽造請求(轉賬、發帖)。
  • 植入惡意腳本、廣告、木馬。

防御手段

  • 輸入過濾 + 輸出轉義
  • CSP(Content Security Policy) 限制腳本來源。
  • HttpOnly Cookie,防止通過 JS 獲取。
  • 前端框架(React/Vue)默認轉義 HTML。

示例

? 漏洞代碼
document.body.innerHTML = location.search; 

訪問:

http://site.com?msg=<script>alert(1)</script>
? 安全代碼
document.body.textContent = location.search;

2. CSRF(跨站請求偽造)

定義

CSRF(Cross-Site Request Forgery)利用 用戶已登錄狀態,誘導其訪問惡意鏈接,偽造合法請求。
瀏覽器會自動帶上用戶 Cookie,從而冒充用戶身份。


危害

  • 轉賬、盜刷。
  • 修改密碼、郵箱。
  • 批量操作(刪帖、發帖)。

防御手段

  1. CSRF Token 驗證(每個請求附帶隨機 Token)。
  2. SameSite Cookie:阻止跨站請求攜帶 Cookie。
  3. 驗證碼 / 二次確認
  4. Referer / Origin 校驗

示例

? 漏洞
<img src="http://bank.com/transfer?to=attacker&amount=1000">
? 安全(CSRF Token)
<form method="POST" action="/transfer"><input type="hidden" name="csrfToken" value="random123"><input name="to"><input name="amount"><button>提交</button>
</form>

3. SQL 注入

定義

SQL 注入是攻擊者 在輸入中注入惡意 SQL 代碼,拼接后數據庫直接執行。


危害

  • 繞過登錄驗證。
  • 竊取/篡改數據。
  • 刪除數據庫。

防御手段

  1. 參數化查詢 / 預編譯(Prepared Statement) ?
  2. 輸入校驗(過濾 ', --, ; 等特殊符號)。
  3. 最小權限(避免刪庫)。
  4. 使用 ORM 框架

示例

? 漏洞
const sql = `SELECT * FROM users WHERE username='${username}' AND password='${password}'`;
db.query(sql);

輸入:

' OR '1'='1
? 安全
const sql = 'SELECT * FROM users WHERE username=? AND password=?';
db.query(sql, [username, password]);

4. 文件上傳漏洞

定義

文件上傳漏洞是指:攻擊者上傳惡意文件(如 WebShell),服務器未嚴格校驗,導致代碼執行或 DoS 攻擊


危害

  • 上傳腳本木馬,控制服務器。
  • 上傳惡意文檔,攻擊用戶。
  • 上傳大文件,導致拒絕服務。

防御手段

  1. 白名單文件類型(校驗擴展名 + MIME + 文件頭)。
  2. 重命名文件(避免保留原始擴展名)。
  3. 存儲到非 Web 目錄
  4. 限制大小/數量
  5. 前端校驗(次要)+ 后端強制校驗(核心)

示例

? 漏洞
if (substr($_FILES['file']['name'], -4) === ".jpg") {move_uploaded_file($_FILES['file']['tmp_name'], "/uploads/" . $_FILES['file']['name']);
}

攻擊者上傳 evil.php.jpg

? 安全(Node.js)
const upload = multer({storage,fileFilter: (req, file, cb) => {const allowed = ['image/jpeg', 'image/png'];if (!allowed.includes(file.mimetype)) return cb(new Error('Invalid type'));cb(null, true);},limits: { fileSize: 1024 * 1024 * 2 }
});

5. 其他前端常見安全問題

5.1 點擊劫持(Clickjacking)

  • 定義:攻擊者在透明 iframe 中嵌套目標站點,引導用戶點擊。
  • 防御:X-Frame-Options: DENYContent-Security-Policy: frame-ancestors 'none';

5.2 敏感信息泄露

  • 問題:前端暴露 API Key、JWT、調試接口。

  • 防御:

    • 不在前端存儲敏感信息。
    • 使用環境變量 + 后端代理。

5.3 依賴安全漏洞

  • 問題:前端依賴(npm 包)可能被注入惡意代碼。

  • 防御:

    • 使用 npm audit/yarn audit
    • 鎖定依賴版本。
    • 關注供應鏈安全(supply chain attack)。

6. 面試常見問答

Q1: 什么是 XSS?怎么防御?

  • 跨站腳本攻擊,注入惡意 JS。
  • 危害:竊取 Cookie、執行惡意操作。
  • 防御:輸入過濾 + 輸出轉義 + CSP + HttpOnly Cookie。

Q2: 什么是 CSRF?怎么防御?

  • 跨站請求偽造,利用用戶 Cookie 發起偽造請求。
  • 防御:CSRF Token、SameSite Cookie、驗證碼、Referer 校驗。

Q3: 什么是 SQL 注入?怎么防御?

  • 在輸入中拼接 SQL 語句篡改數據庫。
  • 防御:預編譯、參數化查詢、最小權限、ORM 框架。

Q4: 文件上傳漏洞如何防御?

  • 白名單校驗文件類型(MIME + 文件頭)。
  • 上傳后重命名,存儲到非 Web 目錄。
  • 限制大小和數量,多層校驗。

Q5: 點擊劫持如何防御?

  • 使用 X-Frame-OptionsCSP frame-ancestors

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/94997.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/94997.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/94997.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jxWebUI--下拉選擇框

下拉選擇框提供了預先定義好的選項&#xff0c;用戶只能在這些選項中選擇輸入。 combobox 定義格式 combobox 控件名 屬性列表 ;屬性 bind 類型&#xff1a;string 缺省值&#xff1a; 輸入控件所綁定的變量名。當給輸入控件bind了一個變量名后【bindbind_var_name】&#xff0…

大模型時代:用Redis構建百億級向量數據庫方

大模型時代&#xff1a;用Redis構建百億級向量數據庫方案第一章&#xff1a;大模型時代的向量數據庫挑戰1.1 大模型時代的特征與需求1.2 向量數據庫的核心價值1.3 百億級向量的技術挑戰第二章&#xff1a;Redis作為向量數據庫的優勢2.1 Redis的核心優勢2.2 Redis向量搜索模塊&a…

jsqlparser(六):TablesNamesFinder 深度解析與 SQL 格式化實現

在數據庫應用開發中&#xff0c;SQL語句的解析和處理是一項常見而重要的任務。本文將深入探討 JSQLParser 中的 TablesNamesFinder 類&#xff0c;分析其核心原理、與 AST 訪問接口&#xff08;CCJSqlParserVisitor &#xff09;的關系、使用場景&#xff0c;并通過實際代碼示例…

Python訓練營打卡Day49-神經網絡調參指南

知識點回顧&#xff1a;隨機種子內參的初始化神經網絡調參指南 參數的分類調參的順序各部分參數的調整心得 作業&#xff1a;對于day41的簡單cnn&#xff0c;看看是否可以借助調參指南進一步提高精度。 隨機種子 import torch import torch.nn as nn# 定義簡單的線性模型&…

Elasticsearch 常用任務管理命令及實戰應用

常用任務管理命令 列出所有任務 curl -X GET "http://<es_host>:<es_port>/_tasks?detailedtrue&pretty" -H Content-Type: application/json獲取特定類型的任務 curl -X GET "http://<es_host>:<es_port>/_tasks?actions<act…

Java試題-選擇題(26)

Java試題-選擇題(26) 題目 下列有關Thread的描述,哪個是正確的 ? A:啟動一個線程的方法是:thread. run() B:結束一個線程的通常做法是:thread. stop() C:將一個線程標記成daemon線程,意味著當主線程結束,并且沒有其它正在運行的非daemon線程時,該daemon線程也會自…

緩存的原理、引入及設計

開篇寄語&#xff1a;緩存&#xff0c;你真的用對了嗎&#xff1f; 我們為什么要學習緩存呢&#xff1f;有必要學習緩存嗎&#xff1f; 緩存的使用&#xff0c;是提升系統性能、改善用戶體驗的唯一解決之道。 其實&#xff0c;作為互聯網公司&#xff0c;只要有直接面對用戶的業…

單片機如何控制模數轉換芯片

一、介紹單片機控制模數轉換&#xff08;ADC&#xff09;芯片的核心是通過通信接口發送控制指令&#xff0c;并讀取轉換后的數字信號&#xff0c;本質是“指令交互數據傳輸”的協同過程&#xff0c;具體實現需分4步完成&#xff0c;關鍵在于接口匹配和時序同步。二、核心1. 先明…

【Proteus仿真】開關控制系列仿真——開關控制LED/撥碼開關二進制計數/開關和繼電器控制燈滅

目錄 0案例視頻效果展示 0.1例子1&#xff1a;開關控制LED燈亮滅 0.2例子2&#xff1a;數碼管顯示撥碼開關二進制計數(000~255) 0.3例子3&#xff1a;開關和繼電器控制燈亮滅 1基礎知識補充 1.1 74LS245雙總線收發器 1.1.1 引腳及功能 1.1.2應用場景 1.1.3真值表 1.2…

Q1 Top IF 18.7 | 基于泛基因組揭示植物NLR進化

文章DOI: 10.1016/j.chom.2025.07.011 標題&#xff1a;Pangenomic context reveals the extent of intraspecific plant NLR evolution 期刊&#xff1a;Cell Hose & Microbe (https://i-blog.csdnimg.cn/direct/0e31f86b94d348b0a1adb084ec4e49b7.png)(https://i-blog.cs…

技術干貨|Prometheus PromQL查詢語言之聚合操作內置函數

聚合操作 Prometheus還提供了下列內置的聚合操作符,這些操作符作用域瞬時向量。可以將瞬時表達式返回的樣本數據進行聚合,形成一個新的時間序列。 sum (求和) min (最小值) max (最大值) avg (平均值) stddev (標準差) stdvar (標準差異) count (計數) count_values …

Redis 哨兵(Sentinel)全面解析

在2025年的數字化浪潮中&#xff0c;想象這樣一個場景&#xff1a;凌晨3點&#xff0c;電商平臺流量突然暴增&#xff0c;主Redis服務器因硬件故障突然宕機。幾年前&#xff0c;這意味著緊急電話、慌亂的運維人員和不可避免的業務中斷。而今天&#xff0c;用戶甚至沒有察覺任何…

【數學史冷知識】關于行列式的發展史

學習的途中會遇到一些有意思的東西&#xff0c;我想著做一個專欄《艾薩克紀行簡報》&#xff0c;專門寫這些知識發展歷史。可以讓您從繁忙的學習生活中放松&#xff0c;添些耀彩。行列式和微積分一樣&#xff0c;都是兩個人獨立發現的。而且還都有萊布尼茨。1683 年&#xff0c…

【python】python進階——生成器

目錄 一、生成器介紹 1.1 生成器與迭代器的關系 1.2 生成器與return比較 二、創建生成器 方法1: 生成器函數 方法2: 生成器表達式 三、生成器的實際應用場景 3.1 處理大型文件 3.2 生成無限序列 3.3 數據管道處理 四、生成器的高級用法 4.1 使用send()方法傳遞值 …

【Pytorch】生成對抗網絡實戰

GAN框架基于兩個模型的競爭&#xff0c;Generator生成器和Discriminator鑒別器。生成器生成假圖像&#xff0c;鑒別器則嘗試從假圖像中識別真實的圖像。作為這種競爭的結果&#xff0c;生成器將生成更好看的假圖像&#xff0c;而鑒別器將更好地識別它們。 目錄 創建數據集 定…

Java基礎第7天總結(代碼塊、內部類、函數式編程)

代碼塊靜態代碼塊&#xff1a;有static修飾&#xff0c;屬于類&#xff0c;與類一起優先加載&#xff0c;自動執行一次實例代碼塊&#xff1a;無static修飾&#xff0c;屬于對象&#xff0c;每次創建對象時&#xff0c;都會優先執行一次。package com.itheima.code;import java…

文獻綜述寫作指南:從海量文獻到邏輯閉環的實戰模板

文獻綜述往往是學術寫作的“第一關難題”&#xff1a;面對成百上千篇文獻&#xff0c;如何避免“簡單羅列”的陷阱&#xff0c;梳理出有邏輯、有洞見的論述體系&#xff1f;本文結合學術寫作實踐&#xff0c;總結出一套模塊化的文獻綜述“實戰模板”&#xff0c;通過結構化方法…

CuTe C++ 簡介01,從示例開始

這里先僅僅關注 C 層的介紹&#xff0c;python DSL 以后再說。在 ubuntu 22.04 X64 中&#xff0c;RTX 50801. 環境搭建1.1 安裝 cuda1.2 下載源碼git clone https://github.com/NVIDIA/cutlass.git1.3 編譯mkdir build/ cmake .. -DCUTLASS_NVCC_ARCHS"120" -DCMAK…

Python實現異步多線程Web服務器:從原理到實踐

目錄Python實現異步多線程Web服務器&#xff1a;從原理到實踐引言第一章&#xff1a;Web服務器基礎1.1 Web服務器的工作原理1.2 HTTP協議簡介1.3 同步 vs 異步 vs 多線程第二章&#xff1a;Python異步編程基礎2.1 異步I/O概念2.2 協程與async/await2.3 事件循環第三章&#xff…

Deep Think with Confidence:llm如何進行高效率COT推理優化

1. 引言:大模型的推理解碼優化 大型語言模型(LLM)在處理數學、編碼等復雜推理任務時,一種強大但“耗能巨大”的技術是self-consistency,也稱并行思考(parallel thinking)。其核心思想是讓模型對同一個問題生成多條不同的“思考路徑”(reasoning traces),然后通過多數…