开发安全之:Dangerous Function: Unsafe Regular Expression

Overview

无法安全地使用函数 split()。不应该使用此函数。

Details

某些函数不论如何使用都有危险性。这一类函数通常是在没有考虑安全问题的情况下就执行了。 在这种情况下,您正在使用的危险函数为 dingdan_pc_list.php 的第 65 行中的 split()。 split() 函数不安全,因为它是已弃用的 POSIX 正则表达式函数系列的一部分,该函数系列会在遇到 null 字节时停止读取输入字符串。由于 PHP 允许字符串中包含 null 字节,因此在某些情况下使用这些函数可能很危险,应完全避免。

例 1:根据给出的 URL http://www.example.com/index.php?param=...,如果 URL 参数 param(代替“...”传递)与表示“零个或更多字母数字字符”的 POSIX 正则表达式 '^[[:alnum:]]*$' 相匹配,则 index.php 中 php 的以下片段会将其输出到屏幕中。 <?php $pattern = '^[[:alnum:]]*$'; $string = $_GET['param']; if (ereg($pattern, $string)) { echo($string); } ?> 虽然Example 1 可在使用字母数字输入的情况下正常运行,但由于使用不安全的 ereg() 函数来验证受破坏的输入,因此可能会通过注入 null 字节发动 Cross-Site Scripting (XSS) 攻击。如果为 param 传递一个值,而该值包含一个有效的字母数字字符串,并后跟 null 字节和 <script> 标签(例如 "Hello123%00<script>alert("XSS")</script>"),则 ereg($pattern, $string) 仍会返回 true,因为 ereg() 函数在读取输入字符串(从左至右)时会忽略 null 字节字符后面的所有内容。在此示例中,这意味着 null 字节之后注入的 <script> 标签将显示给用户并进行求值。

Recommendations

永不应该使用那些无法安全使用的函数。如果这些函数中的任何一个出现在新的或是继承代码中,则必须删除该函数并用相应的安全函数进行取代。 split() 函数及其相关的 POSIX 正则表达式函数自 PHP 5.3.0 起已被弃用,并被更加安全的 Perl 兼容正则表达式 (PCRE) 函数代替。 对于“说明”部分中介绍的Example 1,更加安全的解决方案是使用较新的 PCRE 函数 preg_match() 以及 PCRE 格式正则表达式,而不是使用较旧的 POSIX 函数 ereg()。PHP 文档提供了从较旧的 POSIX 正则表达式函数到较新且更安全的 PCRE 正则表达式函数的相应映射,其网址为 http://php.net/manual/en/reference.pcre.pattern.posix.php。POSIX 函数 sql_regcase() 是一个例外,因为它没有对等的 PCRE 函数,因此应完全避免。

相关推荐

  1. 开发安全:SQL Injection

    2024-01-17 12:10:04       23 阅读
  2. 开发安全:Path Manipulation

    2024-01-17 12:10:04       39 阅读
  3. 开发安全:XML Injection

    2024-01-17 12:10:04       30 阅读
  4. 开发安全:Header Manipulation

    2024-01-17 12:10:04       26 阅读
  5. 开发安全:split()安全漏洞

    2024-01-17 12:10:04       33 阅读
  6. 开发安全:Access Control: Database

    2024-01-17 12:10:04       36 阅读
  7. 开发安全:System Information Leak: External

    2024-01-17 12:10:04       32 阅读
  8. 开发安全Dangerous File Inclusion

    2024-01-17 12:10:04       27 阅读
  9. 开发安全:Server-Side Request Forgery

    2024-01-17 12:10:04       30 阅读
  10. 开发安全:Cross-Site Scripting: DOM

    2024-01-17 12:10:04       29 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-17 12:10:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-17 12:10:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-17 12:10:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-17 12:10:04       18 阅读

热门阅读

  1. Vue键盘按键别名/事件说明及案例

    2024-01-17 12:10:04       30 阅读
  2. 使用jarsigner给jar文件签名的5个步骤

    2024-01-17 12:10:04       31 阅读
  3. JVM调优开启开启ZGC参数

    2024-01-17 12:10:04       33 阅读
  4. 自动驾驶模拟器

    2024-01-17 12:10:04       34 阅读
  5. ssh:connect to host github.com port 22: Connection timed out

    2024-01-17 12:10:04       28 阅读
  6. 126. Word Ladder II

    2024-01-17 12:10:04       36 阅读
  7. 【Leetcode】2719. 统计整数数目

    2024-01-17 12:10:04       30 阅读
  8. C++客户端服务器TCP创建

    2024-01-17 12:10:04       30 阅读