当我们处理用户输入的url时,需要当心用户输入不合法的危险协议,同时,当我们需要输出到页面中时,我们要对URL经过HTML编码处理,so下面两个函数可以使用
drupal_strip_dangerous_protocols($uri);
check_url($uri);
去除危险的schemes,使用drupal_strip_dangerous_protocols();
drupal7代码如下:
function drupal_strip_dangerous_protocls($uri){ static $allowed_protocols; if( !isset( $allowed_protocols ) ){ $allowed_protocols = array_flip(variable_get('filter_allowed_protocols',array( 'ftp','http','https','irc','mailto','news','nntp','rtsp','sftp','ssh','tel','telnet','webcal' ))); } do{ $before = $uri; $colonpos = strpos( $uri ,':' ); if($colonpos > 0){ $protocol = substr( $uri,0,$colonpos ); //当协议中出现? # 则不认识是url的scheme部分 if( preg_match( '![/?#]!',$protocol ) ){ break; } if( !isset( $allowed_protocols[strtolower($protocol)] ) ){ $uri = substr( $uri,$colonpos + 1 ); } } }while($before != $uri); return $uri;}
上面这个函数可以去除如javascript:开始的uri,这个函数我们可以使用在需要输出用户输入的url的时候。它被用作check_url()或filter_xss()函数的一部,做为html编码内容返回;也可单独使用,作为字符串传给t()、l()、drupal_attribute()、check_plain()等函数使用。
当需要做为HTML代码输出到页面时,可以是check_url($uri);
drupal7代码如下:
function check_url($uri){ return check_plian(drupal_strip_dangerous_protocols($uri));}
案例参考:
$a = check_url('javascript://www.baidu.com/a/b/c?dd=javascripr:');print_r($a);// //www.baidu.com/a/b/c?dd=javascripr:<script>alert(1)</script>
以上代码仅供参考,详情请参考drupal7API文档。