diff --git src/wp-includes/functions.php src/wp-includes/functions.php
index 6dbc510..b3fddfd 100644
|
|
|
function wp_original_referer_field( $echo = true, $jump_back_to = 'current' ) {
|
| 1517 | 1517 | * @return false|string False on failure. Referer URL on success. |
| 1518 | 1518 | */ |
| 1519 | 1519 | function wp_get_referer() { |
| 1520 | | if ( ! function_exists( 'wp_validate_redirect' ) ) |
| | 1520 | if ( ! function_exists( 'wp_validate_redirect' ) ) { |
| 1521 | 1521 | return false; |
| 1522 | | $ref = false; |
| 1523 | | if ( ! empty( $_REQUEST['_wp_http_referer'] ) ) |
| 1524 | | $ref = wp_unslash( $_REQUEST['_wp_http_referer'] ); |
| 1525 | | elseif ( ! empty( $_SERVER['HTTP_REFERER'] ) ) |
| 1526 | | $ref = wp_unslash( $_SERVER['HTTP_REFERER'] ); |
| | 1522 | } |
| | 1523 | |
| | 1524 | $ref = wp_get_raw_referer(); |
| 1527 | 1525 | |
| 1528 | 1526 | if ( $ref && $ref !== wp_unslash( $_SERVER['REQUEST_URI'] ) && $ref !== home_url() . wp_unslash( $_SERVER['REQUEST_URI'] ) ) { |
| 1529 | 1527 | return wp_validate_redirect( $ref, false ); |
| … |
… |
function wp_get_referer() {
|
| 1533 | 1531 | } |
| 1534 | 1532 | |
| 1535 | 1533 | /** |
| | 1534 | * Retrieve unvalidated referer from '_wp_http_referer' or HTTP referer. |
| | 1535 | * |
| | 1536 | * Do not use for redirects, use wp_get_referer() instead. |
| | 1537 | * |
| | 1538 | * @since 4.5.0 |
| | 1539 | * |
| | 1540 | * @return string|bool Referer URL on success, false on failure. |
| | 1541 | */ |
| | 1542 | function wp_get_raw_referer() { |
| | 1543 | if ( ! empty( $_REQUEST['_wp_http_referer'] ) ) { |
| | 1544 | return wp_unslash( $_REQUEST['_wp_http_referer'] ); |
| | 1545 | } else if ( ! empty( $_SERVER['HTTP_REFERER'] ) ) { |
| | 1546 | return wp_unslash( $_SERVER['HTTP_REFERER'] ); |
| | 1547 | } |
| | 1548 | |
| | 1549 | return false; |
| | 1550 | } |
| | 1551 | |
| | 1552 | /** |
| 1536 | 1553 | * Retrieve original referer that was posted, if it exists. |
| 1537 | 1554 | * |
| 1538 | 1555 | * @since 2.0.4 |
diff --git tests/phpunit/tests/functions/referer.php tests/phpunit/tests/functions/referer.php
index 053e578..9769acc 100644
|
|
|
|
| 6 | 6 | * @group functions.php |
| 7 | 7 | */ |
| 8 | 8 | class Tests_Functions_Referer extends WP_UnitTestCase { |
| 9 | | private $request = array(); |
| 10 | | private $server = array(); |
| 11 | | |
| 12 | 9 | public function setUp() { |
| 13 | 10 | parent::setUp(); |
| 14 | 11 | |
| 15 | | $this->server = $_SERVER; |
| 16 | | $this->request = $_REQUEST; |
| 17 | | } |
| 18 | | |
| 19 | | public function tearDown() { |
| 20 | | parent::tearDown(); |
| 21 | | |
| 22 | | $_SERVER = $this->server; |
| 23 | | $_REQUEST = $this->request; |
| | 12 | $_SERVER['HTTP_REFERER'] = ''; |
| | 13 | $_SERVER['REQUEST_URI'] = ''; |
| | 14 | $_REQUEST['_wp_http_referer'] = ''; |
| 24 | 15 | } |
| 25 | 16 | |
| 26 | 17 | public function _fake_subfolder_install() { |
| … |
… |
class Tests_Functions_Referer extends WP_UnitTestCase {
|
| 122 | 113 | $this->assertSame( 'http://another.example.org/test.php?id=123', wp_get_referer() ); |
| 123 | 114 | remove_filter( 'allowed_redirect_hosts', array( $this, 'filter_allowed_redirect_hosts' ) ); |
| 124 | 115 | } |
| | 116 | |
| | 117 | /** |
| | 118 | * @ticket 27152 |
| | 119 | */ |
| | 120 | public function test_raw_referer_empty( ) { |
| | 121 | $this->assertFalse( wp_get_raw_referer() ); |
| | 122 | } |
| | 123 | |
| | 124 | /** |
| | 125 | * @ticket 27152 |
| | 126 | */ |
| | 127 | public function test_raw_referer( ) { |
| | 128 | $_SERVER['HTTP_REFERER'] = addslashes( 'http://example.com/foo?bar' ); |
| | 129 | $this->assertSame( 'http://example.com/foo?bar', wp_get_raw_referer() ); |
| | 130 | } |
| | 131 | |
| | 132 | /** |
| | 133 | * @ticket 27152 |
| | 134 | */ |
| | 135 | public function test_raw_referer_from_request( ) { |
| | 136 | $_REQUEST['_wp_http_referer'] = addslashes( 'http://foo.bar/baz' ); |
| | 137 | $this->assertSame( 'http://foo.bar/baz', wp_get_raw_referer() ); |
| | 138 | } |
| | 139 | |
| | 140 | /** |
| | 141 | * @ticket 27152 |
| | 142 | */ |
| | 143 | public function test_raw_referer_both( ) { |
| | 144 | $_SERVER['HTTP_REFERER'] = addslashes( 'http://example.com/foo?bar' ); |
| | 145 | $_REQUEST['_wp_http_referer'] = addslashes( 'http://foo.bar/baz' ); |
| | 146 | $this->assertSame( 'http://foo.bar/baz', wp_get_raw_referer() ); |
| | 147 | } |
| 125 | 148 | } |