Web常见攻击方式及防御策略
SQL注入 (SQL Injection)
详细解析:
SQL 注入是一种利用应用程序未正确验证用户输入的漏洞,通过向应用传递恶意 SQL 查询来操纵数据库的行为。这种攻击可能导致敏感数据泄露、篡改或删除。
步骤:
- 攻击者找到可接受动态参数的应用程序入口点。
- 输入恶意 SQL 语句作为查询的一部分。
- 数据库执行该恶意查询,可能暴露敏感信息或允许未经授权的数据修改。
示例:
假设有一个登录表单,其后台代码如下:
$query = "SELECT * FROM users WHERE username='" . $_POST['username'] . "' AND password='" . $_POST['password'] . "'";
如果用户名字段被设置为 admin' --
,则最终查询变为:
SELECT * FROM users WHERE username='admin' -- AND password=''
这会绕过密码验证。
防御方法:
- 使用预处理语句(Prepared Statements)和参数化查询。
- 对所有外部输入进行严格的校验和清理。
- 避免显示详细的错误消息给终端用户。
跨站脚本攻击 (XSS)
详细解析:
跨站脚本攻击是指攻击者将恶意 JavaScript 或其他类型的客户端脚本嵌入网页中,在受害用户的浏览器环境中运行这些脚本。它分为反射型 XSS 和存储型 XSS。
步骤:
对于 存储型 XSS, 参考引用中的描述:
- 攻击者将恶意代码提交到目标网站的数据库中。
- 用户访问页面时,服务器从数据库提取内容并将其渲染成 HTML 响应。
- 浏览器加载此响应后执行嵌入的恶意脚本。
示例:
在留言板功能中,攻击者发布一条包含 <script>alert('Hacked')</script>
的评论。当其他用户浏览这条留言时,他们的浏览器会弹出警告框。
防御方法:
- 实现上下文感知编码(Context-Aware Encoding),例如 HTML 编码、JavaScript 编码等。
- 启用 Content Security Policy (CSP),限制哪些资源可以在页面上加载和执行。
特点 | 描述 | 预防方法 |
---|---|---|
利用了HTML标签特性 | 将恶意脚本插入到正常页面中被执行 | 上下文编码, CSP |
跨站点请求伪造 (CSRF)
详细解析:
CSRF 是一种强制已认证用户在其不知情的情况下发起恶意请求的技术。由于大多数 Web 应用依赖 cookies 来维持身份验证状态,因此 CSRF 攻击能够轻易伪装合法操作。
步骤:
- 攻击者诱导受害者点击链接或加载特定图像。
- 此动作触发了一个指向易受攻击网站的有效 HTTP 请求。
- 如果受害者当前处于登录状态,则该请求会被视为有效命令而被执行。
示例:
假设有银行转账接口 /transfer?amount=100&toAccount=attacker_account
, 当用户访问了攻击者的恶意站点时,可能会自动发出这样的 GET 请求,从而完成资金转移。
防御方法:
- 添加一次性令牌至每个重要请求,并由服务器端验证。
- 检查 Referer 头部以确认请求来源可信度。
文件上传漏洞
详细解析:
文件上传漏洞发生在开发者未能充分过滤用户上传的内容类型及时机情况下发生的安全隐患。一旦成功利用,就有可能实现远程代码执行(RCE)或其他破坏行为。
步骤:
- 提供一个看似无害却隐藏危险逻辑的文件(比如PHP木马).
- 成功上传之后尝试让服务端解释执行.
示例:
假如上传机制只简单检查扩展名为 .jpg
即认为安全,但实际上内部仍可能是 PHP 脚本形式存在的话,那么就可以轻松突破防线。
防御方法:
- 设置白名单限定允许上传的具体 MIME 类型.
- 执行额外扫描检测潜在威胁成分.
- 不直接保留原始命名路径以防目录遍历风险.
特点 | 描述 | 预防方法 |
---|---|---|
关键在于文件性质判断失误 | 导致非法文件得以存留并生效 | 白名单控制,MIME匹配,病毒查杀工具辅助 |
总结表格
攻击名称 | 特点 | 描述 | 预防方法 |
---|---|---|---|
SQL注入 | 动态构建SQL字符串 | 黑客可以通过构造特殊字符组合影响DB交互过程 | 参数绑定/预编译;严格输入验证 |
XSS | 客户端脚本植入 | 在网页内嵌入恶意JS片段造成连锁反应 | 输出转义;启用CSP |
CSRF | 冒充真实用户提交指令 | 让授权下的账户无意间做出违背意愿的动作 | 加密token随附关键交易环节 |
文件上传漏洞 | 错误识别所接收文档属性 | 授权后的不当权限授予使得任意格式均可落地 | 设定明确许可列表;二次审查 |