当前位置: 首页 > news >正文

php多种方法实现xss过滤

1. 使用 htmlspecialchars() 函数

htmlspecialchars() 是一个PHP内置函数,用于将特殊字符转换为HTML实体,从而防止浏览器将其解释为HTML或脚本代码。

<?phpfunction sanitizeInput($input) {// 将特殊字符转换为HTML实体return htmlspecialchars($input, ENT_QUOTES, 'UTF-8');
}// 示例
$userInput = '<script>alert("XSS")</script>';
$safeInput = sanitizeInput($userInput);echo "Sanitized Input: " . $safeInput;
// 输出: Sanitized Input: &lt;script&gt;alert(&quot;XSS&quot;)&lt;/script&gt;?>

2. 使用 htmlentities() 函数

htmlentities() 类似于 htmlspecialchars(),但会将所有适用的字符转换为HTML实体。

<?phpfunction sanitizeInputWithEntities($input) {return htmlentities($input, ENT_QUOTES, 'UTF-8');
}// 示例
$userInput = '<img src=x onerror=alert("XSS")>';
$safeInput = sanitizeInputWithEntities($userInput);echo "Sanitized Input: " . $safeInput;
// 输出: Sanitized Input: &lt;img src=x onerror=alert(&quot;XSS&quot;)&gt;?>

3. 自定义过滤函数

在某些情况下,你可能需要自定义过滤逻辑,例如只允许特定的HTML标签或属性。以下是一个简单的示例,只允许<b><i>标签:

<?phpfunction customSanitize($input) {// 允许 <b> 和 <i> 标签return strip_tags($input, '<b><i>');
}// 示例
$userInput = '<b>Bold</b> <script>alert("XSS")</script> <i>Italic</i>';
$safeInput = customSanitize($userInput);echo "Custom Sanitized Input: " . $safeInput;
// 输出: Custom Sanitized Input: <b>Bold</b>  <i>Italic</i>?>

4. 内容安全策略(CSP)

除了过滤输入,还可以通过设置内容安全策略(CSP)来减轻XSS攻击的影响。CSP是一种浏览器安全机制,通过HTTP头来限制资源加载和执行。

<?php// 在PHP中设置CSP头
header("Content-Security-Policy: default-src 'self'; script-src 'self';");?>

我的个人PHP项目:

PHP全文检索引擎 WindSearch: https://github.com/rock365/windsearch

请帮我点个star~谢谢你!

相关文章:

  • 工厂模式具体应用在什么场景?
  • End-to-End从混沌到秩序:基于LLM的Pipeline将非结构化数据转化为知识图谱
  • 【计算机视觉】三维视觉项目 - Colmap二维图像重建三维场景
  • 第二模块·语法迁移篇 —— 第七章 指针的消亡与引用的新生:从内存操作到对象访问的革命
  • 商标起名换了暗示词,通过初审!
  • Linux系统中的网络管理
  • SQL系列:常用函数
  • 每日OJ_牛客_最小差值_排序_C++_Java
  • ESP-ADF外设子系统深度解析:esp_peripherals组件架构与核心设计(显示输出类外设之LCD)
  • 深入理解前端安全:CSRF与XSS攻击详解
  • 在小米AX6000中通过米家控制tailscale
  • 使用ref和refs获取DOM元素和组件方法,使用$nextTick解决Vue异步更新的逻辑下无法获取DOM的问题
  • 力扣面试150题-- 存在重复元素 II和最长连续序列
  • 系统架构设计师:计算机组成与体系结构(如CPU、存储系统、I/O系统)案例分析与简答题、详细解析与评分要点
  • 中间件--ClickHouse-12--案例-1-日志分析和监控
  • 如何0基础学stm32?
  • redis和lua为什么能实现事务
  • 智能语音备忘录:SpeechRecognition与gTTS的奇妙融合
  • 在swiftui项目中使用WKWebView加载自定义脚本文件
  • WebSocket介绍
  • 电影“名场面”被制成表情包在网站上传播,网站运营者被判赔5500元
  • 中国墨西哥商会副执行主席:深耕中国市场18年,对未来充满信心
  • 00后为购演唱会门票转账近16万元“解封”银行卡,民警及时追回
  • 上海与丰田汽车签署战略合作协议,雷克萨斯纯电动汽车项目落子金山
  • 上交所召开私募机构座谈会,与会机构:中国资产具备显著估值修复和提升潜力,将坚定持有
  • C909飞机开启越南商业运营