# PHP 安全进阶:从 SQL 注入到 SSRF
【摘要】 ## 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)