Update Security.
This commit is contained in:
		
							parent
							
								
									c60f9ff4d3
								
							
						
					
					
						commit
						1a034041ab
					
				| @ -62,6 +62,7 @@ from snek.webdav import WebdavApplication | ||||
| from snek.system.template import sanitize_html | ||||
| from snek.sgit import GitApplication | ||||
| SESSION_KEY = b"c79a0c5fda4b424189c427d28c9f7c34" | ||||
| from snek.system.template import whitelist_attributes | ||||
| 
 | ||||
| 
 | ||||
| @web.middleware | ||||
| @ -285,9 +286,9 @@ class Application(BaseApplication): | ||||
|      | ||||
|     async def handle_test(self, request): | ||||
| 
 | ||||
|         return await self.render_template( | ||||
|         return await whitelist_attributes(self.render_template( | ||||
|             "test.html", request, context={"name": "retoor"} | ||||
|         ) | ||||
|         )) | ||||
| 
 | ||||
|     async def handle_http_get(self, request: web.Request): | ||||
|         url = request.query.get("url") | ||||
| @ -359,6 +360,8 @@ class Application(BaseApplication): | ||||
| 
 | ||||
|         self.jinja2_env.loader = self.original_loader | ||||
|          | ||||
|         #rendered.text = whitelist_attributes(rendered.text) | ||||
|         #rendered.headers['Content-Lenght'] = len(rendered.text) | ||||
|         return rendered | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -1,4 +1,5 @@ | ||||
| from snek.system.service import BaseService | ||||
| from snek.system.template import whitelist_attributes | ||||
| 
 | ||||
| 
 | ||||
| class ChannelMessageService(BaseService): | ||||
| @ -28,6 +29,7 @@ class ChannelMessageService(BaseService): | ||||
|         try: | ||||
|             template = self.app.jinja2_env.get_template("message.html") | ||||
|             model["html"] = template.render(**context) | ||||
|             model["html"] = whitelist_attributes(model["html"]) | ||||
|         except Exception as ex: | ||||
|             print(ex, flush=True) | ||||
| 
 | ||||
|  | ||||
| @ -121,6 +121,23 @@ def set_link_target_blank(text): | ||||
|      | ||||
|     return str(soup) | ||||
| 
 | ||||
| SAFE_ATTRIBUTES = { | ||||
|     'href', 'src', 'alt', 'title', 'width', 'height', 'style', 'id', 'class',  | ||||
|     'rel', 'type', 'name', 'value', 'placeholder', 'aria-hidden', 'aria-label', 'srcset' | ||||
| } | ||||
| 
 | ||||
| def whitelist_attributes(html): | ||||
|     soup = BeautifulSoup(html, 'html.parser') | ||||
| 
 | ||||
|     for tag in soup.find_all(): | ||||
|         if isinstance(tag, Tag): | ||||
|             attrs = dict(tag.attrs) | ||||
|             for attr in list(attrs): | ||||
|                 # Check if attribute is in the safe list or is a data-* attribute | ||||
|                 if not (attr in SAFE_ATTRIBUTES or attr.startswith('data-')): | ||||
|                     del tag.attrs[attr] | ||||
|     return str(soup) | ||||
| 
 | ||||
| 
 | ||||
| def embed_youtube(text): | ||||
|     soup = BeautifulSoup(text, "html.parser") | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user