| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395 |
- <?php
- /**
- * Zend Framework
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.txt.
- * It is also available through the world-wide-web at this URL:
- * http://framework.zend.com/license/new-bsd
- * If you did not receive a copy of the license and are unable to
- * obtain it through the world-wide-web, please send an email
- * to license@zend.com so we can send you a copy immediately.
- *
- * @category Zend
- * @package Zend_Http_Header
- * @subpackage UnitTests
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license http://framework.zend.com/license/new-bsd New BSD License
- * @version $Id$
- */
- /**
- * @see Zend_Http_Header_SetCookie
- */
- require_once 'Zend/Http/Header/SetCookie.php';
- /**
- * @see Zend_Controller_Response_HttpTestCase
- */
- require_once 'Zend/Controller/Response/HttpTestCase.php';
- /**
- * Zend_Http_Cookie unit tests
- *
- * @category Zend
- * @package Zend_Http_Cookie
- * @subpackage UnitTests
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license http://framework.zend.com/license/new-bsd New BSD License
- * @group Zend_Http
- * @group Zend_Http_Header
- * @group ZF-4520
- */
- class Zend_Http_Header_SetCookieTest extends PHPUnit_Framework_TestCase
- {
- /**
- * @group ZF2-254
- */
- public function testSetCookieConstructor()
- {
- $setCookieHeader = new Zend_Http_Header_SetCookie(
- 'myname', 'myvalue', 'Wed, 13-Jan-2021 22:23:01 GMT',
- '/accounts', 'docs.foo.com', true, true, 99, 9
- );
- $this->assertEquals('myname', $setCookieHeader->getName());
- $this->assertEquals('myvalue', $setCookieHeader->getValue());
- $this->assertEquals('Wed, 13-Jan-2021 22:23:01 GMT', $setCookieHeader->getExpires());
- $this->assertEquals('/accounts', $setCookieHeader->getPath());
- $this->assertEquals('docs.foo.com', $setCookieHeader->getDomain());
- $this->assertTrue($setCookieHeader->isSecure());
- $this->assertTrue($setCookieHeader->isHttpOnly());
- $this->assertEquals(99, $setCookieHeader->getMaxAge());
- $this->assertEquals(9, $setCookieHeader->getVersion());
- }
- public function testSetCookieFromStringCreatesValidSetCookieHeader()
- {
- $setCookieHeader = Zend_Http_Header_SetCookie::fromString('Set-Cookie: xxx');
- $this->assertTrue($setCookieHeader instanceof Zend_Http_Header_SetCookie);
- }
- public function testSetCookieFromStringCanCreateSingleHeader()
- {
- $setCookieHeader = Zend_Http_Header_SetCookie::fromString('Set-Cookie: myname=myvalue');
- $this->assertTrue($setCookieHeader instanceof Zend_Http_Header_SetCookie);
- $this->assertEquals('myname', $setCookieHeader->getName());
- $this->assertEquals('myvalue', $setCookieHeader->getValue());
- $setCookieHeader = Zend_Http_Header_SetCookie::fromString(
- 'set-cookie: myname=myvalue; Domain=docs.foo.com; Path=/accounts;'
- . 'Expires=Wed, 13-Jan-2021 22:23:01 GMT; Secure; HttpOnly'
- );
- $this->assertTrue($setCookieHeader instanceof Zend_Http_Header_SetCookie);
- $this->assertEquals('myname', $setCookieHeader->getName());
- $this->assertEquals('myvalue', $setCookieHeader->getValue());
- $this->assertEquals('docs.foo.com', $setCookieHeader->getDomain());
- $this->assertEquals('/accounts', $setCookieHeader->getPath());
- $this->assertEquals('Wed, 13-Jan-2021 22:23:01 GMT', $setCookieHeader->getExpires());
- $this->assertTrue($setCookieHeader->isSecure());
- $this->assertTrue($setCookieHeader->isHttponly());
- }
- public function testSetCookieFromStringCanCreateMultipleHeaders()
- {
- $setCookieHeaders = Zend_Http_Header_SetCookie::fromString(
- 'Set-Cookie: myname=myvalue, '
- . 'someothername=someothervalue; Domain=docs.foo.com; Path=/accounts;'
- . 'Expires=Wed, 13-Jan-2021 22:23:01 GMT; Secure; HttpOnly'
- );
- $this->assertTrue(is_array($setCookieHeaders));
- $setCookieHeader = $setCookieHeaders[0];
- $this->assertTrue($setCookieHeader instanceof Zend_Http_Header_SetCookie);
- $this->assertEquals('myname', $setCookieHeader->getName());
- $this->assertEquals('myvalue', $setCookieHeader->getValue());
- $setCookieHeader = $setCookieHeaders[1];
- $this->assertTrue($setCookieHeader instanceof Zend_Http_Header_SetCookie);
- $this->assertEquals('someothername', $setCookieHeader->getName());
- $this->assertEquals('someothervalue', $setCookieHeader->getValue());
- $this->assertEquals('Wed, 13-Jan-2021 22:23:01 GMT', $setCookieHeader->getExpires());
- $this->assertEquals('docs.foo.com', $setCookieHeader->getDomain());
- $this->assertEquals('/accounts', $setCookieHeader->getPath());
- $this->assertTrue($setCookieHeader->isSecure());
- $this->assertTrue($setCookieHeader->isHttponly());
- }
- public function testSetCookieGetFieldNameReturnsHeaderName()
- {
- $setCookieHeader = new Zend_Http_Header_SetCookie();
- $this->assertEquals('Set-Cookie', $setCookieHeader->getFieldName());
- }
- public function testSetCookieGetFieldValueReturnsProperValue()
- {
- $setCookieHeader = new Zend_Http_Header_SetCookie();
- $setCookieHeader->setName('myname');
- $setCookieHeader->setValue('myvalue');
- $setCookieHeader->setExpires('Wed, 13-Jan-2021 22:23:01 GMT');
- $setCookieHeader->setDomain('docs.foo.com');
- $setCookieHeader->setPath('/accounts');
- $setCookieHeader->setSecure(true);
- $setCookieHeader->setHttponly(true);
- $target = 'myname=myvalue; Expires=Wed, 13-Jan-2021 22:23:01 GMT;'
- . ' Domain=docs.foo.com; Path=/accounts;'
- . ' Secure; HttpOnly';
- $this->assertEquals($target, $setCookieHeader->getFieldValue());
- }
- public function testSetCookieToStringReturnsHeaderFormattedString()
- {
- $setCookieHeader = new Zend_Http_Header_SetCookie();
- $setCookieHeader->setName('myname');
- $setCookieHeader->setValue('myvalue');
- $setCookieHeader->setExpires('Wed, 13-Jan-2021 22:23:01 GMT');
- $setCookieHeader->setDomain('docs.foo.com');
- $setCookieHeader->setPath('/accounts');
- $setCookieHeader->setSecure(true);
- $setCookieHeader->setHttponly(true);
- $target = 'Set-Cookie: myname=myvalue; Expires=Wed, 13-Jan-2021 22:23:01 GMT;'
- . ' Domain=docs.foo.com; Path=/accounts;'
- . ' Secure; HttpOnly';
- $this->assertEquals($target, $setCookieHeader->toString());
- }
- public function testSetCookieCanAppendOtherHeadersInWhenCreatingString()
- {
- $setCookieHeader = new Zend_Http_Header_SetCookie();
- $setCookieHeader->setName('myname');
- $setCookieHeader->setValue('myvalue');
- $setCookieHeader->setExpires('Wed, 13-Jan-2021 22:23:01 GMT');
- $setCookieHeader->setDomain('docs.foo.com');
- $setCookieHeader->setPath('/accounts');
- $setCookieHeader->setSecure(true);
- $setCookieHeader->setHttponly(true);
- $appendCookie = new Zend_Http_Header_SetCookie('othername', 'othervalue');
- $headerLine = $setCookieHeader->toStringMultipleHeaders(array($appendCookie));
- $target = 'Set-Cookie: myname=myvalue; Expires=Wed, 13-Jan-2021 22:23:01 GMT;'
- . ' Domain=docs.foo.com; Path=/accounts;'
- . ' Secure; HttpOnly, othername=othervalue';
- $this->assertEquals($target, $headerLine);
- }
- /** Implmentation specific tests here */
-
- /**
- * ZF2-169
- *
- * @see http://framework.zend.com/issues/browse/ZF2-169
- */
- public function testZF2_169()
- {
- $cookie = 'Set-Cookie: leo_auth_token="example"; Version=1; Max-Age=1799; Expires=Mon, 20-Feb-2012 02:49:57 GMT; Path=/';
- $setCookieHeader = Zend_Http_Header_SetCookie::fromString($cookie);
- $this->assertEquals($cookie, $setCookieHeader->toString());
- }
- public function testGetFieldName()
- {
- $c = new Zend_Http_Header_SetCookie();
- $this->assertEquals('Set-Cookie', $c->getFieldName());
- }
-
- /**
- * @dataProvider validCookieWithInfoProvider
- */
- public function testGetFieldValue($cStr, $info, $expected)
- {
- $cookie = Zend_Http_Header_SetCookie::fromString($cStr);
- if (! $cookie instanceof Zend_Http_Header_SetCookie) {
- $this->fail("Failed creating a cookie object from '$cStr'");
- }
- $this->assertEquals($expected, $cookie->getFieldValue());
- $this->assertEquals($cookie->getFieldName() . ': ' . $expected, (string)$cookie);
- }
-
- /**
- * @dataProvider validCookieWithInfoProvider
- */
- public function testToString($cStr, $info, $expected)
- {
- $cookie = Zend_Http_Header_SetCookie::fromString($cStr);
- if (! $cookie instanceof Zend_Http_Header_SetCookie) {
- $this->fail("Failed creating a cookie object from '$cStr'");
- }
- $this->assertEquals($cookie->getFieldName() . ': ' . $expected, $cookie->toString());
- }
- /**
- * @dataProvider validCookieWithInfoProvider
- */
- public function testAddingAsRawHeaderToResponseObject($cStr, $info, $expected)
- {
- $response = new Zend_Controller_Response_HttpTestCase();
- $cookie = Zend_Http_Header_SetCookie::fromString($cStr);
- $response->setRawHeader($cookie);
- $this->assertContains((string)$cookie, $response->sendHeaders());
- }
- /**
- * @group GH-295
- */
- public function testMultipleCookies()
- {
- $setCookieHeader = new Zend_Http_Header_SetCookie('othername1', 'othervalue1');
- $appendCookie = new Zend_Http_Header_SetCookie('othername2', 'othervalue2');
- $headerLine = $setCookieHeader->toStringMultipleHeaders(array($appendCookie));
- $response = new Zend_Controller_Response_HttpTestCase();
- $response->setRawHeader($headerLine);
- $this->assertEquals((array)$headerLine, $response->sendHeaders());
- }
-
- /**
- * Provide valid cookie strings with information about them
- *
- * @return array
- */
- public static function validCookieWithInfoProvider()
- {
- $now = time();
- $yesterday = $now - (3600 * 24);
- return array(
- array(
- 'Set-Cookie: justacookie=foo; domain=example.com',
- array(
- 'name' => 'justacookie',
- 'value' => 'foo',
- 'domain' => 'example.com',
- 'path' => '/',
- 'expires' => null,
- 'secure' => false,
- 'httponly'=> false
- ),
- 'justacookie=foo; Domain=example.com'
- ),
- array(
- 'Set-Cookie: expires=tomorrow; secure; path=/Space Out/; expires=Tue, 21-Nov-2006 08:33:44 GMT; domain=.example.com',
- array(
- 'name' => 'expires',
- 'value' => 'tomorrow',
- 'domain' => '.example.com',
- 'path' => '/Space Out/',
- 'expires' => strtotime('Tue, 21-Nov-2006 08:33:44 GMT'),
- 'secure' => true,
- 'httponly'=> false
- ),
- 'expires=tomorrow; Expires=Tue, 21-Nov-2006 08:33:44 GMT; Domain=.example.com; Path=/Space Out/; Secure'
- ),
- array(
- 'Set-Cookie: domain=unittests; expires=' . gmdate('D, d-M-Y H:i:s', $now) . ' GMT; domain=example.com; path=/some%20value/',
- array(
- 'name' => 'domain',
- 'value' => 'unittests',
- 'domain' => 'example.com',
- 'path' => '/some%20value/',
- 'expires' => $now,
- 'secure' => false,
- 'httponly'=> false
- ),
- 'domain=unittests; Expires=' . gmdate('D, d-M-Y H:i:s', $now) . ' GMT; Domain=example.com; Path=/some%20value/'
- ),
- array(
- 'Set-Cookie: path=indexAction; path=/; domain=.foo.com; expires=' . gmdate('D, d-M-Y H:i:s', $yesterday) . ' GMT',
- array(
- 'name' => 'path',
- 'value' => 'indexAction',
- 'domain' => '.foo.com',
- 'path' => '/',
- 'expires' => $yesterday,
- 'secure' => false,
- 'httponly'=> false
- ),
- 'path=indexAction; Expires=' . gmdate('D, d-M-Y H:i:s', $yesterday) . ' GMT; Domain=.foo.com; Path=/'
- ),
- array(
- 'Set-Cookie: secure=sha1; secure; SECURE; domain=some.really.deep.domain.com',
- array(
- 'name' => 'secure',
- 'value' => 'sha1',
- 'domain' => 'some.really.deep.domain.com',
- 'path' => '/',
- 'expires' => null,
- 'secure' => true,
- 'httponly'=> false
- ),
- 'secure=sha1; Domain=some.really.deep.domain.com; Secure'
- ),
- array(
- 'Set-Cookie: justacookie=foo; domain=example.com; httpOnly',
- array(
- 'name' => 'justacookie',
- 'value' => 'foo',
- 'domain' => 'example.com',
- 'path' => '/',
- 'expires' => null,
- 'secure' => false,
- 'httponly'=> true
- ),
- 'justacookie=foo; Domain=example.com; HttpOnly'
- ),
- array(
- 'Set-Cookie: PHPSESSID=123456789+abcd%2Cef; secure; domain=.localdomain; path=/foo/baz; expires=Tue, 21-Nov-2006 08:33:44 GMT;',
- array(
- 'name' => 'PHPSESSID',
- 'value' => '123456789+abcd%2Cef',
- 'domain' => '.localdomain',
- 'path' => '/foo/baz',
- 'expires' => 'Tue, 21-Nov-2006 08:33:44 GMT',
- 'secure' => true,
- 'httponly'=> false
- ),
- 'PHPSESSID=123456789%2Babcd%252Cef; Expires=Tue, 21-Nov-2006 08:33:44 GMT; Domain=.localdomain; Path=/foo/baz; Secure'
- ),
- array(
- 'Set-Cookie: myname=myvalue; Domain=docs.foo.com; Path=/accounts; Expires=Wed, 13-Jan-2021 22:23:01 GMT; Secure; HttpOnly',
- array(
- 'name' => 'myname',
- 'value' => 'myvalue',
- 'domain' => 'docs.foo.com',
- 'path' => '/accounts',
- 'expires' => 'Wed, 13-Jan-2021 22:23:01 GMT',
- 'secure' => true,
- 'httponly'=> true
- ),
- 'myname=myvalue; Expires=Wed, 13-Jan-2021 22:23:01 GMT; Domain=docs.foo.com; Path=/accounts; Secure; HttpOnly'
- ),
- );
- }
- public function invalidCookieComponentValues()
- {
- return array(
- 'setName' => array('setName', "This\r\nis\nan\revil\r\n\r\nvalue"),
- 'setValue' => array('setValue', "This\r\nis\nan\revil\r\n\r\nvalue"),
- 'setDomain' => array('setDomain', "This\r\nis\nan\revil\r\n\r\nvalue"),
- 'setPath' => array('setPath', "This\r\nis\nan\revil\r\n\r\nvalue"),
- );
- }
- /**
- * @group ZF2015-04
- * @dataProvider invalidCookieComponentValues
- */
- public function testDoesNotAllowCRLFAttackVectorsViaSetters($setter, $value)
- {
- $cookie = new Zend_Http_Header_SetCookie();
- $this->setExpectedException('Zend_Http_Header_Exception_InvalidArgumentException');
- $cookie->{$setter}($value);
- }
- }
|