[security] Redirect external links to avoid Referer leakage.
This commit is contained in:
@@ -131,6 +131,7 @@
|
||||
- [export] Better handling of export to PHP array.
|
||||
- rfe #3158867 [privileges] No DROP DATABASE warning if you delete a user
|
||||
- [interface] Add link to documentation for status variables.
|
||||
- [security] Redirect external links to avoid Referer leakage.
|
||||
|
||||
3.3.10.0 (not yet released)
|
||||
- patch #3147400 [structure] Aria table size printed as unknown,
|
||||
|
@@ -702,7 +702,11 @@ class PMA_Message
|
||||
}
|
||||
}
|
||||
|
||||
$message = preg_replace($pattern, '<a href="\1" target="\2">', $message);
|
||||
if (substr($found[1], 0, 4) == 'http') {
|
||||
$message = preg_replace($pattern, '<a href="./url.php?url=\1" target="\2">', $message);
|
||||
} else {
|
||||
$message = preg_replace($pattern, '<a href="\1" target="\2">', $message);
|
||||
}
|
||||
}
|
||||
|
||||
return $message;
|
||||
|
@@ -192,7 +192,7 @@ if (top != self) {
|
||||
?>
|
||||
|
||||
<div class="container">
|
||||
<a href="http://www.phpmyadmin.net" target="_blank" class="logo"><?php
|
||||
<a href="./url.php?url=http://www.phpmyadmin.net" target="_blank" class="logo"><?php
|
||||
$logo_image = $GLOBALS['pmaThemeImage'] . 'logo_right.png';
|
||||
if (@file_exists($logo_image)) {
|
||||
echo '<img src="' . $logo_image . '" id="imLogo" name="imLogo" alt="phpMyAdmin" border="0" />';
|
||||
|
@@ -231,7 +231,7 @@ function Swekey_login($input_name, $input_go)
|
||||
?>
|
||||
function open_swekey_site()
|
||||
{
|
||||
window.open("http://phpmyadmin.net/auth_key");
|
||||
window.open("./url.php?url=http://phpmyadmin.net/auth_key");
|
||||
}
|
||||
|
||||
var input_username = document.getElementById("<?php echo $input_name; ?>");
|
||||
|
@@ -31,7 +31,7 @@ function initPBMSDatabase()
|
||||
$query = "select * from $target.pbms_metadata_header"; // If it exists this table will not contain much
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$result = PMA_DBI_query($query );
|
||||
if (! $result) {
|
||||
return FALSE;
|
||||
@@ -106,7 +106,7 @@ function checkBLOBStreamingPlugins()
|
||||
}
|
||||
unset($existing_plugins, $one_existing_plugin);
|
||||
}
|
||||
|
||||
|
||||
// set variable indicating BS plugin existence
|
||||
$PMA_Config->set('BLOBSTREAMING_PLUGINS_EXIST', $has_blobstreaming);
|
||||
|
||||
@@ -296,7 +296,7 @@ function PMA_BS_IsPBMSReference($bs_reference, $db_name)
|
||||
if (PMA_do_connect($db_name, FALSE) == FALSE) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
$ok = pbms_is_blob_reference($bs_reference);
|
||||
return $ok ;
|
||||
}
|
||||
@@ -391,8 +391,8 @@ function PMA_BS_IsTablePBMSEnabled($db_name, $tbl_name, $tbl_type)
|
||||
}
|
||||
|
||||
// This information should be cached rather than selecting it each time.
|
||||
//$query = "SELECT count(*) FROM information_schema.TABLES T, pbms.pbms_enabled E where T.table_schema = ". PMA_backquote($db_name) . " and T.table_name = ". PMA_backquote($tbl_name) . " and T.engine = E.name";
|
||||
$query = "SELECT count(*) FROM pbms.pbms_enabled E where E.name = '" . PMA_sqlAddslashes($tbl_type) . "'";
|
||||
//$query = "SELECT count(*) FROM information_schema.TABLES T, pbms.pbms_enabled E where T.table_schema = ". PMA_backquote($db_name) . " and T.table_name = ". PMA_backquote($tbl_name) . " and T.engine = E.name";
|
||||
$query = "SELECT count(*) FROM pbms.pbms_enabled E where E.name = '" . PMA_sqlAddslashes($tbl_type) . "'";
|
||||
$result = PMA_DBI_query($query);
|
||||
|
||||
$data = PMA_DBI_fetch_row($result);
|
||||
@@ -497,7 +497,7 @@ function PMA_BS_getURL($reference)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
$bs_url = 'http://' . $bs_server . '/' . rtrim($reference);
|
||||
$bs_url = './url.php?url=http://' . $bs_server . '/' . rtrim($reference);
|
||||
return $bs_url;
|
||||
}
|
||||
|
||||
|
@@ -476,7 +476,9 @@ if (! PMA_isValid($_REQUEST['token']) || $_SESSION[' PMA_token '] != $_REQUEST['
|
||||
/* for playing blobstreamable media */
|
||||
'media_type', 'custom_type', 'bs_reference',
|
||||
/* for changing BLOB repository file MIME type */
|
||||
'bs_db', 'bs_table', 'bs_ref', 'bs_new_mime_type'
|
||||
'bs_db', 'bs_table', 'bs_ref', 'bs_new_mime_type',
|
||||
/* URL redirector */
|
||||
'url'
|
||||
);
|
||||
/**
|
||||
* Require cleanup functions
|
||||
|
@@ -419,13 +419,13 @@ function PMA_showMySQLDocu($chapter, $link, $big_icon = false, $anchor = '', $ju
|
||||
}
|
||||
|
||||
if ($just_open) {
|
||||
return '<a href="' . $url . '" target="mysql_doc">';
|
||||
return '<a href="./url.php?url=' . $url . '" target="mysql_doc">';
|
||||
} elseif ($big_icon) {
|
||||
return '<a href="' . $url . '" target="mysql_doc"><img class="icon" src="' . $GLOBALS['pmaThemeImage'] . 'b_sqlhelp.png" width="16" height="16" alt="' . __('Documentation') . '" title="' . __('Documentation') . '" /></a>';
|
||||
return '<a href="./url.php?url=' . $url . '" target="mysql_doc"><img class="icon" src="' . $GLOBALS['pmaThemeImage'] . 'b_sqlhelp.png" width="16" height="16" alt="' . __('Documentation') . '" title="' . __('Documentation') . '" /></a>';
|
||||
} elseif ($GLOBALS['cfg']['ReplaceHelpImg']) {
|
||||
return '<a href="' . $url . '" target="mysql_doc"><img class="icon" src="' . $GLOBALS['pmaThemeImage'] . 'b_help.png" width="11" height="11" alt="' . __('Documentation') . '" title="' . __('Documentation') . '" /></a>';
|
||||
return '<a href="./url.php?url=' . $url . '" target="mysql_doc"><img class="icon" src="' . $GLOBALS['pmaThemeImage'] . 'b_help.png" width="11" height="11" alt="' . __('Documentation') . '" title="' . __('Documentation') . '" /></a>';
|
||||
} else {
|
||||
return '[<a href="' . $url . '" target="mysql_doc">' . __('Documentation') . '</a>]';
|
||||
return '[<a href="./url.php?url=' . $url . '" target="mysql_doc">' . __('Documentation') . '</a>]';
|
||||
}
|
||||
} // end of the 'PMA_showMySQLDocu()' function
|
||||
|
||||
@@ -2425,7 +2425,7 @@ function PMA_getDbLink($database = null)
|
||||
function PMA_externalBug($functionality, $component, $minimum_version, $bugref)
|
||||
{
|
||||
if ($component == 'mysql' && PMA_MYSQL_INT_VERSION < $minimum_version) {
|
||||
echo PMA_showHint(sprintf(__('The %s functionality is affected by a known bug, see %s'), $functionality, 'http://bugs.mysql.com/' . $bugref));
|
||||
echo PMA_showHint(sprintf(__('The %s functionality is affected by a known bug, see %s'), $functionality, './url.php?url=http://bugs.mysql.com/' . $bugref));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -681,7 +681,7 @@ class FormDisplay
|
||||
if ($test == 'Export') {
|
||||
$opt_name = substr($opt_name, 7);
|
||||
}
|
||||
return 'http://wiki.phpmyadmin.net/pma/Config#' . $opt_name;
|
||||
return './url.php?url=http://wiki.phpmyadmin.net/pma/Config#' . $opt_name;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -774,4 +774,4 @@ class FormDisplay
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
?>
|
||||
|
@@ -91,10 +91,14 @@ function PMA_lang_link_replace($link, $text)
|
||||
$separator = PMA_get_arg_separator('html');
|
||||
}
|
||||
|
||||
if (!preg_match('#^http://#', $link)) {
|
||||
if (!preg_match('#^https?://#', $link)) {
|
||||
$link = str_replace('&', $separator, $link);
|
||||
} elseif (defined('PMA_SETUP')) {
|
||||
$link = '../url.php?url=' . $link;
|
||||
} else {
|
||||
$link = './url.php?url=' . $link;
|
||||
}
|
||||
|
||||
return '<a href="' . $link . '">' . $text . '</a>';
|
||||
}
|
||||
?>
|
||||
?>
|
||||
|
@@ -235,7 +235,7 @@ if(isset($_GET['sql_query'])) {
|
||||
}
|
||||
|
||||
$message = new PMA_Message(__('This value is interpreted using %1$sstrftime%2$s, so you can use time formatting strings. Additionally the following transformations will happen: %3$s. Other text will be kept as is. See the %4$sFAQ%5$s for details.'));
|
||||
$message->addParam('<a href="http://php.net/strftime" target="documentation" title="'
|
||||
$message->addParam('<a href="./url.php?url=http://php.net/strftime" target="documentation" title="'
|
||||
. __('Documentation') . '">', false);
|
||||
$message->addParam('</a>', false);
|
||||
$message->addParam($trans);
|
||||
|
@@ -91,15 +91,15 @@ class PMA_StorageEngine_pbms extends PMA_StorageEngine
|
||||
function getPageDocumentation()
|
||||
{
|
||||
$output = '<p> Documentation and further information about PBMS can be found on ' . "\n"
|
||||
. '<a href="http://www.blobstreaming.org/" target="_blank">The PrimeBase Media Streaming home page</a>.<br><br>' . "\n"
|
||||
. '<a href="./url.php?url=http://www.blobstreaming.org/" target="_blank">The PrimeBase Media Streaming home page</a>.<br><br>' . "\n"
|
||||
. '<table id="PBMS_Related_Links" >' . "\n"
|
||||
. '<tr>' . "\n"
|
||||
. '<td>' . "\n"
|
||||
. '<p>' . "\n"
|
||||
. '<strong><font size="2"><b>Related Links</b></font></strong>' . "\n"
|
||||
. '<br>' . "\n"
|
||||
. '<a href="http://bpbdev.blogspot.com/" target="_blank">The PrimeBase Media Streaming Blog by Barry Leslie</a><br><br>' . "\n"
|
||||
. '<a href="http://www.primebase.com/xt" target="_blank">PrimeBase XT Home Page</a><br><br>' . "\n"
|
||||
. '<a href="./url.php?url=http://bpbdev.blogspot.com/" target="_blank">The PrimeBase Media Streaming Blog by Barry Leslie</a><br><br>' . "\n"
|
||||
. '<a href="./url.php?url=http://www.primebase.com/xt" target="_blank">PrimeBase XT Home Page</a><br><br>' . "\n"
|
||||
. '</font>' . "\n"
|
||||
. '</td>' . "\n"
|
||||
. '</tr>' . "\n"
|
||||
|
@@ -122,15 +122,15 @@ class PMA_StorageEngine_pbxt extends PMA_StorageEngine
|
||||
function getPageDocumentation()
|
||||
{
|
||||
$output = '<p> Documentation and further information about PBXT can be found on the ' . "\n"
|
||||
. '<a href="http://www.primebase.com/xt/" target="_blank">PrimeBase XT Home Page</a>.<br><br>' . "\n"
|
||||
. '<a href="./url.php?url=http://www.primebase.com/xt/" target="_blank">PrimeBase XT Home Page</a>.<br><br>' . "\n"
|
||||
. '<table id="PBMS_Related_Links" >' . "\n"
|
||||
. '<tr>' . "\n"
|
||||
. '<td>' . "\n"
|
||||
. '<p>' . "\n"
|
||||
. '<strong><font size="2"><b>Related Links</b></font></strong>' . "\n"
|
||||
. '<br>' . "\n"
|
||||
. '<a href="http://pbxt.blogspot.com/" target="_blank">The PrimeBase XT Blog by Paul McCullagh</a><br><br>' . "\n"
|
||||
. '<a href="http://www.blobstreaming.org/" target="_blank">The PrimeBase Media Streaming (PBMS) home page</a>.<br><br>' . "\n"
|
||||
. '<a href="./url.php?url=http://pbxt.blogspot.com/" target="_blank">The PrimeBase XT Blog by Paul McCullagh</a><br><br>' . "\n"
|
||||
. '<a href="./url.php?url=http://www.blobstreaming.org/" target="_blank">The PrimeBase Media Streaming (PBMS) home page</a>.<br><br>' . "\n"
|
||||
. '</font>' . "\n"
|
||||
. '</td>' . "\n"
|
||||
. '</tr>' . "\n"
|
||||
|
8
main.php
8
main.php
@@ -210,16 +210,16 @@ echo '<h2>phpMyAdmin</h2>';
|
||||
echo '<ul>';
|
||||
PMA_printListItem(__('Version information') . ': ' . PMA_VERSION, 'li_pma_version');
|
||||
PMA_printListItem(__('Documentation'), 'li_pma_docs', 'Documentation.html', null, '_blank');
|
||||
PMA_printListItem(__('Wiki'), 'li_pma_wiki', 'http://wiki.phpmyadmin.net', null, '_blank');
|
||||
PMA_printListItem(__('Wiki'), 'li_pma_wiki', './url.php?url=http://wiki.phpmyadmin.net', null, '_blank');
|
||||
|
||||
// does not work if no target specified, don't know why
|
||||
PMA_printListItem(__('Official Homepage'), 'li_pma_homepage', 'http://www.phpMyAdmin.net/', null, '_blank');
|
||||
PMA_printListItem(__('Official Homepage'), 'li_pma_homepage', './url.php?url=http://www.phpMyAdmin.net/', null, '_blank');
|
||||
?>
|
||||
<li><bdo xml:lang="en" dir="ltr">
|
||||
[<a href="changelog.php" target="_blank">ChangeLog</a>]
|
||||
[<a href="http://phpmyadmin.git.sourceforge.net/git/gitweb-index.cgi"
|
||||
[<a href="./url.php?url=http://phpmyadmin.git.sourceforge.net/git/gitweb-index.cgi"
|
||||
target="_blank">Git</a>]
|
||||
[<a href="http://sourceforge.net/mail/?group_id=23067"
|
||||
[<a href="./url.php?url=http://sourceforge.net/mail/?group_id=23067"
|
||||
target="_blank"><?php echo __('Mailing lists'); ?></a>]
|
||||
</bdo>
|
||||
</li>
|
||||
|
@@ -38,7 +38,7 @@ function takeThis(what){
|
||||
|
||||
<body id="bodythemes">
|
||||
<h1>phpMyAdmin - <?php echo __('Theme / Style'); ?></h1>
|
||||
<p><a href="http://www.phpmyadmin.net/home_page/themes.php#pma_<?php echo preg_replace('/([0-9]*)\.([0-9]*)\..*/', '\1_\2', PMA_VERSION); ?>"><?php echo __('Get more themes!'); ?></a></p>
|
||||
<p><a href="./url.php?url=http://www.phpmyadmin.net/home_page/themes.php#pma_<?php echo preg_replace('/([0-9]*)\.([0-9]*)\..*/', '\1_\2', PMA_VERSION); ?>"><?php echo __('Get more themes!'); ?></a></p>
|
||||
<?php
|
||||
$_SESSION['PMA_Theme_Manager']->printPreviews();
|
||||
?>
|
||||
|
18
url.php
Normal file
18
url.php
Normal file
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
/**
|
||||
* URL redirector to avoid leaking Referer with some sensitive information.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Gets core libraries and defines some variables
|
||||
*/
|
||||
require_once './libraries/common.inc.php';
|
||||
|
||||
PMA_checkParameters(array('url'));
|
||||
|
||||
if (! preg_match('/^https?:\/\/[^\n\r]*$/', $GLOBALS['url'])) {
|
||||
header('Location: ' . $cfg['PmaAbsoluteUri']);
|
||||
} else {
|
||||
header('Location: ' . $GLOBALS['url']);
|
||||
}
|
||||
?>
|
Reference in New Issue
Block a user