luci-base: protect simpleforms with CSRF tokens
authorJo-Philipp Wich <jow@openwrt.org>
Wed, 7 Oct 2015 10:24:51 +0000 (12:24 +0200)
committerJo-Philipp Wich <jow@openwrt.org>
Wed, 7 Oct 2015 10:24:58 +0000 (12:24 +0200)
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
modules/luci-base/luasrc/dispatcher.lua
modules/luci-base/luasrc/view/cbi/simpleform.htm

index a402d02..28dfd18 100644 (file)
@@ -869,6 +869,15 @@ local function _form(self, ...)
        local cbi = require "luci.cbi"
        local tpl = require "luci.template"
        local http = require "luci.http"
+       local disp = require "luci.dispatcher"
+
+       if http.formvalue("cbi.submit") == "1" and
+          http.formvalue("token") ~= disp.context.urltoken.stok
+       then
+               http.status(403, "Forbidden")
+               luci.template.render("csrftoken")
+               return
+       end
 
        local maps = luci.cbi.load(self.model, ...)
        local state = nil
index 437a07a..78f5c5a 100644 (file)
@@ -2,6 +2,7 @@
 <form method="post" enctype="multipart/form-data" action="<%=REQUEST_URI%>">
        <div>
                <script type="text/javascript" src="<%=resource%>/cbi.js"></script>
+               <input type="hidden" name="token" value="<%=token%>" />
                <input type="hidden" name="cbi.submit" value="1" />
        </div>
 <% end %>