Skip to content

Commit

Permalink
adding domain and server name validators
Browse files Browse the repository at this point in the history
  • Loading branch information
viveleroi committed May 26, 2010
1 parent 6e12c7a commit 223fe1d
Show file tree
Hide file tree
Showing 2 changed files with 177 additions and 0 deletions.
67 changes: 67 additions & 0 deletions Peregrine.php
Expand Up @@ -462,6 +462,29 @@ public function isUri($key){
}


/**
* Determines if the string is a valid domain name only, no http or port allowed
*
* @param string $key
* @return boolean
*/
public function isTopLevelDomain($key){

$regex = '&^';
$regex .= '([-a-z0-9/~;:@=+$,.!*()\']+@)?'; // userinfo
$regex .= '(';
$regex .= '((?:[^\W_]((?:[^\W_]|-){0,61}[^\W_])?\.)+[a-zA-Z]{2,6}\.?)'; // domain name
$regex .= '|';
$regex .= '([0-9]{1,3}(\.[0-9]{1,3})?(\.[0-9]{1,3})?(\.[0-9]{1,3})?)'; // OR ipv4
$regex .= ')';
$regex .= '$&i';

$res = preg_match($regex, $this->getRaw($key), $matches);
return (bool) $res;

}


/***********************************************************
* SANITIZING RETURN METHODS
***********************************************************/
Expand Down Expand Up @@ -668,6 +691,50 @@ public function getPath($key = false, $default = NULL){
}


/**
* Returns characters generally allowed within a query string
* Note: the string may also be validates a full URI/URL if you use
* the getUri method, however this is more specific for query strings
* without the rest of the url.
*
* @param string $key
* @param string $default
* @return mixed
*/
public function getQueryString($key = false, $default = NULL){
$default = $default === NULL ? false : $default;
if($this->isSetAndNotEmpty($key)){
return preg_replace('/[^a-zA-Z0-9_:~\.\/-?{}\[\]]/', '', $this->getKey($key));
}
return $default;
}


/**
* Returns characters which are allowed in the apache SERVER_NAME variable
*
* @param string $key
* @param string $default
* @return mixed
*/
public function getServerName($key = false, $default = NULL){
$default = $default === NULL ? false : $default;
if($this->isSetAndNotEmpty($key)){
if($this->isIP($key)){
return $this->getKey($key);
}
elseif($this->isTopLevelDomain($key)){
return $this->getKey($key);
}
// for stuff like "localhost"
elseif($this->isAlnum($key)){
return $this->getKey($key);
}
}
return $default;
}


/**
* Returns characters generally allowed within a file system path
*
Expand Down
110 changes: 110 additions & 0 deletions PeregrineTest.php
Expand Up @@ -336,6 +336,48 @@ public function test_getUri() {
}


/**
*
*/
public function test_isTopLevelDomain() {
$my_arr = array(
'http://www.google.com',
'bob',
'www.domain.com:80/users/~bob',
'domain.com:80/a_path',
'www.domain.com:80',
'domain.com');
$arr = Peregrine::sanitize( $my_arr );
$this->assertEquals(false, $arr->isTopLevelDomain(0));
$this->assertEquals(false, $arr->isTopLevelDomain(1));
$this->assertEquals(false, $arr->isTopLevelDomain(2));
$this->assertEquals(false, $arr->isTopLevelDomain(3));
$this->assertEquals(false, $arr->isTopLevelDomain(4));
$this->assertEquals(true, $arr->isTopLevelDomain(5));
}


/**
*
*/
public function test_getTopLevelDomain() {
$my_arr = array(
'http://www.google.com',
'bob',
'www.domain.com:80/users/~bob',
'domain.com:80/a_path',
'www.domain.com:80',
'domain.com');
$arr = Peregrine::sanitize( $my_arr );
$this->assertEquals('', $arr->getTopLevelDomain(0));
$this->assertEquals('', $arr->getTopLevelDomain(1));
$this->assertEquals('', $arr->getTopLevelDomain(2));
$this->assertEquals('', $arr->getTopLevelDomain(3));
$this->assertEquals('', $arr->getTopLevelDomain(4));
$this->assertEquals('domain.com', $arr->getTopLevelDomain(5));
}


/***********************************************************
* SANITIZING RETURN METHOD TESTS
***********************************************************/
Expand Down Expand Up @@ -628,6 +670,74 @@ public function test_isPath() {
}


/**
*
*/
public function test_getQueryString() {
$my_arr = array('12345','A path','/_apath','/a~path','/usr/local/bin','/a/subfolder?test=test','/a/subfolder?test[]={elem:value}','','\'SQL\'');
$arr = Peregrine::sanitize( $my_arr );
$this->assertEquals('12345', $arr->getQueryString(0));
$this->assertEquals('Apath', $arr->getQueryString(1));
$this->assertEquals('/_apath', $arr->getQueryString(2));
$this->assertEquals('/a~path', $arr->getQueryString(3));
$this->assertEquals('/usr/local/bin', $arr->getQueryString(4));
$this->assertEquals('/a/subfolder?test=test', $arr->getQueryString(5));
$this->assertEquals('/a/subfolder?test[]={elem:value}', $arr->getQueryString(6));
$this->assertEquals(false, $arr->getQueryString(7));
$this->assertEquals('SQL', $arr->getQueryString(8));
}


/**
*
*/
public function test_isQueryString() {
$my_arr = array('12345','A path','/_apath','/a~path','/usr/local/bin','/a/subfolder?test=test','/a/subfolder?test[]={elem:value}','','\'SQL\'');
$arr = Peregrine::sanitize( $my_arr );
$this->assertEquals(true, $arr->isQueryString(0));
$this->assertEquals(false, $arr->isQueryString(1));
$this->assertEquals(true, $arr->isQueryString(2));
$this->assertEquals(true, $arr->isQueryString(3));
$this->assertEquals(true, $arr->isQueryString(4));
$this->assertEquals(true, $arr->isQueryString(5));
$this->assertEquals(true, $arr->isQueryString(6));
$this->assertEquals(false, $arr->isQueryString(7));
$this->assertEquals(false, $arr->isQueryString(8));
}


/**
*
*/
public function test_getServerName() {
$my_arr = array('12345','domain.com','www.domain.com','?var=test','localhost','\'INSERT INTO\'','127.0.0.1');
$arr = Peregrine::sanitize( $my_arr );
$this->assertEquals('12345', $arr->getServerName(0));
$this->assertEquals('domain.com', $arr->getServerName(1));
$this->assertEquals('www.domain.com', $arr->getServerName(2));
$this->assertEquals('', $arr->getServerName(3));
$this->assertEquals('localhost', $arr->getServerName(4));
$this->assertEquals('', $arr->getServerName(5));
$this->assertEquals('127.0.0.1', $arr->getServerName(6));
}


/**
*
*/
public function test_isServerName() {
$my_arr = array('12345','domain.com','www.domain.com','?var=test','localhost','\'INSERT INTO\'','127.0.0.1');
$arr = Peregrine::sanitize( $my_arr );
$this->assertEquals(true, $arr->isServerName(0));
$this->assertEquals(true, $arr->isServerName(1));
$this->assertEquals(true, $arr->isServerName(2));
$this->assertEquals(false, $arr->isServerName(3));
$this->assertEquals(true, $arr->isServerName(4));
$this->assertEquals(false, $arr->isServerName(5));
$this->assertEquals(true, $arr->isServerName(6));
}


/**
*
*/
Expand Down

0 comments on commit 223fe1d

Please sign in to comment.