mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2025-02-25 18:55:31 -06:00
Ensure Python escaping matched JS escaping and fix a minor XSS issue in the Query Tool that required superuser access to trigger. Fixes #4378
This commit is contained in:
parent
644624eabe
commit
ebb5e3fe65
@ -39,4 +39,5 @@ Bug fixes
|
|||||||
| `Bug #4362 <https://redmine.postgresql.org/issues/4362>`_ - Remove additional "SETOF" included when generating CREATE scripts for trigger functions.
|
| `Bug #4362 <https://redmine.postgresql.org/issues/4362>`_ - Remove additional "SETOF" included when generating CREATE scripts for trigger functions.
|
||||||
| `Bug #4365 <https://redmine.postgresql.org/issues/4365>`_ - Fix help links for backup globals and backup server.
|
| `Bug #4365 <https://redmine.postgresql.org/issues/4365>`_ - Fix help links for backup globals and backup server.
|
||||||
| `Bug #4367 <https://redmine.postgresql.org/issues/4367>`_ - Fix an XSS issue seen in View/Edit data mode if a column name includes HTML.
|
| `Bug #4367 <https://redmine.postgresql.org/issues/4367>`_ - Fix an XSS issue seen in View/Edit data mode if a column name includes HTML.
|
||||||
|
| `Bug #4378 <https://redmine.postgresql.org/issues/4378>`_ - Ensure Python escaping matched JS escaping and fix a minor XSS issue in the Query Tool that required superuser access to trigger.
|
||||||
| `Bug #4380 <https://redmine.postgresql.org/issues/4380>`_ - Ensure that both columns and partitions can be edited at the same time in the table dialog.
|
| `Bug #4380 <https://redmine.postgresql.org/issues/4380>`_ - Ensure that both columns and partitions can be edited at the same time in the table dialog.
|
@ -22,6 +22,31 @@ from pgadmin.utils.exception import ConnectionLost, SSHTunnelConnectionLost,\
|
|||||||
CryptKeyMissing
|
CryptKeyMissing
|
||||||
|
|
||||||
|
|
||||||
|
def underscore_escape(text):
|
||||||
|
"""
|
||||||
|
This function mimics the behaviour of underscore js escape function
|
||||||
|
The html escaped by jinja is not compatible for underscore unescape
|
||||||
|
function
|
||||||
|
:param text: input html text
|
||||||
|
:return: escaped text
|
||||||
|
"""
|
||||||
|
html_map = {
|
||||||
|
'&': "&",
|
||||||
|
'<': "<",
|
||||||
|
'>': ">",
|
||||||
|
'"': """,
|
||||||
|
'`': "`",
|
||||||
|
"'": "'"
|
||||||
|
}
|
||||||
|
|
||||||
|
# always replace & first
|
||||||
|
for c, r in sorted(html_map.items(),
|
||||||
|
key=lambda x: 0 if x[0] == '&' else 1):
|
||||||
|
text = text.replace(c, r)
|
||||||
|
|
||||||
|
return text
|
||||||
|
|
||||||
|
|
||||||
def is_version_in_range(sversion, min_ver, max_ver):
|
def is_version_in_range(sversion, min_ver, max_ver):
|
||||||
assert (max_ver is None or isinstance(max_ver, int))
|
assert (max_ver is None or isinstance(max_ver, int))
|
||||||
assert (min_ver is None or isinstance(min_ver, int))
|
assert (min_ver is None or isinstance(min_ver, int))
|
||||||
|
@ -30,6 +30,8 @@ from pgadmin.utils.driver import get_driver
|
|||||||
from pgadmin.utils.exception import ConnectionLost, SSHTunnelConnectionLost
|
from pgadmin.utils.exception import ConnectionLost, SSHTunnelConnectionLost
|
||||||
from pgadmin.utils.preferences import Preferences
|
from pgadmin.utils.preferences import Preferences
|
||||||
from pgadmin.settings import get_setting
|
from pgadmin.settings import get_setting
|
||||||
|
from pgadmin.browser.utils import underscore_escape
|
||||||
|
|
||||||
|
|
||||||
query_tool_close_session_lock = Lock()
|
query_tool_close_session_lock = Lock()
|
||||||
|
|
||||||
@ -304,7 +306,7 @@ def panel(trans_id, is_query_tool, editor_title):
|
|||||||
_=gettext,
|
_=gettext,
|
||||||
uniqueId=trans_id,
|
uniqueId=trans_id,
|
||||||
is_query_tool=is_query_tool,
|
is_query_tool=is_query_tool,
|
||||||
editor_title=editor_title,
|
editor_title=underscore_escape(editor_title),
|
||||||
script_type_url=sURL,
|
script_type_url=sURL,
|
||||||
is_desktop_mode=app.PGADMIN_RUNTIME,
|
is_desktop_mode=app.PGADMIN_RUNTIME,
|
||||||
is_linux=is_linux_platform,
|
is_linux=is_linux_platform,
|
||||||
|
@ -313,7 +313,7 @@ define('pgadmin.datagrid', [
|
|||||||
var queryToolPanel = pgBrowser.docker.addPanel('frm_datagrid', wcDocker.DOCK.STACKED, propertiesPanel[0]);
|
var queryToolPanel = pgBrowser.docker.addPanel('frm_datagrid', wcDocker.DOCK.STACKED, propertiesPanel[0]);
|
||||||
|
|
||||||
// Set panel title and icon
|
// Set panel title and icon
|
||||||
queryToolPanel.title('<span title="'+panel_tooltip+'">'+panel_title+'</span>');
|
queryToolPanel.title('<span title="'+_.escape(panel_tooltip)+'">'+_.escape(panel_title)+'</span>');
|
||||||
queryToolPanel.icon(panel_icon);
|
queryToolPanel.icon(panel_icon);
|
||||||
queryToolPanel.focus();
|
queryToolPanel.focus();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user