diff --git a/examples/iframe_injector.py b/examples/iframe_injector.py index fc38b136d..ad844f197 100644 --- a/examples/iframe_injector.py +++ b/examples/iframe_injector.py @@ -14,7 +14,7 @@ def response(context, flow): if flow.request.host in context.iframe_url: return with decoded(flow.response): # Remove content encoding (gzip, ...) - html = BeautifulSoup(flow.response.content) + html = BeautifulSoup(flow.response.content, "lxml") if html.body: iframe = html.new_tag( "iframe", diff --git a/test/mitmproxy/test_examples.py b/test/mitmproxy/test_examples.py index 5d1a18ed7..c134ec30f 100644 --- a/test/mitmproxy/test_examples.py +++ b/test/mitmproxy/test_examples.py @@ -9,6 +9,7 @@ from . import tservers, tutils from examples import ( add_header, custom_contentviews, + iframe_injector, modify_form, modify_querystring, modify_response_body, @@ -16,7 +17,9 @@ from examples import ( class DummyContext(object): - pass + + def log(self, *args, **kwargs): + pass def test_load_scripts(): @@ -81,3 +84,15 @@ def test_custom_contentviews(): _, fmt = pig("test!") assert any('esttay!' in val[0][1] for val in fmt) assert not pig("gobbledygook") + + +def test_iframe_injector(): + ctx = DummyContext() + tutils.raises(ValueError, iframe_injector.start, ctx, []) + + flow = tutils.tflow(resp=netutils.tresp(content="Kungfu Panda 3")) + ctx.iframe_url = "http://example.org/evil_iframe" + iframe_injector.response(ctx, flow) + + content = flow.response.content + assert 'iframe' in content and ctx.iframe_url in content