FIX Filtering the HTTP Header "Accept-Language".

This commit is contained in:
Laurent Destailleur 2019-09-24 13:54:52 +02:00
parent 9cfe1262bd
commit c53be23122
2 changed files with 21 additions and 2 deletions

View File

@ -88,11 +88,12 @@ class Translate
if (empty($srclang) || $srclang == 'auto') if (empty($srclang) || $srclang == 'auto')
{ {
// $_SERVER['HTTP_ACCEPT_LANGUAGE'] can be 'fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7,it;q=0.6' but can contains also malicious content
$langpref=empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])?'':$_SERVER['HTTP_ACCEPT_LANGUAGE']; $langpref=empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])?'':$_SERVER['HTTP_ACCEPT_LANGUAGE'];
$langpref=preg_replace("/;([^,]*)/i", "", $langpref); $langpref=preg_replace("/;([^,]*)/i", "", $langpref); // Remove the 'q=x.y,' part
$langpref=str_replace("-", "_", $langpref); $langpref=str_replace("-", "_", $langpref);
$langlist=preg_split("/[;,]/", $langpref); $langlist=preg_split("/[;,]/", $langpref);
$codetouse=$langlist[0]; $codetouse=preg_replace('/[^_a-zA-Z]/', '', $langlist[0]);
} }
else $codetouse=$srclang; else $codetouse=$srclang;

View File

@ -130,6 +130,24 @@ class SecurityTest extends PHPUnit\Framework\TestCase
print __METHOD__."\n"; print __METHOD__."\n";
} }
/**
* testSetLang
*
* @return string
*/
public function testSetLang()
{
global $conf;
$conf=$this->savconf;
$tmplangs = new Translate('', $conf);
$_SERVER['HTTP_ACCEPT_LANGUAGE'] = "' malicious text with quote";
$tmplangs->setDefaultLang('auto');
print __METHOD__.' $tmplangs->defaultlang='.$tmplangs->defaultlang."\n";
$this->assertEquals($tmplangs->defaultlang, 'malicioustextwithquote_MALICIOUSTEXTWITHQUOTE');
}
/** /**
* testGETPOST * testGETPOST
* *