# PHP 安全进阶:从 SQL 注入到 SSRF

举报
yd_220371319 发表于 2026/10/13 22:29:19 2026/10/13
【摘要】 ## SQL 注入优先使用 PDO 预处理:```php$stmt = $pdo->prepare(    "SELECT * FROM users WHERE id = ?");$stmt->execute([$id]);```## XSSHTML 输出时:```phpecho htmlspecialchars(    $value,    ENT_QUOTES,    "UTF-8");...


## SQL 注入

优先使用 PDO 预处理:

```php
$stmt = $pdo->prepare(
    "SELECT * FROM users WHERE id = ?"
);
$stmt->execute([$id]);
```

## XSS

HTML 输出时:

```php
echo htmlspecialchars(
    $value,
    ENT_QUOTES,
    "UTF-8"
);
```

不同输出环境需要不同编码方式。

## CSRF

依赖 Cookie 自动认证的请求需要考虑 CSRF。

常见方案:

```text
CSRF Token
SameSite Cookie
Origin/Referer 校验
```

## SSRF

如果服务端提供:

```text
/fetch?url=https://example.com
```

却毫无限制地访问用户提供的 URL,就可能被诱导访问内部服务。

需要考虑:

```text
协议
DNS
私网地址
本机地址
重定向
DNS Rebinding
```

## 路径穿越

不要让用户直接控制服务器文件路径:

```php
readfile("/data/" . $_GET["file"]);
```

更稳妥的是:

```text
用户 ID
 ↓
数据库记录
 ↓
服务端决定真实路径
```

## 命令注入

如果必须调用系统程序,应尽量使用固定命令、白名单参数,并避免把用户输入直接拼接进 shell。

## 小结

安全的核心思想:

> 不可信数据跨越安全边界时,必须经过明确验证。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。