• ‘);
        // Turn tag list into an array so we can pass it as a parameter.
        $allowed_tags = preg_split(’/s+|<|>/’, $tags, -1, PREG_SPLIT_NO_EMPTY));
        return filter_xss($value, $allowed_tags);
        }
    1. 注意:作为安全性的一个练习,你可以拿出你自己的一些定制模块,来追踪进入系统了用户输入的存储,一定要保证在进行逻辑处理之前先对用户输入进行清理,以保证安全性。

      使用filter_xss_admin()

      有时你想让你的模块为后台管理页面生成 HTML。由于我们对后台管理页面进行了访问控制,所以我们可以假定这些可以访问后台管理页面的用户比普通用户更可信。你可以为后台管理页面建立一个特定 的过滤器并使用过滤器系统,但是这有点麻烦。因此,Drupal 提供了函数 filter_xss_admin()。它使用一组更加自由的允许的标签,简单的对 filter_xss() 做了封装,除了 和 标签以外,它包含了所有的其它标签。使用它的一个例子是在主题中展示站点的宗旨(mission):

      if (drupal_is_front_page()) {
      $mission = filter_xss_admin(theme_get_setting(’mission’));
      }

      只有在管理设置页面才可以设置站点的宗旨,而只有超级用户和具有“administer site configuration(管理站点配置)”权限的人才可以访问这一页面,所以在这里使用 filter_xss_admin() 就比较合适。

      安全的处理URLs

      模块常常处理用户提交的 URLs 并展示它们。我们需要一些机制来确保用户提供的值确实是一个合法的 URL。Drupal 提供了函数 check_url(),它实际上是仅仅对 filter_xss_bad_protocol() 做了封装。它通过检查来确保 URL 中的协议是该 Drupal 站点所允许的协议(参看“使用 filter_xss()”部分的第4点),并使用 check_plain() 来处理 URL。

      如果你想决定一个 URL 是否合法,你可以使用 valid_url()。它将检查 http、https、和 ftp URL 的语法,并检查非法字符;如果 URL 通过了测试,那么它返回 TRUE。这是一个快速的方式用来确保提交的 URLs 不包含 javascript 协议。

      警告:仅仅通过语法检查的 URL 并不一定安全!

      如果你使用 URL — 例如,在一个查询字符串中 — 来传递一些信息的话,你可以使用 drupal_urlencode() 来传递转义了的字符。它是一个封装了 PHP 函数的例子:你可以直接调用 PHP 的 urlencode(),但这样你将失去由 Drupal 为你负责一个函数的好处。类似的字符串封装函数参看 unicode.inc;例如,使用 drupal_strlen() 来代替 PHP 函数 strlen()。