0

0

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

絕刀狂花

絕刀狂花

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

|

219人浏览过

|

来源于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 发起 fetchXMLHttpRequest 提交 POST,也得手动把 YII_CSRF_TOKEN 放进请求头或 body,否则控制器里 $request->validateCsrfToken() 会失败

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

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

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

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

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

星月写作
星月写作

专为网络小说、 剧本创作者打造的AI增效工具

下载
  • 排序字段必须白名单校验: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_httponlysession.cookie_secure 要在 php.iniini_set() 中开启,否则 JS 可读取 session cookie,XSS 成功率飙升
  • 生产环境必须启用 Strict-Transport-Security(HSTS),否则 HTTPS 可被降级劫持,CSRF Token 和登录态都可能泄露

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

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

1133

2023.10.12

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

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

340

2023.10.27

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

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

381

2024.02.23

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

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

2152

2024.03.06

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

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

380

2024.03.06

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

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

1663

2024.04.07

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

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

585

2024.04.29

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

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

440

2024.04.29

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

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

精品课程

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号