Skip to content
Extraits de code Groupes Projets
Valider 57ea8de1 rédigé par Thomas Steur's avatar Thomas Steur
Parcourir les fichiers

if a GET piwik.php is done without any parameter, still return a HTTP 200

parent c6ed2a5a
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -74,7 +74,9 @@ class Response ...@@ -74,7 +74,9 @@ class Response
$this->outputApiResponse($tracker); $this->outputApiResponse($tracker);
Common::printDebug("Logging disabled, display transparent logo"); Common::printDebug("Logging disabled, display transparent logo");
} elseif (!$tracker->hasLoggedRequests()) { } elseif (!$tracker->hasLoggedRequests()) {
Common::sendResponseCode(400); if (!$this->isHttpGetRequest() || !empty($_GET) || !empty($_POST)) {
Common::sendResponseCode(400);
}
Common::printDebug("Empty request => Piwik page"); Common::printDebug("Empty request => Piwik page");
echo "<a href='/'>Piwik</a> is a free/libre web <a href='http://piwik.org'>analytics</a> that lets you keep control of your data."; echo "<a href='/'>Piwik</a> is a free/libre web <a href='http://piwik.org'>analytics</a> that lets you keep control of your data.";
} else { } else {
...@@ -100,15 +102,20 @@ class Response ...@@ -100,15 +102,20 @@ class Response
private function outputAccessControlHeaders() private function outputAccessControlHeaders()
{ {
$requestMethod = isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : 'GET'; if (!$this->isHttpGetRequest()) {
if ($requestMethod !== 'GET') {
$origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : '*'; $origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : '*';
Common::sendHeader('Access-Control-Allow-Origin: ' . $origin); Common::sendHeader('Access-Control-Allow-Origin: ' . $origin);
Common::sendHeader('Access-Control-Allow-Credentials: true'); Common::sendHeader('Access-Control-Allow-Credentials: true');
} }
} }
private function isHttpGetRequest()
{
$requestMethod = isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : 'GET';
return strtoupper($requestMethod) === 'GET';
}
private function getOutputBuffer() private function getOutputBuffer()
{ {
return ob_get_contents(); return ob_get_contents();
......
...@@ -19,7 +19,6 @@ use Piwik\Tests\Framework\TestCase\IntegrationTestCase; ...@@ -19,7 +19,6 @@ use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
use Piwik\Tracker; use Piwik\Tracker;
use Piwik\Tracker\RequestSet; use Piwik\Tracker\RequestSet;
use Piwik\Tracker\Request; use Piwik\Tracker\Request;
use Piwik\Translate;
class TestTracker extends Tracker class TestTracker extends Tracker
{ {
......
...@@ -94,10 +94,21 @@ class TrackerResponseTest extends SystemTestCase ...@@ -94,10 +94,21 @@ class TrackerResponseTest extends SystemTestCase
$this->assertResponseCode(400, $url . '1'); // has to be 16 char, but is 17 now $this->assertResponseCode(400, $url . '1'); // has to be 16 char, but is 17 now
} }
public function test_response_ShouldReturnPiwikMessage_InCaseOfEmptyRequest() // See https://github.com/piwik/piwik/issues/7850 piwik.php is used by plugins and monitoring systems to test for Piwik installation.
// it is important to return a 200 if someone does a GET request with no parameters
public function test_response_ShouldReturnPiwikMessageWithHttp200_InCaseOfEmptyGETRequest()
{ {
$url = Fixture::getTrackerUrl(); $url = Fixture::getTrackerUrl();
$this->assertResponseCode(400, $url); $this->assertResponseCode(200, $url);
$expected = "<a href='/'>Piwik</a> is a free/libre web <a href='http://piwik.org'>analytics</a> that lets you keep control of your data.";
$this->assertHttpResponseText($expected, $url);
}
public function test_response_ShouldReturnPiwikMessageWithHttp400_InCaseOfInvalidRequestOrIfNothingIsTracked()
{
$url = Fixture::getTrackerUrl();
$this->assertResponseCode(400, $url . '?rec=1');
$expected = "<a href='/'>Piwik</a> is a free/libre web <a href='http://piwik.org'>analytics</a> that lets you keep control of your data."; $expected = "<a href='/'>Piwik</a> is a free/libre web <a href='http://piwik.org'>analytics</a> that lets you keep control of your data.";
$this->assertHttpResponseText($expected, $url); $this->assertHttpResponseText($expected, $url);
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter