clean_param() now handles PARAM_URL

This commit is contained in:
martinlanghoff
2005-01-25 06:06:51 +00:00
parent bc7ba277ec
commit 13e3dfb091
+53 -1
View File
@@ -54,7 +54,8 @@ define('PARAM_NOTAGS', 0x08);
define('PARAM_FILE', 0x10);
define('PARAM_PATH', 0x20);
define('PARAM_HOST', 0x40); // FQDN or IPv4 dotted quad
define('PARAM_URL', 0x80);
//define('PARAM_LOCALURL',????); // need something that implies PARAM_URL
/// PARAMETER HANDLING ////////////////////////////////////////////////////
@@ -92,6 +93,8 @@ function clean_param($param, $options) {
/// Given a parameter and a bitfield of options, this function
/// will clean it up and give it the required type, etc.
global $CFG;
if (!$options) {
return $param; // Return raw value
}
@@ -159,6 +162,55 @@ function clean_param($param, $options) {
}
}
if ($options & PARAM_URL) { // allow safe ftp, http, mailto urls
include_once($CFG->dirroot . '/lib/validateurlsyntax.php');
//
// Parameters to validateurlsyntax()
//
// s? scheme is optional
// H? http optional
// S? https optional
// F? ftp optional
// E? mailto optional
// u- user section not allowed
// P- password not allowed
// a? address optional
// I? Numeric IP address optional (can use IP or domain)
// p- port not allowed -- restrict to default port
// f? "file" path section optional
// q? query section optional
// r? fragment (anchor) optional
//
if (!empty($param) && validateUrlSyntax($param, 's?H?S?F?E?u-P-a?I?p-f?q?r?')) {
// all is ok, param is respected
} else {
$param =''; // not really ok
}
}
/*
if ($options & PARAM_LOCALURL) {
// assume we passed the PARAM_URL test...
// allow http absolute, root relative and relative URLs within wwwroot
if (!empty($param)) {
if (preg_match(':^/:', $param)) {
// root-relative, ok!
} elseif (preg_match('/^'.preg_quote($CFG->wwwroot).'/i',$param)) {
// absolute, and matches our wwwroot
} else {
// relative - let's make sure there are no tricks
if (validateUrlSyntax($param, 's-u-P-a-p-f+q?r?')) {
// looks ok.
} else {
$param = '';
}
}
}
}
*/
return $param;
}