讲师中心 微信公众号
AI工具推荐 视频效率加速

Yii2框架的安全防护怎么配置_XSS和CSRF攻击防范措施【实战】

胖晨姑娘_4104

胖晨姑娘_4104

发布时间:2026-03-11 16:09:35

|

239人浏览过

|

来源于php中文网

原创

CSRF防护需显式启用enableCsrfValidation并联动令牌生成、前端嵌入、后端验证;cookieValidationKey须保密;表单必含csrfInput;XSS须用HtmlPurifier白名单过滤;SQL注入需白名单校验动态字段并严格参数绑定;HTTP安全头与Cookie属性须手动配置。

yii2框架的安全防护怎么配置_xss和csrf攻击防范措施【实战】

CSRF 防护必须开,且不能只靠配置

Yii2 的 CSRF 防护默认是关的,enableCsrfValidation 必须显式设为 true,否则所有表单都裸奔。但光配这一项远远不够——它只是开关,真正起作用依赖三个联动环节:令牌生成、前端嵌入、后端验证。

  • cookieValidationKey 必须设置且保密,它是 CSRF 令牌签名的基础;留空或用默认值等于形同虚设
  • 表单里必须有 Html::csrfInput() 或手动写 <input type="hidden" name="<?= $request->csrfParam ?>" value="<?= $request->getCsrfToken() ?>">,漏掉就直接 400
  • 非 POST 表单(比如带 method="get" 的搜索)不会自动校验,但若用 JS 发起 fetch 或 XMLHttpRequest 提交 POST,也得手动把 YII_CSRF_TOKEN 放进请求头或 body,否则控制器里 $request->validateCsrfToken() 会失败

XSS 输出转义不能只靠 Html::encode()

对纯文本内容,Html::encode($userInput) 足够安全;但电商场景中,商品描述、富文本评论、后台编辑器输出等,往往需要保留部分 HTML 标签(如 <p></p>、<strong></strong>),这时硬编码会把整个结构搞成乱码,而完全不处理又埋下 XSS。

  • 必须用 HtmlPurifier::process($html) 替代简单转义,它基于白名单过滤,能剔除 <script></script>、onerror、javascript: 等危险成分
  • 注意性能:HtmlPurifier 解析开销大,别在高频接口(如商品列表页)里每次调用;建议缓存净化结果,或用 Redis 存净化后的 HTML
  • 别信前端过滤——用户绕过 JS 校验直接发请求,后端照样得处理原始输入;所有输出到页面的变量,只要来源含用户提交,就得走净化或转义

SQL 注入防护不是“用了 ActiveRecord 就万事大吉”

Active Record 默认用 PDO 预处理,确实挡住绝大多数拼接式注入;但开发者常在边界处翻车:比如动态字段排序、条件字段名、原生 SQL 拼接、或用 createCommand() 手写查询时图省事直接插变量。

Yii Framework 2.0.51
Yii Framework 2.0.51

Yii Framework 2.0.51 官方 Basic 应用模板,适合旧项目兼容、升级验证和开发测试。

下载
  • 排序字段必须白名单校验:if (!in_array($orderBy, ['name', 'price', 'created_at'])) { throw new BadRequestHttpException(); },绝不能直接拼进 ORDER BY :orderBy
  • 原生查询务必用参数绑定:createCommand("SELECT * FROM product WHERE status = :status")->bindValue(':status', $status),而不是 "WHERE status = '$status'"
  • DAO 查询构建器里,andFilterWhere() 和 andFilterWhere() 是安全的,但 addSelect() 或 from() 如果传入用户可控字符串,一样会出问题

HTTP 安全头和 Cookie 设置容易被忽略

CSRF 和 XSS 防护再严,如果响应头没设好,攻击面依然敞开。这些配置不在 Yii 主逻辑里,得手动加在入口文件或中间件里,上线前极易遗漏。

  • 在 web/index.php 开头加:header('X-Content-Type-Options: nosniff')、header('X-Frame-Options: DENY')、header('X-XSS-Protection: 1; mode=block')
  • session.cookie_httponly 和 session.cookie_secure 要在 php.ini 或 ini_set() 中开启,否则 JS 可读取 session cookie,XSS 成功率飙升
  • 生产环境必须启用 Strict-Transport-Security(HSTS),否则 HTTPS 可被降级劫持,CSRF Token 和登录态都可能泄露

安全配置不是一次打钩就完事的事。比如 cookieValidationKey 换了会导致所有现有会话失效;HtmlPurifier 规则改了可能误杀合法标签;HSTS 头一旦加上,浏览器会强制记很久——这些变动都要测回归,不能只看“功能跑通”。

热门AI工具

更多
火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

4543

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

951

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

1189

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

6521

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

3283

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

6480

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

8881

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

1210

2024.04.29

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Yii Framework 2.0 API 官方文档
Yii Framework 2.0 API 官方文档

共0课时 | 0人学习

Yii2.0框架开发实战视频教程
Yii2.0框架开发实战视频教程

共22课时 | 9.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn