常见 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 攻击。