You are here

Drupal专业开发指南 第20章 安全的处理URLs

g089h515r806 的头像
Submitted by g089h515r806 on 星期四, 2009-08-27 13:08

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

如果你想判断一个URL是否合法,你可以使用valid_url()。它将检查http, https, 和 ftp URL的语法,并检查非法字符;如果URL通过了测试,那么它返回TRUE。这是一个便捷的方式,用来确保提交的URLs不包含javascript协议。
 
警告 仅仅通过语法检查的URL并不一定安全!
 
如果你使用URL——例如,在一个查询字符串中——来传递一些信息的话,你可以使用drupal_urlencode()来传递转义了的字符。调用drupal_urlencode()对斜杠,反斜杠,符号&进行编码,以兼容Drupal的简洁URL,接着调用PHP的rawurlencode()函数。函数drupal_urlencode()并不比直接调用rawurlencode()更安全,但是它可以方便的对字符串进行编码,以适应Apache的mod_rewrite模块。
 
提示 drupal_urlencode()是对PHP函数封装的一个例子:你可以直接调用PHP的urlencode(),但这样你将失去由Drupal为你负责一个函数的好处。类似的字符串封装函数可参看unicode.inc;例如,使用drupal_strlen()来代替PHP函数strlen()。
 老葛的Drupal培训班 Think in Drupal

Drupal版本: