Browse Source

improve security of Prometheus datasource

Mitsuhiro Tanda 9 years ago
parent
commit
69566a23fc
1 changed files with 8 additions and 0 deletions
  1. 8 0
      pkg/api/dataproxy.go

+ 8 - 0
pkg/api/dataproxy.go

@@ -6,6 +6,7 @@ import (
 	"net/http"
 	"net/http"
 	"net/http/httputil"
 	"net/http/httputil"
 	"net/url"
 	"net/url"
+	"strings"
 	"time"
 	"time"
 
 
 	"github.com/grafana/grafana/pkg/api/cloudwatch"
 	"github.com/grafana/grafana/pkg/api/cloudwatch"
@@ -107,6 +108,13 @@ func ProxyDataSourceRequest(c *middleware.Context) {
 
 
 	proxyPath := c.Params("*")
 	proxyPath := c.Params("*")
 
 
+	if ds.Type == m.DS_PROMETHEUS {
+		if !(c.Req.Request.Method == "GET" && strings.Index(proxyPath, "api/") == 0) {
+			c.JsonApiErr(403, "GET is only allowed on proxied Prometheus datasource", nil)
+			return
+		}
+	}
+
 	if ds.Type == m.DS_ES {
 	if ds.Type == m.DS_ES {
 		if c.Req.Request.Method == "DELETE" {
 		if c.Req.Request.Method == "DELETE" {
 			c.JsonApiErr(403, "Deletes not allowed on proxied Elasticsearch datasource", nil)
 			c.JsonApiErr(403, "Deletes not allowed on proxied Elasticsearch datasource", nil)