From 7f10f0f7664d474c1be82bf668829e3b736a3d2b Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Sun, 9 Aug 2020 09:03:17 -0700 Subject: [PATCH] Fix for security issue #918 --- datasette/templates/query.html | 2 +- tests/test_canned_queries.py | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/datasette/templates/query.html b/datasette/templates/query.html index 0882e142..c6574f31 100644 --- a/datasette/templates/query.html +++ b/datasette/templates/query.html @@ -52,7 +52,7 @@ {% endif %}

- {% if canned_query %}{% endif %} + {% if canned_write %}{% endif %}

diff --git a/tests/test_canned_queries.py b/tests/test_canned_queries.py index 365bcdfa..9607d792 100644 --- a/tests/test_canned_queries.py +++ b/tests/test_canned_queries.py @@ -12,6 +12,7 @@ def canned_write_client(): "databases": { "data": { "queries": { + "canned_read": {"sql": "select * from names"}, "add_name": { "sql": "insert into names (name) values (:name)", "write": True, @@ -69,6 +70,22 @@ def test_insert(canned_write_client): assert [["Query executed, 1 row affected", 1]] == messages +@pytest.mark.parametrize( + "query_name,expect_csrf_hidden_field", + [("canned_read", False), ("add_name_specify_id", True), ("add_name", True),], +) +def test_canned_query_form_csrf_hidden_field( + canned_write_client, query_name, expect_csrf_hidden_field +): + response = canned_write_client.get("/data/{}".format(query_name)) + html = response.text + fragment = '