当前位置: 首页 > web >正文

常见 Web 安全问题

网站在提供便利的同时,也面临着各种安全威胁。一个小小的漏洞可能导致数据泄露、系统瘫痪,甚至带来不可估量的经济损失。本文介绍几种最常见的 Web 安全问题,包括其原理、危害以及防护策略


一、SQL 注入(SQL Injection)

原理

SQL 注入是指攻击者通过在 Web 表单或 URL 中注入恶意 SQL 语句,使服务器执行未授权的数据库操作。例如:

SELECT * FROM users WHERE username = 'admin' AND password = '123456' OR '1'='1';

这条语句中 '1'='1'恒为真,可能导致登录绕过。

危害

  • 绕过身份验证

  • 获取、篡改或删除敏感数据

  • 执行数据库管理命令

  • 持久化控制后台

防护措施

  • 使用参数化查询(PreparedStatement)

  • ORM 框架自带防注入机制

  • 严格校验用户输入

  • 最小权限原则配置数据库账户


二、跨站脚本攻击(XSS)

原理

XSS 攻击是指攻击者向页面注入恶意 JavaScript 脚本,从而在用户浏览时执行。例如,在评论区中插入:

<script>alert('XSS');</script>

类型

  • 反射型 XSS:攻击脚本立即被返回执行

  • 存储型 XSS:脚本保存在数据库中,页面访问时触发

  • DOM 型 XSS:前端代码中处理不当引发

危害

  • 窃取 Cookie、Token

  • 伪造用户操作

  • 植入钓鱼页面或广告

防护措施

  • 对用户输入进行转义(如使用 HTML Encode)

  • 使用 CSP(内容安全策略)

  • 避免使用 innerHTML 直接渲染用户内容


三、跨站请求伪造(CSRF)

原理

CSRF 利用用户已登录的身份,诱导其在不知情的情况下向目标网站发起请求。例如:

<img src="https://example.com/api/delete?user_id=1">

若用户已登录 example.com,该请求可能被执行。

危害

  • 修改用户资料

  • 发起转账

  • 删除资源等敏感操作

防护措施

  • 使用 CSRF Token 校验请求合法性

  • 设置 SameSite=Strict Cookie 属性

  • 对重要操作使用二次验证(如验证码)


四、命令注入(Command Injection)

原理

命令注入发生在 Web 应用将用户输入拼接到系统命令中执行。例如:

os.system("ping " + user_input)

如果 user_input = "127.0.0.1 && rm -rf /",后果不堪设想。

危害

  • 控制服务器

  • 删除文件、窃取数据

  • 横向移动至其他系统

防护措施

  • 禁止拼接执行系统命令

  • 使用安全函数(如 Python 的 subprocess.run,并禁用 shell)

  • 对输入进行白名单校验


五、文件上传漏洞

原理

攻击者上传恶意脚本文件(如 .php.jsp),并访问该文件从而远程控制服务器。

危害

  • 上传 WebShell,获取服务器控制权

  • 窃取敏感数据

  • 恶意传播木马

防护措施

  • 限制上传文件类型、大小

  • 随机重命名上传文件并存储至非 Web 可访问目录

  • 不解析上传目录中的脚本文件

  • 使用图像验证(如检查文件头)


六、敏感信息泄露

原理

网站错误配置、调试信息、日志等可能暴露数据库密码、服务器路径、API 密钥等。

常见场景

  • 返回详细错误信息

  • .git.svn 被误暴露

  • .env 配置文件泄漏

防护措施

  • 关闭调试模式

  • 配置 Web 服务器禁止访问敏感目录和文件

  • 统一错误返回(不暴露堆栈信息)


七、安全配置不当

原理

默认配置、版本信息暴露、未启用 HTTPS 等都属于安全配置不当的范畴。

危害

  • 被识别并利用已知漏洞

  • 中间人攻击(MitM)

  • 数据泄露

防护措施

  • 删除默认示例、页面、功能

  • 隐藏服务器版本信息

  • 使用 HTTPS 传输敏感信息

  • 定期审计安全配置


八、权限控制不严(越权访问)

原理

用户可以访问或操作其权限范围之外的资源。例如:普通用户访问 /admin 页面,或者修改他人数据。

防护措施

  • 每个请求进行权限校验

  • 接口中进行资源拥有者校验(如检查用户 ID 是否匹配)

  • 使用 RBAC 权限模型(角色访问控制)


Web 安全不是一次性的工作,而是一项持续的工程。开发者需要具备安全意识,在开发过程中不断引入防御机制,配合定期的渗透测试与审计,才能有效防范日益复杂的 Web 攻击。 

http://www.xdnf.cn/news/10604.html

相关文章:

  • MySQL数据库从0到1
  • Java设计模式之备忘录模式详解
  • 第九章:LLMOps自动化流水线:释放CI/CD/CT的真正力量
  • OpenRouter使用指南
  • Git-flow流
  • react实现markdown文件预览
  • 关于海洋数据上云的一些机遇与挑战
  • python中if __name__ == ‘__main__‘ 的作用再谈
  • ffmpeg 的视频格式转换 c# win10
  • 【C语言】C语言经典小游戏:贪吃蛇(下)
  • DAY41 CNN
  • 15.MQTT协议和云平台(ESP8266)
  • Codeforces Round 1028 (Div. 2)(A-D)
  • SystemVerilog—new函数的使用和误区
  • 聚类分析 | MATLAB实现基于SOM自组织特征映射聚类可视化
  • Spring AI 之检索增强生成(Retrieval Augmented Generation)
  • 一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录——3. 服务器软件更新,以及常用软件安装
  • 面向连接的运输:TCP
  • 百度蜘蛛池的作用是什么?技术@baidutopseo
  • 【算法设计与分析】实验——二维0-1背包问题(算法分析题:算法思路),独立任务最优调度问题(算法实现题:实验过程,描述,小结)
  • 黑马Java面试笔记之 微服务篇(SpringCloud)
  • centos8修改IP地址和Hostname
  • 双指针题解——反转字符串中的单词【LeetCode】
  • 从 LeetCode 到日志匹配:一行 Swift 实现规则识别
  • 前端自动化测试利器:Playwright 全面介绍
  • NVMe IP现状扫盲
  • STM32 智能小车项目 L298N 电机驱动模块
  • Mininconda3安装使用
  • Java设计模式之观察者模式详解
  • 【Godot引擎】如何使用内置的全局搜索功能提升开发效率