Show More
@@ -34,6 +34,8 b' from mako.template import Template as Ma' | |||
|
34 | 34 | |
|
35 | 35 | from docutils.core import publish_parts |
|
36 | 36 | from docutils.parsers.rst import directives |
|
37 | from docutils import writers | |
|
38 | from docutils.writers import html4css1 | |
|
37 | 39 | import markdown |
|
38 | 40 | |
|
39 | 41 | from rhodecode.lib.markdown_ext import GithubFlavoredMarkdownExtension |
@@ -46,6 +48,31 b' log = logging.getLogger(__name__)' | |||
|
46 | 48 | DEFAULT_COMMENTS_RENDERER = 'rst' |
|
47 | 49 | |
|
48 | 50 | |
|
51 | class CustomHTMLTranslator(writers.html4css1.HTMLTranslator): | |
|
52 | """ | |
|
53 | Custom HTML Translator used for sandboxing potential | |
|
54 | JS injections in ref links | |
|
55 | """ | |
|
56 | ||
|
57 | def visit_reference(self, node): | |
|
58 | if 'refuri' in node.attributes: | |
|
59 | refuri = node['refuri'] | |
|
60 | if ':' in refuri: | |
|
61 | prefix, link = refuri.lstrip().split(':', 1) | |
|
62 | if prefix == 'javascript': | |
|
63 | # we don't allow javascript type of refs... | |
|
64 | node['refuri'] = 'javascript:alert("SandBoxedJavascript")' | |
|
65 | ||
|
66 | # old style class requires this... | |
|
67 | return html4css1.HTMLTranslator.visit_reference(self, node) | |
|
68 | ||
|
69 | ||
|
70 | class RhodeCodeWriter(writers.html4css1.Writer): | |
|
71 | def __init__(self): | |
|
72 | writers.Writer.__init__(self) | |
|
73 | self.translator_class = CustomHTMLTranslator | |
|
74 | ||
|
75 | ||
|
49 | 76 | def relative_links(html_source, server_path): |
|
50 | 77 | if not html_source: |
|
51 | 78 | return html_source |
@@ -341,7 +368,7 b' class MarkupRenderer(object):' | |||
|
341 | 368 | directives.register_directive(k, v) |
|
342 | 369 | |
|
343 | 370 | parts = publish_parts(source=source, |
|
344 |
writer |
|
|
371 | writer=RhodeCodeWriter(), | |
|
345 | 372 | settings_overrides=docutils_settings) |
|
346 | 373 | |
|
347 | 374 | return parts['html_title'] + parts["fragment"] |
General Comments 0
You need to be logged in to leave comments.
Login now