diff --git a/myapp/models/model_etl_pipeline.py b/myapp/models/model_etl_pipeline.py index c192d4aa..d80c7e87 100644 --- a/myapp/models/model_etl_pipeline.py +++ b/myapp/models/model_etl_pipeline.py @@ -38,7 +38,10 @@ def __repr__(self): @property def etl_pipeline_url(self): pipeline_url="/etl_pipeline_modelview/api/web/" +str(self.id) - return Markup(f'{self.describe}') + # Escape the describe field to prevent XSS + from wtforms.widgets.core import escape_html + safe_describe = escape_html(self.describe) + return Markup(f'{safe_describe}') def clone(self): diff --git a/myapp/models/model_job.py b/myapp/models/model_job.py index e8021a86..826adf34 100644 --- a/myapp/models/model_job.py +++ b/myapp/models/model_job.py @@ -196,7 +196,10 @@ def __repr__(self): @property def pipeline_url(self): pipeline_url="/pipeline_modelview/api/web/" +str(self.id) - return Markup(f'{self.describe}') + # Escape the describe field to prevent XSS + from wtforms.widgets.core import escape_html + safe_describe = escape_html(self.describe) + return Markup(f'{safe_describe}') @property def run_pipeline(self): diff --git a/myapp/models/model_nni.py b/myapp/models/model_nni.py index 18d8974b..ccdeadc2 100644 --- a/myapp/models/model_nni.py +++ b/myapp/models/model_nni.py @@ -87,12 +87,14 @@ def run(self): @property def describe_url(self): + from wtforms.widgets.core import escape_html + safe_describe = escape_html(self.describe) expand = json.loads(self.expand) if self.expand else {} status = expand.get('status','') if status=='online': - return Markup(f'{self.describe}') + return Markup(f'{safe_describe}') else: - return self.describe + return safe_describe # @property diff --git a/myapp/models/model_notebook.py b/myapp/models/model_notebook.py index 980c4dc3..306c178e 100644 --- a/myapp/models/model_notebook.py +++ b/myapp/models/model_notebook.py @@ -83,7 +83,9 @@ def name_url(self): else: url = "/notebook/" + self.namespace + "/" + self.name + "/lab?#" + self.mount # url = '/notebook/jupyter/%s/lab/tree/mnt/%s'%(self.name,self.created_by.username) - return Markup(f'{self.name}') + from wtforms.widgets.core import escape_html + safe_name = escape_html(self.name) + return Markup(f'{safe_name}') @property def ide_type_html(self): diff --git a/myapp/views/view_notebook.py b/myapp/views/view_notebook.py index c4cf56a9..585f06ec 100644 --- a/myapp/views/view_notebook.py +++ b/myapp/views/view_notebook.py @@ -308,7 +308,10 @@ def template_str(src_str): notebook.project = project notebook.project_id = project.id notebook.name = name - notebook.describe = label + # notebook.describe = label + # TODO: 新增字段用于渲染阶段单独转义 + from wtforms.widgets.core import escape_html + notebook.describe = escape_html(label) notebook.images = images notebook.ide_type = 'jupyter' notebook.working_dir = ''