跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
PHP黑名单过滤
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= PHP黑名单过滤 = '''PHP黑名单过滤'''是一种安全编程技术,用于防止恶意输入或攻击(如SQL注入、XSS攻击等)。其核心思想是定义一个“黑名单”,即不允许的字符、字符串或模式,并在处理用户输入时过滤或拒绝这些内容。与'''白名单过滤'''(仅允许已知安全的输入)相比,黑名单过滤灵活性更高,但可能遗漏未知攻击向量,因此通常需结合其他安全措施使用。 == 基本原理 == 黑名单过滤通过以下步骤实现: # 定义黑名单规则(如危险字符、SQL关键字、JavaScript代码片段等)。 # 对用户输入进行检查,若匹配黑名单规则,则进行过滤、转义或拒绝处理。 # 返回安全处理后的数据。 === 数学表示 === 黑名单过滤可以形式化为: <math> \text{Filter}(input) = \begin{cases} \text{reject} & \text{if } input \cap \text{Blacklist} \neq \emptyset \\ \text{accept} & \text{otherwise} \end{cases} </math> == 代码示例 == 以下是一个简单的PHP黑名单过滤实现,防止SQL注入和XSS攻击: <syntaxhighlight lang="php"> <?php function blacklistFilter($input) { // 定义黑名单规则(正则表达式) $blacklist = [ '/[\<\>\"\']/', // HTML标签和引号(防XSS) '/\b(union|select|insert|delete|drop|alter)\b/i', // SQL关键字(防注入) '/javascript:/i' // JavaScript协议(防XSS) ]; // 检查输入是否匹配黑名单 foreach ($blacklist as $pattern) { if (preg_match($pattern, $input)) { return false; // 输入不安全 } } return $input; // 输入安全 } // 示例输入 $userInput = "<script>alert('XSS')</script>"; $filteredInput = blacklistFilter($userInput); if ($filteredInput === false) { echo "检测到恶意输入!"; } else { echo "安全输入: " . htmlspecialchars($filteredInput); } ?> </syntaxhighlight> '''输出结果:''' <pre> 检测到恶意输入! </pre> == 实际应用场景 == === 案例1:表单输入过滤 === 用户注册时,过滤用户名中的特殊字符: <syntaxhighlight lang="php"> $username = "admin'--"; if (!blacklistFilter($username)) { die("用户名包含非法字符!"); } </syntaxhighlight> === 案例2:文件上传检查 === 禁止上传包含恶意扩展名的文件: <syntaxhighlight lang="php"> $blacklistExtensions = ['php', 'exe', 'sh']; $fileName = "malicious.php"; $extension = strtolower(pathinfo($fileName, PATHINFO_EXTENSION)); if (in_array($extension, $blacklistExtensions)) { die("禁止上传此类型文件!"); } </syntaxhighlight> == 优缺点分析 == {| class="wikitable" |+ 黑名单过滤的优缺点 ! 优点 !! 缺点 |- | 实现简单 || 可能遗漏未知攻击模式 |- | 灵活性高 || 维护成本高(需持续更新规则) |- | 适用于动态需求 || 误报风险(如正常输入包含黑名单词) |} == 进阶建议 == * '''结合白名单过滤''':对关键字段(如邮箱、电话号码)优先使用白名单。 * '''使用PHP内置函数''':如<code>htmlspecialchars()</code>、<code>mysqli_real_escape_string()</code>。 * '''定期更新规则''':跟踪最新安全威胁,动态调整黑名单。 == 可视化流程 == <mermaid> graph TD A[用户输入] --> B{是否匹配黑名单?} B -->|是| C[拒绝/过滤] B -->|否| D[允许] </mermaid> == 总结 == PHP黑名单过滤是基础但重要的安全措施,适合快速防御已知攻击。开发者应理解其局限性,并与其他安全技术(如参数化查询、CSRF令牌)结合使用。 [[Category:编程语言]] [[Category:PHP]] [[Category:PHP安全编程]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)